Class: Puppet::Forge::Repository
- Includes:
- Errors
- Defined in:
- lib/puppet/forge/repository.rb
Overview
Repository
This class is a file for accessing remote repositories with modules.
Constant Summary collapse
- NET_HTTP_EXCEPTIONS =
List of Net::HTTP exceptions to catch
[ EOFError, Errno::ECONNABORTED, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EINVAL, Errno::ETIMEDOUT, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError, SocketError, ]
Instance Attribute Summary collapse
-
#cache ⇒ Object
readonly
Returns the value of attribute cache.
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
Instance Method Summary collapse
-
#cache_key ⇒ Object
Return the cache key for this repository, this a hashed string based on the URI.
- #forge_authorization ⇒ Object
-
#get_request_object(path) ⇒ Object
responsible for properly encoding a URI.
-
#initialize(host, for_agent) ⇒ Repository
constructor
Instantiate a new repository instance rooted at the
url
. -
#make_http_request(path, io = nil) ⇒ Object
Return a Net::HTTPResponse read for this
path
. -
#read_response(request, io = nil) ⇒ Net::HTTPResponse
Return a Net::HTTPResponse read from this HTTPRequest
request
. -
#retrieve(release) ⇒ Object
Return the local file name containing the data downloaded from the repository at
release
(e.g. “myuser-mymodule”). -
#to_s ⇒ Object
Return the URI string for this repository.
Constructor Details
#initialize(host, for_agent) ⇒ Repository
Instantiate a new repository instance rooted at the url
. The library will report for_agent
in the User-Agent to the repository.
38 39 40 41 42 43 |
# File 'lib/puppet/forge/repository.rb', line 38 def initialize(host, for_agent) @host = host @agent = for_agent @cache = Cache.new(self) @uri = URI.parse(host) end |
Instance Attribute Details
#cache ⇒ Object (readonly)
Returns the value of attribute cache.
16 17 18 |
# File 'lib/puppet/forge/repository.rb', line 16 def cache @cache end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
16 17 18 |
# File 'lib/puppet/forge/repository.rb', line 16 def uri @uri end |
Instance Method Details
#cache_key ⇒ Object
Return the cache key for this repository, this a hashed string based on the URI.
139 140 141 142 143 144 |
# File 'lib/puppet/forge/repository.rb', line 139 def cache_key return @cache_key ||= [ @host.to_s.gsub(/[^[:alnum:]]+/, '_').sub(/_$/, ''), Digest::SHA1.hexdigest(@host.to_s) ].join('-').freeze end |
#forge_authorization ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/puppet/forge/repository.rb', line 52 def if Puppet[:forge_authorization] Puppet[:forge_authorization] elsif Puppet.features.pe_license? PELicense.load_license_key. end end |
#get_request_object(path) ⇒ Object
responsible for properly encoding a URI
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/puppet/forge/repository.rb', line 61 def get_request_object(path) headers = { "User-Agent" => user_agent, } if Puppet.features.zlib? headers = headers.merge({ "Accept-Encoding" => Puppet::Network::HTTP::Compression::ACCEPT_ENCODING }) end if headers = headers.merge({"Authorization" => }) end request = Net::HTTP::Get.new(Puppet::Util.uri_encode(path), headers) unless @uri.user.nil? || @uri.password.nil? || request.basic_auth(@uri.user, @uri.password) end return request end |
#make_http_request(path, io = nil) ⇒ Object
Return a Net::HTTPResponse read for this path
.
46 47 48 49 50 |
# File 'lib/puppet/forge/repository.rb', line 46 def make_http_request(path, io = nil) Puppet.debug "HTTP GET #{@host}#{path}" request = get_request_object(@uri.path.chomp('/')+path) return read_response(request, io) end |
#read_response(request, io = nil) ⇒ Net::HTTPResponse
Return a Net::HTTPResponse read from this HTTPRequest request
.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/puppet/forge/repository.rb', line 93 def read_response(request, io = nil) http_object = Puppet::Util::HttpProxy.get_http_object(uri) http_object.start do |http| response = http.request(request) if Puppet.features.zlib? if response && response.key?("content-encoding") case response["content-encoding"] when "gzip" response.body = Zlib::GzipReader.new(StringIO.new(response.read_body), :encoding => "ASCII-8BIT").read response.delete("content-encoding") when "deflate" response.body = Zlib::Inflate.inflate(response.read_body) response.delete("content-encoding") end end end io.write(response.body) if io.respond_to? :write response end rescue *NET_HTTP_EXCEPTIONS => e raise CommunicationError.new(:uri => @uri.to_s, :original => e) rescue OpenSSL::SSL::SSLError => e if e. =~ /certificate verify failed/ raise SSLVerifyError.new(:uri => @uri.to_s, :original => e) else raise e end end |
#retrieve(release) ⇒ Object
Return the local file name containing the data downloaded from the repository at release
(e.g. “myuser-mymodule”).
127 128 129 130 |
# File 'lib/puppet/forge/repository.rb', line 127 def retrieve(release) path = @host.chomp('/') + release return cache.retrieve(path) end |
#to_s ⇒ Object
Return the URI string for this repository.
133 134 135 |
# File 'lib/puppet/forge/repository.rb', line 133 def to_s "#<#{self.class} #{@host}>" end |