X-Git-Url: https://git.openstreetmap.org/chef.git/blobdiff_plain/8fe918b2f21cce5df41b31dc8f58b34aad65dd57..fa6052608948cf1692f49c1c2e7a0842bacd7052:/cookbooks/apt/resources/source.rb diff --git a/cookbooks/apt/resources/source.rb b/cookbooks/apt/resources/source.rb index 2839b29b6..904a97b74 100644 --- a/cookbooks/apt/resources/source.rb +++ b/cookbooks/apt/resources/source.rb @@ -17,13 +17,14 @@ # limitations under the License. # -actions :create, :delete default_action :create -attribute :name, :kind_of => String, :name_attribute => true -attribute :template, :kind_of => String, :default => "default.list.erb" -attribute :url, :kind_of => String, :required => true -attribute :key, :kind_of => String +property :source_name, String, :name_property => true +property :source_template, String, :default => "default.list.erb" +property :url, String, :required => true +property :key, String +property :key_url, String +property :update, [TrueClass, FalseClass], :default => false def initialize(name, run_context = nil) super(name, run_context) @@ -31,6 +32,51 @@ def initialize(name, run_context = nil) @action = node[:apt][:sources].include?(name) ? :create : :delete end -def after_created - notifies :run, "execute[apt-update]", :immediately +action :create do + if new_resource.key + execute "apt-key-#{new_resource.key}-clean" do + command "/usr/bin/apt-key adv --batch --delete-key --yes #key}" + only_if "/usr/bin/apt-key adv --list-keys #{new_resource.key} | fgrep expired" + end + + if new_resource.key_url + execute "apt-key-#{new_resource.key}-install" do + command "/usr/bin/apt-key adv --fetch-keys #{new_resource.key_url}" + not_if "/usr/bin/apt-key adv --list-keys #{new_resource.key}" + notifies :run, "execute[apt-update-#{new_resource.source_name}]" + end + else + execute "apt-key-#{new_resource.key}-install" do + command "/usr/bin/apt-key adv --keyserver hkp://keys.gnupg.net --recv-keys #{new_resource.key}" + not_if "/usr/bin/apt-key adv --list-keys #{new_resource.key}" + notifies :run, "execute[apt-update-#{new_resource.source_name}]" + end + end + end + + template source_path do + source new_resource.source_template + owner "root" + group "root" + mode 0o644 + variables :url => new_resource.url + notifies :run, "execute[apt-update-#{new_resource.source_name}]" + end + + execute "apt-update-#{new_resource.source_name}" do + action new_resource.update ? :run : :nothing + command "/usr/bin/apt-get update --no-list-cleanup -o Dir::Etc::sourcelist='#{source_path}' -o Dir::Etc::sourceparts='-'" + end +end + +action :delete do + file source_path do + action :delete + end +end + +action_class do + def source_path + "/etc/apt/sources.list.d/#{new_resource.source_name}.list" + end end