In Ruby 3.0 net-ftp changed from a bundled gem to a default gem. This
means it may not be available, such as when running unit tests.
Since ftp is becoming less and less common, this changes net-ftp to be
an optional dependency. Users who do need ftp support should ensure the
gem is installed.
# frozen_string_literal: true
require 'open-uri'
# frozen_string_literal: true
require 'open-uri'
+begin
+ require 'net/ftp'
+rescue LoadError
+ # Ruby 3.0 changed net-ftp to a default gem
+end
require 'tempfile'
Puppet::Type.type(:apt_key).provide(:apt_key) do
require 'tempfile'
Puppet::Type.type(:apt_key).provide(:apt_key) do
+ exceptions = [OpenURI::HTTPError]
+ exceptions << Net::FTPPermError if defined?(Net::FTPPermError)
+
begin
# Only send basic auth if URL contains userinfo
# Some webservers (e.g. Amazon S3) return code 400 if empty basic auth is sent
begin
# Only send basic auth if URL contains userinfo
# Some webservers (e.g. Amazon S3) return code 400 if empty basic auth is sent
parsed_value.userinfo = ''
key = open(parsed_value, http_basic_authentication: user_pass).read
end
parsed_value.userinfo = ''
key = open(parsed_value, http_basic_authentication: user_pass).read
end
- rescue OpenURI::HTTPError, Net::FTPPermError => e
+ rescue *exceptions => e
raise(_('%{_e} for %{_resource}') % { _e: e.message, _resource: resource[:source] })
rescue SocketError
raise(_('could not resolve %{_resource}') % { _resource: resource[:source] })
raise(_('%{_e} for %{_resource}') % { _e: e.message, _resource: resource[:source] })
rescue SocketError
raise(_('could not resolve %{_resource}') % { _resource: resource[:source] })