X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=lib%2Fpuppet%2Fprovider%2Fapt_key%2Fapt_key.rb;h=3ef94315089634cb75eb5f8cefa8886be20e09cc;hb=87f3f1023cad452937d3b4c0bad84c69b442ffa1;hp=7e221dded5ae8f07bd751d4587edfa3b611fb7d5;hpb=374101612c035ec5765c767d234d127d5c7a4870;p=puppet-modules%2Fpuppetlabs-apt.git diff --git a/lib/puppet/provider/apt_key/apt_key.rb b/lib/puppet/provider/apt_key/apt_key.rb index 7e221dd..3ef9431 100644 --- a/lib/puppet/provider/apt_key/apt_key.rb +++ b/lib/puppet/provider/apt_key/apt_key.rb @@ -1,7 +1,16 @@ require 'date' require 'open-uri' +require 'net/ftp' require 'tempfile' +if RUBY_VERSION == '1.8.7' + # Mothers cry, puppies die and Ruby 1.8.7's open-uri needs to be + # monkeypatched to support passing in :ftp_passive_mode. + require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', + 'puppet_x', 'apt_key', 'patch_openuri.rb')) + OpenURI::Options.merge!({:ftp_active_mode => false,}) +end + Puppet::Type.type(:apt_key).provide(:apt_key) do KEY_LINE = { @@ -17,7 +26,12 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do commands :apt_key => 'apt-key' def self.instances - key_array = apt_key('list').split("\n").collect do |line| + if RUBY_VERSION > '1.8.7' + key_output = apt_key('list').encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '') + else + key_output = apt_key('list') + end + key_array = key_output.split("\n").collect do |line| line_hash = key_line_hash(line) next unless line_hash expired = false @@ -43,7 +57,12 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do def self.prefetch(resources) apt_keys = instances resources.keys.each do |name| - if provider = apt_keys.find{ |key| key.name == name } + if name.length == 16 + shortname=name[8..-1] + else + shortname=name + end + if provider = apt_keys.find{ |key| key.name == shortname } resources[name].provider = provider end end @@ -99,8 +118,8 @@ Puppet::Type.type(:apt_key).provide(:apt_key) do value else begin - key = open(value).read - rescue OpenURI::HTTPError => e + key = open(value, :ftp_active_mode => false).read + rescue OpenURI::HTTPError, Net::FTPPermError => e fail("#{e.message} for #{resource[:source]}") rescue SocketError fail("could not resolve #{resource[:source]}")