Skip to content

Commit 9a10d86

Browse files
committed
(maint) wip
1 parent 6a9396f commit 9a10d86

File tree

5 files changed

+16
-32
lines changed

5 files changed

+16
-32
lines changed

lib/puppet/http/resolver/serverlist.rb

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
class Puppet::HTTP::Resolver::ServerList < Puppet::HTTP::Resolver
2-
def initialize(client, server_list: Puppet[:server_list], default_port: Puppet[:masterport])
2+
def initialize(client, server_list:, default_port:)
33
@client = client
44
@server_list = server_list
55
@default_port = default_port
66
end
77

88
def resolve(session, name, ssl_context: nil, &block)
9-
success = false
109
@server_list.each do |server|
1110
host = server[0]
1211
port = server[1] || @default_port
1312
uri = URI("https://#{host}:#{port}/status/v1/simple/master")
14-
service = Puppet::HTTP::Service.create_service(@client, name, host, port)
15-
if check_connection?(uri, session, service, ssl_context: ssl_context)
16-
success = true
17-
return service
13+
if get_success?(uri, session, ssl_context: ssl_context)
14+
return Puppet::HTTP::Service.create_service(@client, name, host, port)
1815
end
1916
end
2017

21-
raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: Puppet.settings.value(:server_list, Puppet[:environment].to_sym, true) } unless success
18+
raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: Puppet.settings.value(:server_list, Puppet[:environment].to_sym, true) }
2219
end
2320

24-
def check_connection?(uri, session, service, ssl_context: nil)
21+
def get_success?(uri, session, ssl_context: nil)
2522
response = @client.get(uri, ssl_context: ssl_context)
2623
return true if response.success?
2724

lib/puppet/http/resolver/settings.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Puppet::HTTP::Resolver::Settings < Puppet::HTTP::Resolver
22
def resolve(session, name, ssl_context: nil, &block)
33
service = Puppet::HTTP::Service.create_service(@client, name)
4-
return service if check_connection?(session, service, ssl_context: ssl_context)
4+
check_connection?(session, service, ssl_context: ssl_context) ? service : nil
55
end
66
end

lib/puppet/http/resolver/srv.rb

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ def resolve(session, name, ssl_context: nil, &block)
1313
service = Puppet::HTTP::Service.create_service(@client, name, server, port)
1414
return service if check_connection?(session, service, ssl_context: ssl_context)
1515
end
16+
17+
return nil
1618
end
1719
end

lib/puppet/http/session.rb

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def route_to(name, ssl_context: nil)
1212
cached = @resolved_services[name]
1313
return cached if cached
1414

15+
@resolution_exceptions = []
16+
1517
@resolvers.each do |resolver|
1618
Puppet.debug("Resolving service '#{name}' using #{resolver.class}")
1719
service = resolver.resolve(self, name, ssl_context: ssl_context)

spec/unit/http/resolver_spec.rb

+6-23
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
end
2424

2525
context 'when resolving using server_list' do
26-
let(:subject) { Puppet::HTTP::Resolver::ServerList.new(client) }
26+
let(:server_list) { [["ca.example.com", "8141"], ["apple.example.com"]] }
27+
let(:default_port) { '8142' }
28+
let(:subject) { Puppet::HTTP::Resolver::ServerList.new(client, server_list: server_list, default_port: default_port) }
2729

2830
it 'yields a service based on the current server_list setting' do
29-
Puppet[:server_list] = 'ca.example.com:8141'
30-
3131
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 200)
3232

3333
subject.resolve(session, :ca) do |service|
@@ -37,8 +37,6 @@
3737
end
3838

3939
it 'yields a service based on the current server_list setting if the server returns any success codes' do
40-
Puppet[:server_list] = 'ca.example.com:8141'
41-
4240
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 202)
4341

4442
subject.resolve(session, :ca) do |service|
@@ -48,34 +46,19 @@
4846
end
4947

5048
it 'falls fails if no servers in server_list are accessible' do
51-
Puppet[:server_list] = 'ca.example.com:8141'
52-
5349
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 503)
50+
stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 503)
5451

5552
expect { subject.resolve(session, :ca) }.to raise_error(Puppet::Error, /^Could not select a functional puppet master from server_list:/)
5653
end
5754

5855
it 'cycles through server_list until a valid server is found' do
59-
Puppet[:server_list] = 'ca.example.com:8141, ca.failover.com:1984'
60-
6156
stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 503)
62-
stub_request(:get, "https://ca.failover.com:1984/status/v1/simple/master").to_return(status: 200)
63-
64-
subject.resolve(session, :ca) do |service|
65-
expect(service).to be_an_instance_of(Puppet::HTTP::Service::Ca)
66-
expect(service.url.to_s).to eq("https://ca.failover.com:1984/puppet-ca/v1")
67-
end
68-
end
69-
70-
it 'defaults port to `Puppet[:masterport]` if no port is set' do
71-
Puppet[:server_list] = 'ca.example.com'
72-
Puppet[:masterport] = 8142
73-
74-
stub_request(:get, "https://ca.example.com:8142/status/v1/simple/master").to_return(status: 200)
57+
stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 200)
7558

7659
subject.resolve(session, :ca) do |service|
7760
expect(service).to be_an_instance_of(Puppet::HTTP::Service::Ca)
78-
expect(service.url.to_s).to eq("https://ca.example.com:8142/puppet-ca/v1")
61+
expect(service.url.to_s).to eq("https://apple.example.com:8142/puppet-ca/v1")
7962
end
8063
end
8164
end

0 commit comments

Comments
 (0)