beaker-answers 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/beaker-answers/pe_conf.rb +50 -2
- data/lib/beaker-answers/version.rb +1 -1
- data/spec/beaker-answers/pe_conf_spec.rb +181 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGExODA0NjAzYmM2NzRmOGI4NzY2YmE2NjQ1MzRlODhmNzU5NjA2YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWY0ODA1NTU4NTgxYTMwMDE4MDBhNTUwYWE5NGY4NjBlZmY2ZWVhZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWU4N2E0NDg4NDFlMjY4YzQ3ZmU2MWVhMjg4NjcyYzE5NDllZTliZTk1MjM3
|
10
|
+
YmEyNjg1ZGYyMDA0NjMwNWFmMWYwMGQ1ZjIwNjE3NzUwNzdkZjFmZDc4Mzll
|
11
|
+
MGUzNTJmMTY3OGI0NTFiNTAyMjMxOGNmNjk4MWU0ZDhiZTZmMTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDYzNGY3YTIzYTQ2NzVkYTc2OTBiOGVhZTg0YTNjYTU3ZTNkNTlhZGU2YTJl
|
14
|
+
ZTAzMjJkMGM0NzQ5ZWRhN2ZmNjg5YWI4NDViOWY0YTFhMjIwMGZiMGVlNzU3
|
15
|
+
NjQ5N2FhY2MxMjE1MjQyZmI4Mjg3YzhjODdlOThhNjNmOTk0Zjg=
|
@@ -82,6 +82,19 @@ module BeakerAnswers
|
|
82
82
|
pe_conf["#{ns}::puppetdb_host"] = puppetdb.hostname
|
83
83
|
end
|
84
84
|
|
85
|
+
if the_host_with_role('pe_postgres', raise_error=false)
|
86
|
+
pe_conf["#{ns}::database_host"] = the_host_with_role('pe_postgres', raise_error=false).hostname
|
87
|
+
if options[:pe_postgresql_options]
|
88
|
+
if options[:pe_postgresql_options][:security] == 'cert'
|
89
|
+
postgres_cert_answers(pe_conf, '1.0')
|
90
|
+
elsif options[:pe_postgresql_options][:security] == 'password'
|
91
|
+
postgres_password_answers(pe_conf, '1.0')
|
92
|
+
end
|
93
|
+
else
|
94
|
+
postgres_password_answers(pe_conf, '1.0')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
85
98
|
pe_conf
|
86
99
|
end
|
87
100
|
|
@@ -119,6 +132,18 @@ module BeakerAnswers
|
|
119
132
|
conf
|
120
133
|
end
|
121
134
|
|
135
|
+
#Set the PE managed postgres roles/answers
|
136
|
+
if the_host_with_role('pe_postgres', raise_error=false)
|
137
|
+
pe_conf["puppet_enterprise::profile::database"] = the_host_with_role('pe_postgres', raise_error=false).hostname
|
138
|
+
if options[:pe_postgresql_options][:security]
|
139
|
+
if options[:pe_postgresql_options][:security] == 'cert'
|
140
|
+
postgres_cert_answers(pe_conf, "2.0")
|
141
|
+
elsif options[:pe_postgresql_options][:security] == 'password'
|
142
|
+
postgres_password_answers(pe_conf, "2.0")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
122
147
|
# Collect a uniq array of all host platforms modified to pe_repo class format
|
123
148
|
platforms = hosts.map do |h|
|
124
149
|
platform = h['platform']
|
@@ -149,18 +174,41 @@ module BeakerAnswers
|
|
149
174
|
# one host is found to have the provided role.
|
150
175
|
#
|
151
176
|
# @param [String] role The host returned will have this role in its role list
|
177
|
+
# @param [String] raise_error defaults to true if you want this method to return
|
178
|
+
# an error if there are no hosts, or if there are too many hosts
|
152
179
|
# @return [Host] The single host with the desired role in its roles list
|
153
180
|
# @raise [ArgumentError] Raised if more than one host has the given role
|
154
181
|
# defined, or if no host has the role defined.
|
155
|
-
def the_host_with_role(role)
|
182
|
+
def the_host_with_role(role, raise_error=true)
|
156
183
|
found_hosts = hosts.select do |h|
|
157
184
|
Array(h['roles']).include?(role.to_s)
|
158
185
|
end
|
159
186
|
|
160
|
-
if found_hosts.length == 0 or found_hosts.length > 1
|
187
|
+
if (found_hosts.length == 0 or found_hosts.length > 1) && (raise_error)
|
161
188
|
raise ArgumentError, "There should be one host with #{role} defined, found #{found_hosts.length} matching hosts (#{found_hosts})"
|
162
189
|
end
|
163
190
|
found_hosts.first
|
164
191
|
end
|
192
|
+
|
193
|
+
def postgres_cert_answers(pe_conf, meep_schema_version)
|
194
|
+
case meep_schema_version
|
195
|
+
when '1.0','2.0'
|
196
|
+
pe_conf["puppet_enterprise::database_ssl"] = true
|
197
|
+
pe_conf["puppet_enterprise::database_cert_auth"] = true
|
198
|
+
end
|
199
|
+
pe_conf
|
200
|
+
end
|
201
|
+
|
202
|
+
def postgres_password_answers(pe_conf, meep_schema_version)
|
203
|
+
case meep_schema_version
|
204
|
+
when '1.0','2.0'
|
205
|
+
pe_conf["puppet_enterprise::activity_database_password"] = "PASSWORD"
|
206
|
+
pe_conf["puppet_enterprise::classifier_database_password"] = "PASSWORD"
|
207
|
+
pe_conf["puppet_enterprise::orchestrator_database_password"] = "PASSWORD"
|
208
|
+
pe_conf["puppet_enterprise::puppetdb_database_password"] = "PASSWORD"
|
209
|
+
pe_conf["puppet_enterprise::rbac_database_password"] = "PASSWORD"
|
210
|
+
end
|
211
|
+
pe_conf
|
212
|
+
end
|
165
213
|
end
|
166
214
|
end
|
@@ -2,6 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'BeakerAnswers::PeConf' do
|
4
4
|
let(:basic_hosts) { make_hosts({'pe_ver' => ver }, host_count) }
|
5
|
+
let(:host) { Beaker::Host.create('host', {}, make_host_opts('host', options.merge(platform))) }
|
5
6
|
|
6
7
|
RSpec.shared_examples 'pe.conf configuration' do
|
7
8
|
context 'monolithic' do
|
@@ -21,6 +22,41 @@ describe 'BeakerAnswers::PeConf' do
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
25
|
+
context 'pe_postgres_cert' do
|
26
|
+
let(:host_count) { 2 }
|
27
|
+
let(:hosts) do
|
28
|
+
basic_hosts[0][:pe_postgresql_options] = {:security=>"cert"}
|
29
|
+
basic_hosts[0]['roles'] = ['master', 'dashboard', 'database', 'agent']
|
30
|
+
basic_hosts[0]['platform'] = 'el-6-x86_64'
|
31
|
+
basic_hosts[1]['roles'] = ['agent', 'pe_postgres']
|
32
|
+
basic_hosts[1]['platform'] = 'el-6-x86_64'
|
33
|
+
basic_hosts
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'generates a hash of monolithic configuring that uses an external postgres with cert setup' do
|
37
|
+
expect(BeakerAnswers::PeConf.new(hosts, meep_schema_version, {:pe_postgresql_options => {:security => "cert"}}).configuration_hash).to(
|
38
|
+
match(gold_pe_postgres_cert_configuration_hash)
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'pe_postgres_password' do
|
44
|
+
let(:host_count) { 2 }
|
45
|
+
let(:hosts) do
|
46
|
+
basic_hosts[0]['roles'] = ['master', 'dashboard', 'database', 'agent']
|
47
|
+
basic_hosts[0]['platform'] = 'el-6-x86_64'
|
48
|
+
basic_hosts[1]['roles'] = ['agent', 'pe_postgres']
|
49
|
+
basic_hosts[1]['platform'] = 'el-6-x86_64'
|
50
|
+
basic_hosts
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'generates a hash of monolithic configuring that uses an external postgres with passwords' do
|
54
|
+
expect(BeakerAnswers::PeConf.new(hosts, meep_schema_version, {:pe_postgresql_options => {:security => "password"}}).configuration_hash).to(
|
55
|
+
match(gold_pe_postgres_password_configuration_hash)
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
24
60
|
context 'split' do
|
25
61
|
let(:host_count) { 6 }
|
26
62
|
let(:hosts) do
|
@@ -62,7 +98,25 @@ describe 'BeakerAnswers::PeConf' do
|
|
62
98
|
"puppet_enterprise::puppetdb_host" => basic_hosts[2].hostname,
|
63
99
|
}
|
64
100
|
end
|
65
|
-
|
101
|
+
let(:gold_pe_postgres_cert_configuration_hash) do
|
102
|
+
{
|
103
|
+
"puppet_enterprise::database_cert_auth" => true,
|
104
|
+
"puppet_enterprise::database_ssl" => true,
|
105
|
+
"puppet_enterprise::puppet_master_host" => basic_hosts[0].hostname,
|
106
|
+
"puppet_enterprise::database_host" => basic_hosts[1].hostname
|
107
|
+
}
|
108
|
+
end
|
109
|
+
let(:gold_pe_postgres_password_configuration_hash) do
|
110
|
+
{
|
111
|
+
"puppet_enterprise::activity_database_password" => "PASSWORD",
|
112
|
+
"puppet_enterprise::classifier_database_password" => "PASSWORD",
|
113
|
+
"puppet_enterprise::orchestrator_database_password" => "PASSWORD",
|
114
|
+
"puppet_enterprise::puppetdb_database_password" => "PASSWORD",
|
115
|
+
"puppet_enterprise::rbac_database_password" => "PASSWORD",
|
116
|
+
"puppet_enterprise::puppet_master_host" => basic_hosts[0].hostname,
|
117
|
+
"puppet_enterprise::database_host" => basic_hosts[1].hostname
|
118
|
+
}
|
119
|
+
end
|
66
120
|
include_examples 'pe.conf configuration'
|
67
121
|
end
|
68
122
|
|
@@ -78,6 +132,33 @@ describe 'BeakerAnswers::PeConf' do
|
|
78
132
|
"meep_schema_version" => "2.0",
|
79
133
|
}
|
80
134
|
end
|
135
|
+
let(:gold_pe_postgres_cert_configuration_hash) do
|
136
|
+
{
|
137
|
+
"node_roles" => {
|
138
|
+
"pe_role::monolithic::primary_master" => [basic_hosts[0].hostname],
|
139
|
+
},
|
140
|
+
"puppet_enterprise::profile::database" => basic_hosts[1].hostname,
|
141
|
+
"agent_platforms" => ['el_6_x86_64'],
|
142
|
+
"meep_schema_version" => "2.0",
|
143
|
+
"puppet_enterprise::database_cert_auth" => true,
|
144
|
+
"puppet_enterprise::database_ssl" => true,
|
145
|
+
}
|
146
|
+
end
|
147
|
+
let(:gold_pe_postgres_password_configuration_hash) do
|
148
|
+
{
|
149
|
+
"node_roles" => {
|
150
|
+
"pe_role::monolithic::primary_master" => [basic_hosts[0].hostname],
|
151
|
+
},
|
152
|
+
"puppet_enterprise::profile::database" => basic_hosts[1].hostname,
|
153
|
+
"agent_platforms" => ['el_6_x86_64'],
|
154
|
+
"meep_schema_version" => "2.0",
|
155
|
+
"puppet_enterprise::activity_database_password" => "PASSWORD",
|
156
|
+
"puppet_enterprise::classifier_database_password" => "PASSWORD",
|
157
|
+
"puppet_enterprise::orchestrator_database_password" => "PASSWORD",
|
158
|
+
"puppet_enterprise::puppetdb_database_password" => "PASSWORD",
|
159
|
+
"puppet_enterprise::rbac_database_password" => "PASSWORD",
|
160
|
+
}
|
161
|
+
end
|
81
162
|
let(:gold_split_configuration_hash) do
|
82
163
|
{
|
83
164
|
"node_roles" => {
|
@@ -97,4 +178,103 @@ describe 'BeakerAnswers::PeConf' do
|
|
97
178
|
|
98
179
|
include_examples 'pe.conf configuration'
|
99
180
|
end
|
181
|
+
|
182
|
+
describe 'the_host_with_role' do
|
183
|
+
let(:host_count) { 2 }
|
184
|
+
let(:mono_basic_hosts) { make_hosts( { :pe_ver => '3.0',
|
185
|
+
:platform => 'linux',
|
186
|
+
:roles => [ 'agent' ],
|
187
|
+
:type => 'pe'}, 4 ) }
|
188
|
+
let(:mono_hosts) do
|
189
|
+
mono_basic_hosts[0]['roles'] = ['master', 'dashboard', 'database', 'agent']
|
190
|
+
mono_basic_hosts[0]['platform'] = 'el-6-x86_64'
|
191
|
+
mono_basic_hosts[1]['roles'] = ['agent']
|
192
|
+
mono_basic_hosts[1]['platform'] = 'el-6-x86_64'
|
193
|
+
mono_basic_hosts
|
194
|
+
end
|
195
|
+
let(:host_count) { 4 }
|
196
|
+
let(:split_basic_hosts) { make_hosts( { :pe_ver => '3.0',
|
197
|
+
:platform => 'linux',
|
198
|
+
:roles => [ 'agent' ],
|
199
|
+
:type => 'pe'}, 4 ) }
|
200
|
+
let(:split_hosts) do
|
201
|
+
split_basic_hosts[0]['roles'] = ['master','agent']
|
202
|
+
split_basic_hosts[0]['platform'] = 'el-6-x86_64'
|
203
|
+
split_basic_hosts[1]['roles'] = ['database','agent']
|
204
|
+
split_basic_hosts[1]['platform'] = 'el-6-x86_64'
|
205
|
+
split_basic_hosts[2]['roles'] = ['dashboard','agent']
|
206
|
+
split_basic_hosts[2]['platform'] = 'el-6-x86_64'
|
207
|
+
split_basic_hosts[3]['roles'] = ['agent']
|
208
|
+
split_basic_hosts[3]['platform'] = 'el-6-x86_64'
|
209
|
+
split_basic_hosts
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'returns master in monolithic' do
|
213
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
214
|
+
expect(peconf.send(:the_host_with_role, 'master')).to eq(mono_basic_hosts[0])
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'returns database in monolithic' do
|
218
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
219
|
+
expect(peconf.send(:the_host_with_role, 'database')).to eq(mono_basic_hosts[0])
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'returns dashboard in monolithic' do
|
223
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
224
|
+
expect(peconf.send(:the_host_with_role, 'dashboard')).to eq(mono_basic_hosts[0])
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'returns master in split' do
|
228
|
+
peconf = BeakerAnswers::PeConf.new(split_hosts, "1.0")
|
229
|
+
expect(peconf.send(:the_host_with_role, 'master')).to eq(split_basic_hosts[0])
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'returns database in split' do
|
233
|
+
peconf = BeakerAnswers::PeConf.new(split_hosts, "1.0")
|
234
|
+
expect(peconf.send(:the_host_with_role, 'database')).to eq(split_basic_hosts[1])
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'returns dashboard in split' do
|
238
|
+
peconf = BeakerAnswers::PeConf.new(split_hosts, "1.0")
|
239
|
+
expect(peconf.send(:the_host_with_role, 'dashboard')).to eq(split_basic_hosts[2])
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'raises an error if multiple hosts have master role' do
|
243
|
+
mono_hosts[1]['roles'] = ['master','agent']
|
244
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
245
|
+
expect{ peconf.send(:the_host_with_role, 'master') }.to raise_error(ArgumentError)
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'raises an error if multiple hosts have database role' do
|
249
|
+
mono_hosts[1]['roles'] = ['database','agent']
|
250
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
251
|
+
expect{ peconf.send(:the_host_with_role, 'database') }.to raise_error(ArgumentError)
|
252
|
+
end
|
253
|
+
|
254
|
+
it 'raises an error if multiple hosts have dashboard role' do
|
255
|
+
mono_hosts[1]['roles'] = ['dashboard','agent']
|
256
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
257
|
+
expect{ peconf.send(:the_host_with_role, 'dashboard') }.to raise_error(ArgumentError)
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'raises no error if multiple hosts have database role and flag is passed in' do
|
261
|
+
mono_hosts[1]['roles'] = ['database','agent']
|
262
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
263
|
+
expect(peconf.send(:the_host_with_role, 'database', raise_error=false)).to eq(mono_basic_hosts[0])
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'returns postgres node in monolithic if pe_postgres is set as a role' do
|
267
|
+
mono_hosts[1]['roles'] = ['pe_postgres','agent']
|
268
|
+
peconf = BeakerAnswers::PeConf.new(mono_hosts, "1.0")
|
269
|
+
expect(peconf.send(:the_host_with_role, 'pe_postgres')).to eq(mono_basic_hosts[1])
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'returns postgres node in split if pe_postgres is set as a role' do
|
273
|
+
split_hosts[3]['roles'] = ['pe_postgres','agent']
|
274
|
+
peconf = BeakerAnswers::PeConf.new(split_hosts, "1.0")
|
275
|
+
expect(peconf.send(:the_host_with_role, 'pe_postgres')).to eq(split_basic_hosts[3])
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|
279
|
+
|
100
280
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker-answers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -254,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
254
|
version: '0'
|
255
255
|
requirements: []
|
256
256
|
rubyforge_project:
|
257
|
-
rubygems_version: 2.4.
|
257
|
+
rubygems_version: 2.4.8
|
258
258
|
signing_key:
|
259
259
|
specification_version: 4
|
260
260
|
summary: Answer generation for PE Installation!
|