This repository has been archived on 2025-02-14. You can view files and clone it, but cannot push or open issues or pull requests.
esh/esh_undocker/resources/download.rb

58 lines
1.8 KiB
Ruby
Raw Permalink Normal View History

2025-02-15 00:56:26 +09:00
#
# Cookbook:: esh_undocker
# Resource:: download
#
# Copyright:: 2022, https://easyself.host
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
unified_mode true
property :image, String, name_property: true
default_action :download
action :download do
image = new_resource.image
parts = image.split(':')
tag = parts.pop
url, image = parts.join(':').split('/', 2)
apt_package %w(skopeo ca-certificates jq)
directory "#{Chef::Config['file_cache_path']}/#{image}-#{tag}" do
owner 'root'
group 'root'
mode '0755'
recursive true
action :create
end
current_created = `skopeo inspect oci:#{Chef::Config['file_cache_path']}/#{image}-#{tag}:#{tag} | jq -r .Created`.strip
latest_created = `skopeo inspect docker://#{url}/#{image}:#{tag} | jq -r .Created`.strip
directory "#{Chef::Config['file_cache_path']}/#{image}-#{tag}" do
recursive true
action :delete
only_if { current_created != latest_created }
end
execute "download docker image #{image} as oci layout format" do
command <<~EOT
skopeo copy \
docker://#{url}/#{image}:#{tag} \
oci:#{Chef::Config['file_cache_path']}/#{image}-#{tag}:#{tag}
EOT
not_if { ::File.exist?("#{Chef::Config['file_cache_path']}/#{image}-#{tag}/index.json") }
live_stream true
end
end