X-Git-Url: https://git.openstreetmap.org/chef.git/blobdiff_plain/ac0b810811c4994caa199827c26b7ee9ce8def11..1362b4f85261e2181197e83c94e989b39f15f3a6:/cookbooks/apt/resources/source.rb diff --git a/cookbooks/apt/resources/source.rb b/cookbooks/apt/resources/source.rb index 83fc3577f..44bd100ae 100644 --- a/cookbooks/apt/resources/source.rb +++ b/cookbooks/apt/resources/source.rb @@ -17,14 +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 -attribute :key_url, :kind_of => String +property :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) @@ -32,6 +32,49 @@ def initialize(name, run_context = nil) @action = node[:apt][:sources].include?(name) ? :create : :delete end -def after_created - notifies :run, "execute[apt-update]", :immediately if @action == :create +action :create do + if key + execute "apt-key-#{key}-clean" do + command "/usr/bin/apt-key adv --batch --delete-key --yes #key}" + only_if "/usr/bin/apt-key adv --list-keys #{key} | fgrep expired" + end + + if key_url + execute "apt-key-#{key}-install" do + command "/usr/bin/apt-key adv --fetch-keys #{key_url}" + not_if "/usr/bin/apt-key adv --list-keys #{key}" + notifies :run, "execute[apt-update-#{new_resource.name}]" + end + else + execute "apt-key-#{key}-install" do + command "/usr/bin/apt-key adv --keyserver hkp://keys.gnupg.net --recv-keys #{key}" + not_if "/usr/bin/apt-key adv --list-keys #{key}" + notifies :run, "execute[apt-update-#{new_resource.name}]" + end + end + end + + template source_path do + source source_template + owner "root" + group "root" + mode 0o644 + variables :url => url + notifies :run, "execute[apt-update-#{new_resource.name}]" + end + + execute "apt-update-#{name}" do + action 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 + +def source_path + "/etc/apt/sources.list.d/#{name}.list" end