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.

Parameters:

  • name (Symbol)

    the service to resolve

  • url (URI) (defaults to: nil)

    optional explicit url to use, if it is already known

  • ssl_context (Puppet::SSL::SSLContext) (defaults to: nil)

    ssl context to be used for connections

Returns:

Raises:

  • (ArgumentError)


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