Class: Puppet::HTTP::Resolver::ServerList
- Inherits:
-
Puppet::HTTP::Resolver
- Object
- Puppet::HTTP::Resolver
- Puppet::HTTP::Resolver::ServerList
- Defined in:
- lib/puppet/http/resolver/server_list.rb
Overview
Use the server_list setting to resolve a service. This resolver is only used if server_list is set either on the command line or in the configuration file.
Instance Method Summary collapse
-
#initialize(client, server_list_setting:, default_port:, services:) ⇒ ServerList
constructor
Create a server list resolver.
-
#resolve(session, name, ssl_context: nil, canceled_handler: nil) ⇒ nil, Puppet::HTTP::Service
Walk the server_list to find a server and port that will connect successfully.
Methods inherited from Puppet::HTTP::Resolver
Constructor Details
#initialize(client, server_list_setting:, default_port:, services:) ⇒ ServerList
Create a server list resolver.
18 19 20 21 22 23 |
# File 'lib/puppet/http/resolver/server_list.rb', line 18 def initialize(client, server_list_setting:, default_port:, services: ) @client = client @server_list_setting = server_list_setting @default_port = default_port @services = services end |
Instance Method Details
#resolve(session, name, ssl_context: nil, canceled_handler: nil) ⇒ nil, Puppet::HTTP::Service
Walk the server_list to find a server and port that will connect successfully.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/puppet/http/resolver/server_list.rb', line 42 def resolve(session, name, ssl_context: nil, canceled_handler: nil) # If we're configured to use an explicit service host, e.g. report_server # then don't use server_list to resolve the `:report` service. return nil unless @services.include?(name) # If we resolved the URL already, use its host & port for the service if @resolved_url return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port) end # Return the first simple service status endpoint we can connect to @server_list_setting.value.each do |server| host = server[0] port = server[1] || @default_port service = Puppet::HTTP::Service.create_service(@client, session, :puppetserver, host, port) begin service.get_simple_status(ssl_context: ssl_context) @resolved_url = service.url return Puppet::HTTP::Service.create_service(@client, session, name, @resolved_url.host, @resolved_url.port) rescue Puppet::HTTP::ResponseError => detail Puppet.log_exception(detail, _("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") % { host: service.url.host, port: service.url.port, code: detail.response.code, reason: detail.response.reason }) rescue Puppet::HTTP::HTTPError => detail Puppet.log_exception(detail, _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}) end end # don't fallback to other resolvers canceled_handler.call(true) if canceled_handler # not found nil end |