# # 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