X-Git-Url: https://git.openstreetmap.org./chef.git/blobdiff_plain/62e4ecb57749d4c45eeed2fc5e8bba1fac2f92bc..bf16c782a9d8e78c4b14a35b899b81992f91155f:/cookbooks/apt/resources/source.rb diff --git a/cookbooks/apt/resources/source.rb b/cookbooks/apt/resources/source.rb index 83fc3577f..d678ccca9 100644 --- a/cookbooks/apt/resources/source.rb +++ b/cookbooks/apt/resources/source.rb @@ -8,7 +8,7 @@ # 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 +# https://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, @@ -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 :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) @@ -32,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 if @action == :create +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