Method: Puppet::HTTP::Session#route_to
- Defined in:
- lib/puppet/http/session.rb
#route_to(name, url: nil, ssl_context: nil) ⇒ Puppet::HTTP::Service
If an explicit server and port are specified on the command line or configuration file, this method always returns a Service with that host and port. Otherwise, we walk the list of resolvers in priority order:
- DNS SRV
- Server List
- Puppet server/port settings
If a given resolver fails to connect, it tries the next available resolver until a successful connection is found and returned. The successful service is cached and returned if route_to is called again.
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 76 77 78 79 80 |
# File 'lib/puppet/http/session.rb', line 51 def route_to(name, url: nil, ssl_context: nil) raise ArgumentError, "Unknown service #{name}" unless Puppet::HTTP::Service.valid_name?(name) # short circuit if explicit URL host & port given if url && !url.host.nil? && !url.host.empty? service = Puppet::HTTP::Service.create_service(@client, self, name, url.host, url.port) service.connect(ssl_context: ssl_context) return service end cached = @resolved_services[name] return cached if cached canceled = false canceled_handler = ->(cancel) { canceled = cancel } @resolvers.each do |resolver| Puppet.debug("Resolving service '#{name}' using #{resolver.class}") service = resolver.resolve(self, name, ssl_context: ssl_context, canceled_handler: canceled_handler) if service @resolved_services[name] = service Puppet.debug("Resolved service '#{name}' to #{service.url}") return service elsif canceled break end end raise Puppet::HTTP::RouteError, "No more routes to #{name}" end |