beaker-answers 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +65 -2
- data/lib/beaker-answers/version.rb +1 -1
- data/lib/beaker-answers/versions/version20171.rb +70 -0
- data/spec/beaker-answers/versions/version20162_spec.rb +2 -176
- data/spec/beaker-answers/versions/version20163_spec.rb +2 -0
- data/spec/beaker-answers/versions/version20171_spec.rb +51 -0
- data/spec/shared/context.rb +186 -0
- data/spec/spec_helper.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjEwZDM2NjVhN2I5NmExMTNiNDMzOTE3MDE0Nzk3ODJlMTJlNWYwYg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjVkNzMwZmVmY2ExMmZmMjEyYTFlOTUxM2VjM2M1OWJlNTRlZmIzNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDM5NDQ0NmQyMzA2ZDUxODY0NTBiZmM0N2ExNzJiNjJiOTRiYzE2NWE4NzE2
|
10
|
+
NWZlZDgzMDBiNDMxMTBkYzI1MzJmYTI4ZGUzOTY1N2I3YTllMmVhZGU5MTli
|
11
|
+
MDIyYzIwM2Y0MDVjNGUwYTI1NGM3OGMxOWRhOGEzYmQ3ZjUxOGE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODA5MGIyOWQxZGZhNDdkNWFiMTRlNWY2OTg4YTFjOTZlODgzNGZjNjM1MDIx
|
14
|
+
ODIxYzNhNThjM2VhNTA1NjM4ZDQ4NWVlNjQ2Y2E4MWE3YjkxOGY0MWQxYmMz
|
15
|
+
Mjk2NTEzZDU3NjAzZGM3OTllYjNlNjJjMjNhNmRiMDcxODFlMzk=
|
data/HISTORY.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# default - History
|
2
2
|
## Tags
|
3
|
-
* [LATEST -
|
3
|
+
* [LATEST - 9 Nov, 2016 (f415b5e1)](#LATEST)
|
4
|
+
* [0.12.0 - 28 Oct, 2016 (b18d96b7)](#0.12.0)
|
4
5
|
* [0.11.0 - 22 Aug, 2016 (39591691)](#0.11.0)
|
5
6
|
* [0.10.0 - 15 Aug, 2016 (30507062)](#0.10.0)
|
6
7
|
* [0.9.0 - 1 Aug, 2016 (551ce473)](#0.9.0)
|
@@ -23,7 +24,69 @@
|
|
23
24
|
* [0.1.0 - 26 Aug, 2015 (ef47972d)](#0.1.0)
|
24
25
|
|
25
26
|
## Details
|
26
|
-
### <a name = "LATEST">LATEST -
|
27
|
+
### <a name = "LATEST">LATEST - 9 Nov, 2016 (f415b5e1)
|
28
|
+
|
29
|
+
* (GEM) update beaker-answers version to 0.13.0 (f415b5e1)
|
30
|
+
|
31
|
+
* Merge pull request #28 from jpartlow/issue/2017.1.x/pe-17621-beaker-answers-generates-meep-node-roles (9becfcb3)
|
32
|
+
|
33
|
+
|
34
|
+
```
|
35
|
+
Merge pull request #28 from jpartlow/issue/2017.1.x/pe-17621-beaker-answers-generates-meep-node-roles
|
36
|
+
|
37
|
+
(PE-17621) Beaker answers generates meep node roles
|
38
|
+
```
|
39
|
+
* (PE-17621) Validate both old and new formats (138e7780)
|
40
|
+
|
41
|
+
|
42
|
+
```
|
43
|
+
(PE-17621) Validate both old and new formats
|
44
|
+
|
45
|
+
in the corresponding PE version tests.
|
46
|
+
```
|
47
|
+
* (PE-17621) Generate node_roles in 2017.1+ pe_conf (ea795b85)
|
48
|
+
|
49
|
+
|
50
|
+
```
|
51
|
+
(PE-17621) Generate node_roles in 2017.1+ pe_conf
|
52
|
+
|
53
|
+
MEEP 2.0 introduces a node_roles hash in pe.conf for classification.
|
54
|
+
This supercedes using the puppet_enterprise host parameters as a de
|
55
|
+
facto classification. The Version20171 class maps existing beaker role
|
56
|
+
aliases to the new role strings used for classification in pe.conf.
|
57
|
+
|
58
|
+
So, from a MEEP 1.0 version pe.conf such as:
|
59
|
+
|
60
|
+
{
|
61
|
+
"puppet_enterprise::puppet_master_host": "master.net"
|
62
|
+
"puppet_enterprise::puppetdb_host": "puppetdb.net"
|
63
|
+
"puppet_enterprise::console_host": "console.net"
|
64
|
+
}
|
65
|
+
|
66
|
+
You now have a 2.0 version that looks like:
|
67
|
+
|
68
|
+
{
|
69
|
+
"node_roles": {
|
70
|
+
"pe_role::split::primary_master": ["master.net"]
|
71
|
+
"pe_role::split::puppetdb": ["puppetdb.net"]
|
72
|
+
"pe_role::split::console": ["console.net"]
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
See the pe_manager and pe_infrastructure modules for more details.
|
77
|
+
```
|
78
|
+
* (PE-17621) Move shared examples into a separate file (30e27482)
|
79
|
+
|
80
|
+
|
81
|
+
```
|
82
|
+
(PE-17621) Move shared examples into a separate file
|
83
|
+
|
84
|
+
...included by default in spec_helper.rb. Without this, running the
|
85
|
+
version20163_spec.rb by itself fails.
|
86
|
+
```
|
87
|
+
### <a name = "0.12.0">0.12.0 - 28 Oct, 2016 (b18d96b7)
|
88
|
+
|
89
|
+
* (HISTORY) update beaker-answers history for gem release 0.12.0 (b18d96b7)
|
27
90
|
|
28
91
|
* (GEM) update beaker-answers version to 0.12.0 (4e1716ad)
|
29
92
|
|
@@ -9,5 +9,75 @@ module BeakerAnswers
|
|
9
9
|
def self.pe_version_matcher
|
10
10
|
/\A2017\.1/
|
11
11
|
end
|
12
|
+
|
13
|
+
# This lists various aliases for different PE components that might
|
14
|
+
# be installed on a host.
|
15
|
+
#
|
16
|
+
# The first entry in the list is the canonical name for the
|
17
|
+
# component from the PuppetX::Puppetlabs::Meep::Config.pe_components()
|
18
|
+
# from the pe_infrastructure module.
|
19
|
+
#
|
20
|
+
# Secondary aliases are the various working names that have been used
|
21
|
+
# with beaker in CI to establish that a host has that component
|
22
|
+
# installed on it.
|
23
|
+
COMPONENTS = [
|
24
|
+
["primary_master", "master"],
|
25
|
+
["primary_master_replica"],
|
26
|
+
# the 'database' alias will be troublesome if/when we begin
|
27
|
+
# breaking out a managed database (as opposed to external)
|
28
|
+
# in future PE layouts.
|
29
|
+
["puppetdb", "database"],
|
30
|
+
["console", "classifier", "dashboard"],
|
31
|
+
["compile_master"],
|
32
|
+
["mco_hub", "hub"],
|
33
|
+
["mco_broker", "spoke"],
|
34
|
+
]
|
35
|
+
|
36
|
+
# @param host_role_aliases [Array<String>] list of strings to search for in
|
37
|
+
# each host's role array
|
38
|
+
# @return [Array<String>] of hostnames from @hosts that include at least
|
39
|
+
# one of the passed aliases
|
40
|
+
def all_hosts_with_component(host_role_aliases)
|
41
|
+
hosts = @hosts.select do |h|
|
42
|
+
!(Array(h['roles']) & host_role_aliases).empty?
|
43
|
+
end
|
44
|
+
hosts.map { |h| h.hostname }
|
45
|
+
end
|
46
|
+
|
47
|
+
# This used to generate the profile host parameters, but now generates a MEEP
|
48
|
+
# 2.0 node_roles hash mapping roles -> node certs based on the same host and
|
49
|
+
# role information.
|
50
|
+
def hiera_host_config
|
51
|
+
pe_conf = {
|
52
|
+
"node_roles" => {}
|
53
|
+
}
|
54
|
+
hosts_by_component = {}
|
55
|
+
|
56
|
+
COMPONENTS.each do |aliases|
|
57
|
+
meep_component_name = aliases.first
|
58
|
+
hosts_by_component[meep_component_name] = all_hosts_with_component(aliases)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Reject console and puppetdb lists if they are the same as master
|
62
|
+
hosts_by_component.reject! do |component,hosts|
|
63
|
+
["puppetdb", "console"].include?(component) &&
|
64
|
+
hosts_by_component["primary_master"].sort == hosts.sort
|
65
|
+
end
|
66
|
+
|
67
|
+
# Which is also sufficient to determine our architecture at the moment
|
68
|
+
architecture = (hosts_by_component.keys & ["puppetdb", "console"]).empty? ?
|
69
|
+
"monolithic" :
|
70
|
+
"split"
|
71
|
+
|
72
|
+
hosts_by_component.reduce(pe_conf) do |conf,entry|
|
73
|
+
component, hosts = entry
|
74
|
+
if !hosts.empty?
|
75
|
+
conf["node_roles"]["pe_role::#{architecture}::#{component}"] = hosts
|
76
|
+
end
|
77
|
+
conf
|
78
|
+
end
|
79
|
+
|
80
|
+
pe_conf
|
81
|
+
end
|
12
82
|
end
|
13
83
|
end
|
@@ -1,182 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'json'
|
3
3
|
|
4
|
-
RSpec.shared_examples 'pe.conf' do
|
5
|
-
let( :options ) { { :format => 'hiera' } }
|
6
|
-
let( :answer_hiera ) { answers.answer_hiera }
|
7
|
-
let( :default_password ) { '~!@#$%^*-/ aZ' }
|
8
|
-
let( :gold_db_answers ) do
|
9
|
-
{
|
10
|
-
"puppet_enterprise::activity_database_user" => 'adsfglkj',
|
11
|
-
"puppet_enterprise::classifier_database_user" => 'DFGhjlkj',
|
12
|
-
"puppet_enterprise::orchestrator_database_user" => 'Orc3Str8R',
|
13
|
-
"puppet_enterprise::puppetdb_database_user" => 'mYpdBu3r',
|
14
|
-
"puppet_enterprise::rbac_database_user" => 'RbhNBklm',
|
15
|
-
}
|
16
|
-
end
|
17
|
-
let( :gold_db_password_answers ) do
|
18
|
-
{
|
19
|
-
"puppet_enterprise::activity_database_password" => default_password,
|
20
|
-
"puppet_enterprise::classifier_database_password" => default_password,
|
21
|
-
"puppet_enterprise::orchestrator_database_password" => default_password,
|
22
|
-
"puppet_enterprise::puppetdb_database_password" => default_password,
|
23
|
-
"puppet_enterprise::rbac_database_password" => default_password,
|
24
|
-
}
|
25
|
-
end
|
26
|
-
# This is a set of database parameters specified in host.cfg :answers
|
27
|
-
# (for an external postgres, for instance)
|
28
|
-
let( :overridden_database_parameters ) do
|
29
|
-
{
|
30
|
-
"puppet_enterprise::activity_database_name" => 'custom-activity',
|
31
|
-
"puppet_enterprise::activity_database_user" => 'custom-activity-user',
|
32
|
-
"puppet_enterprise::classifier_database_name" => 'custom-classifier',
|
33
|
-
"puppet_enterprise::classifier_database_user" => 'custom-classifier-user',
|
34
|
-
"puppet_enterprise::orchestrator_database_name" => 'custom-orchestrator',
|
35
|
-
"puppet_enterprise::orchestrator_database_user" => 'custom-orchestrator-user',
|
36
|
-
"puppet_enterprise::puppetdb_database_name" => 'custom-puppetdb',
|
37
|
-
"puppet_enterprise::puppetdb_database_user" => 'custom-puppetdb-user',
|
38
|
-
"puppet_enterprise::rbac_database_name" => 'custom-rbac',
|
39
|
-
"puppet_enterprise::rbac_database_user" => 'custom-rbac-user',
|
40
|
-
"puppet_enterprise::activity_database_password" => 'custom-activity-password',
|
41
|
-
"puppet_enterprise::classifier_database_password" => 'custom-classifier-password',
|
42
|
-
"puppet_enterprise::orchestrator_database_password" => 'custom-orchestrator-password',
|
43
|
-
"puppet_enterprise::puppetdb_database_password" => 'custom-puppetdb-password',
|
44
|
-
"puppet_enterprise::rbac_database_password" => 'custom-rbac-password',
|
45
|
-
}
|
46
|
-
end
|
47
|
-
let( :overridding_parameters ) do
|
48
|
-
{
|
49
|
-
'puppet_enterprise::certificate_authority_host' => 'enterpriseca.vm',
|
50
|
-
'puppet_enterprise::console_host' => 'enterpriseconsole.vm',
|
51
|
-
'console_admin_password' => 'testing123',
|
52
|
-
}
|
53
|
-
end
|
54
|
-
let( :gold_answers_with_overrides ) { gold_role_answers.merge(overridding_parameters) }
|
55
|
-
|
56
|
-
it 'should not have nil keys or values' do
|
57
|
-
answer_hash.each_pair { |k, v|
|
58
|
-
expect([k, v]).not_to include(nil)
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'has the just the role and values for default install' do
|
63
|
-
expect(answer_hash).to eq(
|
64
|
-
gold_role_answers
|
65
|
-
)
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'when include_legacy_database_defaults' do
|
69
|
-
context 'is false' do
|
70
|
-
let(:options) do
|
71
|
-
{
|
72
|
-
:format => 'hiera',
|
73
|
-
:include_legacy_database_defaults => false,
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'has only the role values' do
|
78
|
-
expect(answer_hash).to eq(gold_role_answers)
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'also includes any explicitly added database parameters' do
|
82
|
-
options.merge!(:answers => overridden_database_parameters)
|
83
|
-
expect(answer_hash).to eq(
|
84
|
-
gold_role_answers
|
85
|
-
.merge(overridden_database_parameters)
|
86
|
-
)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context 'is true' do
|
91
|
-
let(:options) do
|
92
|
-
{
|
93
|
-
:format => 'hiera',
|
94
|
-
:include_legacy_database_defaults => true,
|
95
|
-
}
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'has the role values and database defaults' do
|
99
|
-
expect(answer_hash).to eq(
|
100
|
-
gold_role_answers
|
101
|
-
.merge(gold_db_answers)
|
102
|
-
)
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'overrides defaults with explicitly added database parameters' do
|
106
|
-
options.merge!(:answers => overridden_database_parameters)
|
107
|
-
expect(answer_hash).to eq(
|
108
|
-
gold_role_answers
|
109
|
-
.merge(overridden_database_parameters)
|
110
|
-
)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'generates valid json if #answer_hiera is called' do
|
116
|
-
expect(answer_hiera).not_to be_empty
|
117
|
-
expect { JSON.load(answer_hiera) }.not_to raise_error
|
118
|
-
expect(answer_hiera).to match "puppet_enterprise::puppet_master_host.*:.*#{basic_hosts[0].hostname}"
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'with legacy answers present' do
|
122
|
-
let(:string_answer) { { 'q_puppet_enterpriseconsole_auth_password' => 'password' } }
|
123
|
-
let(:symbol_answer) { { :q_puppet_enterpriseconsole_auth_password => 'password' } }
|
124
|
-
let(:answers) { BeakerAnswers::Answers.create(ver, hosts, options) }
|
125
|
-
|
126
|
-
context 'when key is a string' do
|
127
|
-
let(:options) { { :format => 'hiera' }.merge(:answers => string_answer) }
|
128
|
-
|
129
|
-
it 'raises a TypeError' do
|
130
|
-
expect { answers.answers }.to raise_error(TypeError, /q_ answers are not supported/)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'when key is a symbol' do
|
135
|
-
let(:options) { { :format => 'hiera' }.merge(:answers => symbol_answer) }
|
136
|
-
|
137
|
-
it 'raises a TypeError' do
|
138
|
-
expect { answers.answers }.to raise_error(TypeError, /q_ answers are not supported/)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
context 'when overriding answers' do
|
144
|
-
let( :options ) do
|
145
|
-
{
|
146
|
-
:format => 'hiera',
|
147
|
-
:answers => {
|
148
|
-
'puppet_enterprise' => { 'certificate_authority_host' => 'enterpriseca.vm' },
|
149
|
-
'puppet_enterprise::console_host' => 'enterpriseconsole.vm',
|
150
|
-
'console_admin_password' => 'testing123',
|
151
|
-
}
|
152
|
-
}
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'matches expected answers' do
|
156
|
-
expect(answer_hash).to eq(gold_answers_with_overrides)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
context 'when overriding answers using symbolic keys' do
|
161
|
-
let( :options ) do
|
162
|
-
{
|
163
|
-
:format => 'hiera',
|
164
|
-
:answers => {
|
165
|
-
:puppet_enterprise => {
|
166
|
-
:certificate_authority_host => 'enterpriseca.vm',
|
167
|
-
:console_host => 'enterpriseconsole.vm',
|
168
|
-
},
|
169
|
-
:console_admin_password => 'testing123',
|
170
|
-
}
|
171
|
-
}
|
172
|
-
end
|
173
|
-
|
174
|
-
it 'matches expected answers' do
|
175
|
-
expect(answer_hash).to eq(gold_answers_with_overrides)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
4
|
describe BeakerAnswers::Version20162 do
|
181
5
|
let( :ver ) { '2016.2.0' }
|
182
6
|
let( :options ) { StringifyHash.new }
|
@@ -202,6 +26,7 @@ describe BeakerAnswers::Version20162 do
|
|
202
26
|
end
|
203
27
|
|
204
28
|
include_examples 'pe.conf'
|
29
|
+
include_examples 'valid MEEP 1.0 pe.conf'
|
205
30
|
end
|
206
31
|
|
207
32
|
context 'for a split install' do
|
@@ -216,6 +41,7 @@ describe BeakerAnswers::Version20162 do
|
|
216
41
|
end
|
217
42
|
|
218
43
|
include_examples 'pe.conf'
|
44
|
+
include_examples 'valid MEEP 1.0 pe.conf'
|
219
45
|
end
|
220
46
|
end
|
221
47
|
end
|
@@ -25,6 +25,7 @@ describe BeakerAnswers::Version20163 do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
include_examples 'pe.conf'
|
28
|
+
include_examples 'valid MEEP 1.0 pe.conf'
|
28
29
|
end
|
29
30
|
|
30
31
|
context 'for a split install' do
|
@@ -38,6 +39,7 @@ describe BeakerAnswers::Version20163 do
|
|
38
39
|
end
|
39
40
|
|
40
41
|
include_examples 'pe.conf'
|
42
|
+
include_examples 'valid MEEP 1.0 pe.conf'
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe BeakerAnswers::Version20171 do
|
5
|
+
let( :ver ) { '2017.1.0' }
|
6
|
+
let( :options ) { StringifyHash.new }
|
7
|
+
let( :basic_hosts ) { make_hosts( {'pe_ver' => ver } ) }
|
8
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent']
|
9
|
+
basic_hosts[1]['roles'] = ['dashboard', 'agent']
|
10
|
+
basic_hosts[2]['roles'] = ['database', 'agent']
|
11
|
+
basic_hosts }
|
12
|
+
let( :answers ) { BeakerAnswers::Answers.create(ver, hosts, options) }
|
13
|
+
let( :answer_hash ) { answers.answers }
|
14
|
+
|
15
|
+
context 'when generating a hiera config' do
|
16
|
+
context 'for a monolithic install' do
|
17
|
+
let( :basic_hosts ) { make_hosts( {'pe_ver' => ver }, 1 ) }
|
18
|
+
let( :hosts ) { basic_hosts[0]['roles'] = ['master', 'agent', 'dashboard', 'database']
|
19
|
+
basic_hosts }
|
20
|
+
let( :gold_role_answers ) do
|
21
|
+
{
|
22
|
+
"console_admin_password" => default_password,
|
23
|
+
"node_roles" => {
|
24
|
+
"pe_role::monolithic::primary_master" => [basic_hosts[0].hostname],
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
it "accepts overrides to node_roles from beaker conf answers"
|
30
|
+
|
31
|
+
include_examples 'pe.conf'
|
32
|
+
include_examples 'valid MEEP 2.0 pe.conf'
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'for a split install' do
|
36
|
+
let( :gold_role_answers ) do
|
37
|
+
{
|
38
|
+
"console_admin_password" => default_password,
|
39
|
+
"node_roles" => {
|
40
|
+
"pe_role::split::primary_master" => [basic_hosts[0].hostname],
|
41
|
+
"pe_role::split::console" => [basic_hosts[1].hostname],
|
42
|
+
"pe_role::split::puppetdb" => [basic_hosts[2].hostname],
|
43
|
+
}
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
include_examples 'pe.conf'
|
48
|
+
include_examples 'valid MEEP 2.0 pe.conf'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
RSpec.shared_examples 'pe.conf' do
|
2
|
+
let( :options ) { { :format => 'hiera' } }
|
3
|
+
let( :answer_hiera ) { answers.answer_hiera }
|
4
|
+
let( :default_password ) { '~!@#$%^*-/ aZ' }
|
5
|
+
let( :gold_db_answers ) do
|
6
|
+
{
|
7
|
+
"puppet_enterprise::activity_database_user" => 'adsfglkj',
|
8
|
+
"puppet_enterprise::classifier_database_user" => 'DFGhjlkj',
|
9
|
+
"puppet_enterprise::orchestrator_database_user" => 'Orc3Str8R',
|
10
|
+
"puppet_enterprise::puppetdb_database_user" => 'mYpdBu3r',
|
11
|
+
"puppet_enterprise::rbac_database_user" => 'RbhNBklm',
|
12
|
+
}
|
13
|
+
end
|
14
|
+
let( :gold_db_password_answers ) do
|
15
|
+
{
|
16
|
+
"puppet_enterprise::activity_database_password" => default_password,
|
17
|
+
"puppet_enterprise::classifier_database_password" => default_password,
|
18
|
+
"puppet_enterprise::orchestrator_database_password" => default_password,
|
19
|
+
"puppet_enterprise::puppetdb_database_password" => default_password,
|
20
|
+
"puppet_enterprise::rbac_database_password" => default_password,
|
21
|
+
}
|
22
|
+
end
|
23
|
+
# This is a set of database parameters specified in host.cfg :answers
|
24
|
+
# (for an external postgres, for instance)
|
25
|
+
let( :overridden_database_parameters ) do
|
26
|
+
{
|
27
|
+
"puppet_enterprise::activity_database_name" => 'custom-activity',
|
28
|
+
"puppet_enterprise::activity_database_user" => 'custom-activity-user',
|
29
|
+
"puppet_enterprise::classifier_database_name" => 'custom-classifier',
|
30
|
+
"puppet_enterprise::classifier_database_user" => 'custom-classifier-user',
|
31
|
+
"puppet_enterprise::orchestrator_database_name" => 'custom-orchestrator',
|
32
|
+
"puppet_enterprise::orchestrator_database_user" => 'custom-orchestrator-user',
|
33
|
+
"puppet_enterprise::puppetdb_database_name" => 'custom-puppetdb',
|
34
|
+
"puppet_enterprise::puppetdb_database_user" => 'custom-puppetdb-user',
|
35
|
+
"puppet_enterprise::rbac_database_name" => 'custom-rbac',
|
36
|
+
"puppet_enterprise::rbac_database_user" => 'custom-rbac-user',
|
37
|
+
"puppet_enterprise::activity_database_password" => 'custom-activity-password',
|
38
|
+
"puppet_enterprise::classifier_database_password" => 'custom-classifier-password',
|
39
|
+
"puppet_enterprise::orchestrator_database_password" => 'custom-orchestrator-password',
|
40
|
+
"puppet_enterprise::puppetdb_database_password" => 'custom-puppetdb-password',
|
41
|
+
"puppet_enterprise::rbac_database_password" => 'custom-rbac-password',
|
42
|
+
}
|
43
|
+
end
|
44
|
+
let( :overridding_parameters ) do
|
45
|
+
{
|
46
|
+
'puppet_enterprise::certificate_authority_host' => 'enterpriseca.vm',
|
47
|
+
'puppet_enterprise::console_host' => 'enterpriseconsole.vm',
|
48
|
+
'console_admin_password' => 'testing123',
|
49
|
+
}
|
50
|
+
end
|
51
|
+
let( :gold_answers_with_overrides ) { gold_role_answers.merge(overridding_parameters) }
|
52
|
+
|
53
|
+
it 'should not have nil keys or values' do
|
54
|
+
answer_hash.each_pair { |k, v|
|
55
|
+
expect([k, v]).not_to include(nil)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'has just the role and values for default install' do
|
60
|
+
expect(answer_hash).to eq(
|
61
|
+
gold_role_answers
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when include_legacy_database_defaults' do
|
66
|
+
context 'is false' do
|
67
|
+
let(:options) do
|
68
|
+
{
|
69
|
+
:format => 'hiera',
|
70
|
+
:include_legacy_database_defaults => false,
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'has only the role values' do
|
75
|
+
expect(answer_hash).to eq(gold_role_answers)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'also includes any explicitly added database parameters' do
|
79
|
+
options.merge!(:answers => overridden_database_parameters)
|
80
|
+
expect(answer_hash).to eq(
|
81
|
+
gold_role_answers
|
82
|
+
.merge(overridden_database_parameters)
|
83
|
+
)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'is true' do
|
88
|
+
let(:options) do
|
89
|
+
{
|
90
|
+
:format => 'hiera',
|
91
|
+
:include_legacy_database_defaults => true,
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'has the role values and database defaults' do
|
96
|
+
expect(answer_hash).to eq(
|
97
|
+
gold_role_answers
|
98
|
+
.merge(gold_db_answers)
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'overrides defaults with explicitly added database parameters' do
|
103
|
+
options.merge!(:answers => overridden_database_parameters)
|
104
|
+
expect(answer_hash).to eq(
|
105
|
+
gold_role_answers
|
106
|
+
.merge(overridden_database_parameters)
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'with legacy answers present' do
|
113
|
+
let(:string_answer) { { 'q_puppet_enterpriseconsole_auth_password' => 'password' } }
|
114
|
+
let(:symbol_answer) { { :q_puppet_enterpriseconsole_auth_password => 'password' } }
|
115
|
+
let(:answers) { BeakerAnswers::Answers.create(ver, hosts, options) }
|
116
|
+
|
117
|
+
context 'when key is a string' do
|
118
|
+
let(:options) { { :format => 'hiera' }.merge(:answers => string_answer) }
|
119
|
+
|
120
|
+
it 'raises a TypeError' do
|
121
|
+
expect { answers.answers }.to raise_error(TypeError, /q_ answers are not supported/)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'when key is a symbol' do
|
126
|
+
let(:options) { { :format => 'hiera' }.merge(:answers => symbol_answer) }
|
127
|
+
|
128
|
+
it 'raises a TypeError' do
|
129
|
+
expect { answers.answers }.to raise_error(TypeError, /q_ answers are not supported/)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'when overriding answers' do
|
135
|
+
let( :options ) do
|
136
|
+
{
|
137
|
+
:format => 'hiera',
|
138
|
+
:answers => {
|
139
|
+
'puppet_enterprise' => { 'certificate_authority_host' => 'enterpriseca.vm' },
|
140
|
+
'puppet_enterprise::console_host' => 'enterpriseconsole.vm',
|
141
|
+
'console_admin_password' => 'testing123',
|
142
|
+
}
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'matches expected answers' do
|
147
|
+
expect(answer_hash).to eq(gold_answers_with_overrides)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context 'when overriding answers using symbolic keys' do
|
152
|
+
let( :options ) do
|
153
|
+
{
|
154
|
+
:format => 'hiera',
|
155
|
+
:answers => {
|
156
|
+
:puppet_enterprise => {
|
157
|
+
:certificate_authority_host => 'enterpriseca.vm',
|
158
|
+
:console_host => 'enterpriseconsole.vm',
|
159
|
+
},
|
160
|
+
:console_admin_password => 'testing123',
|
161
|
+
}
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'matches expected answers' do
|
166
|
+
expect(answer_hash).to eq(gold_answers_with_overrides)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
RSpec.shared_examples "valid MEEP 2.0 pe.conf" do
|
172
|
+
it 'generates valid MEEP 2.0 json if #answer_hiera is called' do
|
173
|
+
expect(answer_hiera).not_to be_empty
|
174
|
+
expect { JSON.load(answer_hiera) }.not_to raise_error
|
175
|
+
expect(answer_hiera).to match(%r{"node_roles"\s*:\s*\{})
|
176
|
+
expect(answer_hiera).to match(%r{"pe_role::\w+::primary_master"\s*:\s*\[\s*"#{basic_hosts[0].hostname}"\s*\]}m)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
RSpec.shared_examples "valid MEEP 1.0 pe.conf" do
|
181
|
+
it 'generates valid MEEP 1.0 json if #answer_hiera is called' do
|
182
|
+
expect(answer_hiera).not_to be_empty
|
183
|
+
expect { JSON.load(answer_hiera) }.not_to raise_error
|
184
|
+
expect(answer_hiera).to match(%r{"puppet_enterprise::puppet_master_host"\s*:\s*"#{basic_hosts[0].hostname}"}m)
|
185
|
+
end
|
186
|
+
end
|
data/spec/spec_helper.rb
CHANGED
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.13.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: 2016-
|
12
|
+
date: 2016-11-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -222,7 +222,9 @@ files:
|
|
222
222
|
- spec/beaker-answers/upgrade_spec.rb
|
223
223
|
- spec/beaker-answers/versions/version20162_spec.rb
|
224
224
|
- spec/beaker-answers/versions/version20163_spec.rb
|
225
|
+
- spec/beaker-answers/versions/version20171_spec.rb
|
225
226
|
- spec/helpers.rb
|
227
|
+
- spec/shared/context.rb
|
226
228
|
- spec/spec_helper.rb
|
227
229
|
homepage: https://github.com/puppetlabs/beaker-answers
|
228
230
|
licenses:
|