Class: Puppet::Network::HTTP::Connection

Inherits:
Object
  • Object
show all
Includes:
Authentication
Defined in:
lib/puppet/network/http/connection.rb

Overview

This class provides simple methods for issuing various types of HTTP requests. It’s interface is intended to mirror Ruby’s Net::HTTP object, but it provides a few important bits of additional functionality. Notably:

  • Any HTTPS requests made using this class will use Puppet’s SSL certificate configuration for their authentication, and

  • Provides some useful error handling for any SSL errors that occur during a request.

Constant Summary collapse

OPTION_DEFAULTS =
{
  :use_ssl => true,
  :verify => nil,
  :redirect_limit => 10,
}
@@openssl_initialized =
false

Instance Method Summary collapse

Methods included from Authentication

#warn_if_near_expiration

Constructor Details

#initialize(host, port, options = {}) ⇒ Connection

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

the HTTP connection itself happens lazily only when #request, or one of the #get, #post, #delete, #head or #put is called

Note:

The correct way to obtain a connection is to use one of the factory methods on Puppet::Network::HttpPool

Creates a new HTTP client connection to host:port.

Options Hash (options):

  • :use_ssl (Boolean)

    true to connect with SSL, false otherwise, defaults to true

  • :verify (#setup_connection)

    An object that will configure any verification to do on the connection

  • :redirect_limit (Fixnum)

    the number of allowed redirections, defaults to 10 passing any other option in the options hash results in a Puppet::Error exception

Raises:



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/puppet/network/http/connection.rb', line 52

def initialize(host, port, options = {})
  @host = host
  @port = port

  unknown_options = options.keys - OPTION_DEFAULTS.keys
  raise Puppet::Error, "Unrecognized option(s): #{unknown_options.map(&:inspect).sort.join(', ')}" unless unknown_options.empty?

  options = OPTION_DEFAULTS.merge(options)
  @use_ssl = options[:use_ssl]
  @verify = options[:verify]
  @redirect_limit = options[:redirect_limit]
end

Instance Method Details

#addressObject

end of Net::HTTP#request_* proxies



140
141
142
# File 'lib/puppet/network/http/connection.rb', line 140

def address
  connection.address
end

#delete(path, headers = {'Depth' => 'Infinity'}, options = {}) ⇒ Object

Options Hash (options):

  • :basic_auth (Hash{Symbol => String})

    The basic auth :username and :password to use for the request



101
102
103
# File 'lib/puppet/network/http/connection.rb', line 101

def delete(path, headers = {'Depth' => 'Infinity'}, options = {})
  request_with_redirects(Net::HTTP::Delete.new(path, headers), options)
end

#get(path, headers = {}, options = {}) ⇒ Object

Options Hash (options):

  • :basic_auth (Hash{Symbol => String})

    The basic auth :username and :password to use for the request



74
75
76
# File 'lib/puppet/network/http/connection.rb', line 74

def get(path, headers = {}, options = {})
  request_with_redirects(Net::HTTP::Get.new(path, headers), options)
end

#head(path, headers = {}, options = {}) ⇒ Object

Options Hash (options):

  • :basic_auth (Hash{Symbol => String})

    The basic auth :username and :password to use for the request



93
94
95
# File 'lib/puppet/network/http/connection.rb', line 93

def head(path, headers = {}, options = {})
  request_with_redirects(Net::HTTP::Head.new(path, headers), options)
end

#portObject



144
145
146
# File 'lib/puppet/network/http/connection.rb', line 144

def port
  connection.port
end

#post(path, data, headers = nil, options = {}) ⇒ Object

Options Hash (options):

  • :basic_auth (Hash{Symbol => String})

    The basic auth :username and :password to use for the request



83
84
85
86
87
# File 'lib/puppet/network/http/connection.rb', line 83

def post(path, data, headers = nil, options = {})
  request = Net::HTTP::Post.new(path, headers)
  request.body = data
  request_with_redirects(request, options)
end

#put(path, data, headers = nil, options = {}) ⇒ Object

Options Hash (options):

  • :basic_auth (Hash{Symbol => String})

    The basic auth :username and :password to use for the request



110
111
112
113
114
# File 'lib/puppet/network/http/connection.rb', line 110

def put(path, data, headers = nil, options = {})
  request = Net::HTTP::Put.new(path, headers)
  request.body = data
  request_with_redirects(request, options)
end

#request(method, *args) ⇒ Object



116
117
118
# File 'lib/puppet/network/http/connection.rb', line 116

def request(method, *args)
  self.send(method, *args)
end

#request_get(*args, &block) ⇒ Object

TODO: These are proxies for the Net::HTTP#request_* methods, which are almost the same as the “get”, “post”, etc. methods that we’ve ported above, but they are able to accept a code block and will yield to it. For now we’re not funneling these proxy implementations through our #request method above, so they will not inherit the same error handling. In the future we may want to refactor these so that they are funneled through that method and do inherit the error handling.



127
128
129
# File 'lib/puppet/network/http/connection.rb', line 127

def request_get(*args, &block)
  connection.request_get(*args, &block)
end

#request_head(*args, &block) ⇒ Object



131
132
133
# File 'lib/puppet/network/http/connection.rb', line 131

def request_head(*args, &block)
  connection.request_head(*args, &block)
end

#request_post(*args, &block) ⇒ Object



135
136
137
# File 'lib/puppet/network/http/connection.rb', line 135

def request_post(*args, &block)
  connection.request_post(*args, &block)
end

#use_ssl?Boolean



148
149
150
# File 'lib/puppet/network/http/connection.rb', line 148

def use_ssl?
  connection.use_ssl?
end