puppet_litmus 0.27.0 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,96 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'spec_helper'
4
+ require 'support/inventory'
4
5
 
5
6
  RSpec.describe PuppetLitmus::InventoryManipulation do
6
- context 'with config_from_node' do
7
- let(:no_config_hash) do
8
- { 'groups' =>
9
- [{ 'name' => 'ssh_nodes',
10
- 'targets' =>
11
- [{ 'uri' => 'test.delivery.puppetlabs.net',
12
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
13
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
14
- end
15
-
16
- let(:no_docker_hash) do
17
- { 'groups' =>
18
- [{ 'name' => 'ssh_nodes', 'targets' => [] },
19
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
20
- end
21
-
22
- let(:config_hash) do
23
- { 'groups' =>
24
- [{ 'name' => 'ssh_nodes',
25
- 'targets' =>
26
- [{ 'uri' => 'test.delivery.puppetlabs.net',
27
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
28
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
29
- 'vars' => { 'role' => 'agent' } }] },
30
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
31
- end
32
-
33
- let(:inventory_full_path) { 'spec/data/inventory.yaml' }
34
-
35
- let(:no_feature_hash) do
36
- { 'groups' =>
37
- [{ 'name' => 'ssh_nodes',
38
- 'targets' =>
39
- [{ 'uri' => 'test.delivery.puppetlabs.net',
40
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
41
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
42
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
43
- end
44
-
45
- let(:feature_hash_group) do
46
- { 'groups' =>
47
- [{ 'name' => 'ssh_nodes',
48
- 'targets' =>
49
- [{ 'uri' => 'test.delivery.puppetlabs.net',
50
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
51
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
52
- 'features' => ['puppet-agent'] },
53
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
54
- end
55
-
56
- let(:empty_feature_hash_group) do
57
- { 'groups' =>
58
- [{ 'name' => 'ssh_nodes',
59
- 'targets' =>
60
- [{ 'uri' => 'test.delivery.puppetlabs.net',
61
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
62
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
63
- 'features' => [] },
64
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
65
- end
66
-
67
- let(:feature_hash_node) do
68
- { 'groups' =>
69
- [{ 'name' => 'ssh_nodes',
70
- 'targets' =>
71
- [{ 'uri' => 'test.delivery.puppetlabs.net',
72
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
73
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
74
- 'features' => ['puppet-agent'] }] },
75
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
76
- end
77
-
78
- let(:empty_feature_hash_node) do
79
- { 'groups' =>
80
- [{ 'name' => 'ssh_nodes',
81
- 'targets' =>
82
- [{ 'uri' => 'test.delivery.puppetlabs.net',
83
- 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
84
- 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
85
- 'features' => [] }] },
86
- { 'name' => 'winrm_nodes', 'targets' => [] }] }
87
- end
88
-
89
- let(:foo_node) do
90
- { 'uri' => 'foo',
91
- 'facts' => { 'provisioner' => 'bar', 'platform' => 'ubuntu' } }
92
- end
7
+ let(:inventory_full_path) { 'spec/data/inventory.yaml' }
93
8
 
9
+ context 'with config_from_node' do
94
10
  it 'no matching node, raises' do
95
11
  expect { config_from_node(config_hash, 'not.here') }.to raise_error('No config was found for not.here')
96
12
  end
@@ -159,4 +75,70 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
159
75
  [{ 'name' => 'ssh_nodes', 'targets' => [foo_node] }, { 'name' => 'winrm_nodes', 'targets' => [] }])
160
76
  end
161
77
  end
78
+
79
+ context 'with target searching' do
80
+ it 'gets correct groups names from an inventory' do
81
+ expect(groups_in_inventory(complex_inventory)).to eql(%w[ssh_nodes frontend winrm_nodes])
82
+ end
83
+
84
+ it 'applies a code block to groups' do
85
+ counts = groups_in_inventory(complex_inventory) do |group|
86
+ if group.key? 'targets'
87
+ group['targets'].count
88
+ end
89
+ end
90
+ expect(counts.sum).to be 4
91
+ end
92
+
93
+ it 'gets names of targets' do
94
+ target_list = ['test.delivery.puppetlabs.net', 'test2.delivery.puppetlabs.net', 'test3.delivery.puppetlabs.net', 'test4.delivery.puppetlabs.net']
95
+ expect(targets_in_inventory(complex_inventory)).to eql target_list
96
+ end
97
+
98
+ it 'applies a code block to targets' do
99
+ target_list = targets_in_inventory(complex_inventory) do |target|
100
+ next unless target['config']['transport'] == 'winrm'
101
+
102
+ target['uri']
103
+ end
104
+
105
+ expect(target_list).to eql ['test4.delivery.puppetlabs.net']
106
+ end
107
+
108
+ it 'returns agent nodes' do
109
+ node_list = nodes_with_role('agent', complex_inventory)
110
+ expected_node_list = ['test.delivery.puppetlabs.net', 'test3.delivery.puppetlabs.net', 'test4.delivery.puppetlabs.net']
111
+ expect(node_list).to eql expected_node_list
112
+ end
113
+
114
+ it 'returns agent nodes with different capitolization' do
115
+ node_list = nodes_with_role('Agent', complex_inventory)
116
+ expected_node_list = ['test.delivery.puppetlabs.net', 'test3.delivery.puppetlabs.net', 'test4.delivery.puppetlabs.net']
117
+ expect(node_list).to eql expected_node_list
118
+ end
119
+
120
+ it 'searches for a group' do
121
+ expect(search_for_target('winrm_nodes', complex_inventory)).to eql ['winrm_nodes']
122
+ end
123
+
124
+ it 'seaches for an array of groups' do
125
+ expect(search_for_target(%w[winrm_nodes ssh_nodes], complex_inventory)).to eql %w[winrm_nodes ssh_nodes]
126
+ end
127
+
128
+ it 'searches for a specific target' do
129
+ expect(search_for_target('test.delivery.puppetlabs.net', complex_inventory)).to eql ['test.delivery.puppetlabs.net']
130
+ end
131
+
132
+ it 'searches for an array of roles' do
133
+ expect(search_for_target(%w[iis nginx], complex_inventory)).to eql ['test4.delivery.puppetlabs.net', 'test3.delivery.puppetlabs.net']
134
+ end
135
+
136
+ it 'searches for roles as symbols' do
137
+ expect(search_for_target([:iis, :nginx], complex_inventory)).to eql ['test4.delivery.puppetlabs.net', 'test3.delivery.puppetlabs.net']
138
+ end
139
+
140
+ it 'raises an error if target not found' do
141
+ expect { search_for_target(:blah, complex_inventory) }.to raise_error 'targets not found in inventory'
142
+ end
143
+ end
162
144
  end
@@ -14,20 +14,32 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
14
14
 
15
15
  it 'calls all functions' do
16
16
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
17
- expect(self).to receive(:apply_manifest).with(nil, expect_failures: false, manifest_file_location: '/bla.pp')
17
+ expect(self).to receive(:apply_manifest).with(nil, catch_failures: true, manifest_file_location: '/bla.pp')
18
18
  expect(self).to receive(:apply_manifest).with(nil, catch_changes: true, manifest_file_location: '/bla.pp')
19
19
  idempotent_apply(manifest)
20
20
  end
21
+
22
+ it 'passes options to apply_manifest' do
23
+ expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
24
+ expect(self).to receive(:apply_manifest).with(nil, catch_failures: true, manifest_file_location: '/bla.pp', option: 'value')
25
+ expect(self).to receive(:apply_manifest).with(nil, catch_changes: true, manifest_file_location: '/bla.pp', option: 'value')
26
+ idempotent_apply(manifest, option: 'value')
27
+ end
21
28
  end
22
29
 
23
30
  describe '.apply_manifest' do
24
31
  context 'when specifying a hiera config' do
25
32
  let(:manifest) { "include '::doot'" }
26
33
  let(:result) { ['value' => { 'exit_code' => 0, 'stdout' => nil, 'stderr' => nil }] }
27
- let(:command) { " puppet apply /bla.pp --trace --modulepath #{Dir.pwd}/spec/fixtures/modules --hiera_config='/hiera.yaml'" }
34
+ let :os do
35
+ {
36
+ family: 'redhat',
37
+ }
38
+ end
39
+ let(:command) { "LC_ALL=en_US.UTF-8 puppet apply /bla.pp --trace --modulepath #{Dir.pwd}/spec/fixtures/modules --hiera_config='/hiera.yaml'" }
28
40
 
29
41
  it 'passes the --hiera_config flag if the :hiera_config opt is specified' do
30
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
42
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
31
43
  expect(self).to receive(:target_in_inventory?).and_return(true)
32
44
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
33
45
  expect(self).to receive(:run_command).with(command, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -38,10 +50,15 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
38
50
  context 'when using detailed-exitcodes' do
39
51
  let(:manifest) { "include '::doot'" }
40
52
  let(:result) { ['value' => { 'exit_code' => 0, 'stdout' => nil, 'stderr' => nil }] }
41
- let(:command) { " puppet apply /bla.pp --trace --modulepath #{Dir.pwd}/spec/fixtures/modules --detailed-exitcodes" }
53
+ let(:command) { "LC_ALL=en_US.UTF-8 puppet apply /bla.pp --trace --modulepath #{Dir.pwd}/spec/fixtures/modules --detailed-exitcodes" }
54
+ let :os do
55
+ {
56
+ family: 'redhat',
57
+ }
58
+ end
42
59
 
43
60
  it 'uses detailed-exitcodes with expect_failures' do
44
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
61
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
45
62
  expect(self).to receive(:target_in_inventory?).and_return(true)
46
63
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
47
64
  expect(self).to receive(:run_command).with(command, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -49,7 +66,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
49
66
  end
50
67
 
51
68
  it 'uses detailed-exitcodes with catch_failures' do
52
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
69
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
53
70
  expect(self).to receive(:target_in_inventory?).and_return(true)
54
71
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
55
72
  expect(self).to receive(:run_command).with(command, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -57,7 +74,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
57
74
  end
58
75
 
59
76
  it 'uses detailed-exitcodes with expect_changes' do
60
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
77
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
61
78
  expect(self).to receive(:target_in_inventory?).and_return(true)
62
79
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
63
80
  expect(self).to receive(:run_command).with(command, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -65,7 +82,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
65
82
  end
66
83
 
67
84
  it 'uses detailed-exitcodes with catch_changes' do
68
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
85
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
69
86
  expect(self).to receive(:target_in_inventory?).and_return(true)
70
87
  expect(self).to receive(:create_manifest_file).with(manifest).and_return('/bla.pp')
71
88
  expect(self).to receive(:run_command).with(command, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -90,7 +107,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
90
107
  context 'when running against localhost and no inventory.yaml file' do
91
108
  it 'does run_shell against localhost without error' do
92
109
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'localhost'))
93
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
110
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
94
111
  expect(self).to receive(:target_in_inventory?).and_return(true)
95
112
  expect(self).to receive(:run_command).with(command_to_run, 'litmus_localhost', config: nil, inventory: localhost_inventory_hash).and_return(result)
96
113
  expect { run_shell(command_to_run) }.not_to raise_error
@@ -100,7 +117,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
100
117
  context 'when running against remote host' do
101
118
  it 'does run_shell against remote host without error' do
102
119
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
103
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
120
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
104
121
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
105
122
  expect(self).to receive(:target_in_inventory?).and_return(true)
106
123
  expect(self).to receive(:run_command).with(command_to_run, 'some.host', config: nil, inventory: inventory_hash).and_return(result)
@@ -125,7 +142,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
125
142
  context 'when upload returns success' do
126
143
  it 'does upload_file against remote host without error' do
127
144
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
128
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
145
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
129
146
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
130
147
  expect(self).to receive(:target_in_inventory?).and_return(true)
131
148
  expect(self).to receive(:upload_file).with(local, remote, 'some.host', options: {}, config: nil, inventory: inventory_hash).and_return(result_success)
@@ -134,7 +151,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
134
151
 
135
152
  it 'does upload_file against localhost without error' do
136
153
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'localhost'))
137
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
154
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
138
155
  expect(self).not_to receive(:inventory_hash_from_inventory_file)
139
156
  expect(self).to receive(:target_in_inventory?).and_return(true)
140
157
  expect(self).to receive(:upload_file).with(local, remote, 'litmus_localhost', options: {}, config: nil, inventory: localhost_inventory_hash).and_return(result_success)
@@ -145,7 +162,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
145
162
  context 'when upload returns failure' do
146
163
  it 'does upload_file gives runtime error for failure' do
147
164
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
148
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
165
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
149
166
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
150
167
  expect(self).to receive(:target_in_inventory?).and_return(true)
151
168
  expect(self).to receive(:upload_file).with(local, remote, 'some.host', options: {}, config: nil, inventory: inventory_hash).and_return(result_failure)
@@ -154,7 +171,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
154
171
 
155
172
  it 'returns the exit code and error message when expecting failure' do
156
173
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
157
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
174
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
158
175
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
159
176
  expect(self).to receive(:target_in_inventory?).and_return(true)
160
177
  expect(self).to receive(:upload_file).with(local, remote, 'some.host', options: {}, config: nil, inventory: inventory_hash).and_return(result_failure)
@@ -176,7 +193,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
176
193
  context 'when running against localhost and no inventory.yaml file' do
177
194
  it 'does bolt_run_script against localhost without error' do
178
195
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'localhost'))
179
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
196
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
180
197
  expect(self).not_to receive(:inventory_hash_from_inventory_file)
181
198
  expect(self).to receive(:target_in_inventory?).and_return(true)
182
199
  expect(self).to receive(:run_script).with(script, 'litmus_localhost', [], options: {}, config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -187,7 +204,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
187
204
  context 'when running against remote host' do
188
205
  it 'does bolt_run_script against remote host without error' do
189
206
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
190
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
207
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
191
208
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
192
209
  expect(self).to receive(:target_in_inventory?).and_return(true)
193
210
  expect(self).to receive(:run_script).with(script, 'some.host', [], options: {}, config: nil, inventory: inventory_hash).and_return(result)
@@ -198,7 +215,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
198
215
  context 'when running with arguments' do
199
216
  it 'does bolt_run_script with arguments without error' do
200
217
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'localhost'))
201
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(false)
218
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(false)
202
219
  expect(self).not_to receive(:inventory_hash_from_inventory_file)
203
220
  expect(self).to receive(:target_in_inventory?).and_return(true)
204
221
  expect(self).to receive(:run_script).with(script, 'litmus_localhost', ['doot'], options: {}, config: nil, inventory: localhost_inventory_hash).and_return(result)
@@ -225,7 +242,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
225
242
  context 'when bolt returns success' do
226
243
  it 'does bolt_task_run gives no runtime error for success' do
227
244
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
228
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
245
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
229
246
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
230
247
  expect(self).to receive(:target_in_inventory?).and_return(true)
231
248
  expect(self).to receive(:run_task).with(task_name, 'some.host', params, config: config_data, inventory: inventory_hash).and_return(result_unstructured_task_success)
@@ -243,7 +260,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
243
260
 
244
261
  it 'returns stdout for unstructured-data tasks' do
245
262
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
246
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
263
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
247
264
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
248
265
  expect(self).to receive(:target_in_inventory?).and_return(true)
249
266
  expect(self).to receive(:run_task).with(task_name, 'some.host', params, config: config_data, inventory: inventory_hash).and_return(result_unstructured_task_success)
@@ -253,7 +270,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
253
270
 
254
271
  it 'returns structured output for structured-data tasks' do
255
272
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
256
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
273
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
257
274
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
258
275
  expect(self).to receive(:target_in_inventory?).and_return(true)
259
276
  expect(self).to receive(:run_task).with(task_name, 'some.host', params, config: config_data, inventory: inventory_hash).and_return(result_structured_task_success)
@@ -267,7 +284,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
267
284
  context 'when bolt returns failure' do
268
285
  it 'does bolt_task_run gives runtime error for failure' do
269
286
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
270
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
287
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
271
288
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
272
289
  expect(self).to receive(:target_in_inventory?).and_return(true)
273
290
  expect(self).to receive(:run_task).with(task_name, 'some.host', params, config: config_data, inventory: inventory_hash).and_return(result_failure)
@@ -276,7 +293,7 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
276
293
 
277
294
  it 'returns the exit code and error message when expecting failure' do
278
295
  stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
279
- expect(File).to receive(:exist?).with('inventory.yaml').and_return(true)
296
+ expect(File).to receive(:exist?).with('spec/fixtures/litmus_inventory.yaml').and_return(true)
280
297
  expect(self).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
281
298
  expect(self).to receive(:target_in_inventory?).and_return(true)
282
299
  expect(self).to receive(:run_task).with(task_name, 'some.host', params, config: config_data, inventory: inventory_hash).and_return(result_failure)
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rspec'
4
+ require 'open3'
5
+ require 'ostruct'
4
6
 
5
7
  if ENV['COVERAGE'] == 'yes'
6
8
  require 'simplecov'
@@ -32,6 +34,17 @@ if ENV['COVERAGE'] == 'yes'
32
34
  end
33
35
  end
34
36
 
37
+ def run_matrix_from_metadata_v2(options = {})
38
+ command = 'bundle exec ./exe/matrix_from_metadata_v2'
39
+ command += " --exclude-platforms '#{options['--exclude-platforms']}'" unless options['--exclude-platforms'].nil?
40
+ result = Open3.capture3({ 'TEST_MATRIX_FROM_METADATA' => 'spec/exe/fake_metadata.json' }, command)
41
+ OpenStruct.new(
42
+ stdout: result[0],
43
+ stderr: result[1],
44
+ status_code: result[2],
45
+ )
46
+ end
47
+
35
48
  # This is basically how `configure!` sets up RSpec in tests.
36
49
  require 'puppet_litmus'
37
50
  RSpec.configure do |config|
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ def no_config_hash
4
+ { 'groups' =>
5
+ [
6
+ { 'name' => 'ssh_nodes',
7
+ 'targets' =>
8
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
9
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
10
+ { 'name' => 'winrm_nodes', 'targets' => [] },
11
+ ] }
12
+ end
13
+
14
+ def no_docker_hash
15
+ { 'groups' =>
16
+ [{ 'name' => 'ssh_nodes', 'targets' => [] },
17
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
18
+ end
19
+
20
+ def config_hash
21
+ { 'groups' =>
22
+ [{ 'name' => 'ssh_nodes',
23
+ 'targets' =>
24
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
25
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
26
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
27
+ 'vars' => { 'role' => 'agent' } }] },
28
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
29
+ end
30
+
31
+ def no_feature_hash
32
+ { 'groups' =>
33
+ [{ 'name' => 'ssh_nodes',
34
+ 'targets' =>
35
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
36
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
37
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
38
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
39
+ end
40
+
41
+ def feature_hash_group
42
+ { 'groups' =>
43
+ [{ 'name' => 'ssh_nodes',
44
+ 'targets' =>
45
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
46
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
47
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
48
+ 'features' => ['puppet-agent'] },
49
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
50
+ end
51
+
52
+ def empty_feature_hash_group
53
+ { 'groups' =>
54
+ [{ 'name' => 'ssh_nodes',
55
+ 'targets' =>
56
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
57
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
58
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
59
+ 'features' => [] },
60
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
61
+ end
62
+
63
+ def feature_hash_node
64
+ { 'groups' =>
65
+ [{ 'name' => 'ssh_nodes',
66
+ 'targets' =>
67
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
68
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
69
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
70
+ 'features' => ['puppet-agent'] }] },
71
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
72
+ end
73
+
74
+ def empty_feature_hash_node
75
+ { 'groups' =>
76
+ [{ 'name' => 'ssh_nodes',
77
+ 'targets' =>
78
+ [{ 'uri' => 'test.delivery.puppetlabs.net',
79
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
80
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
81
+ 'features' => [] }] },
82
+ { 'name' => 'winrm_nodes', 'targets' => [] }] }
83
+ end
84
+
85
+ def foo_node
86
+ { 'uri' => 'foo',
87
+ 'facts' => { 'provisioner' => 'bar', 'platform' => 'ubuntu' } }
88
+ end
89
+
90
+ def complex_inventory
91
+ { 'groups' =>
92
+ [
93
+ {
94
+ 'name' => 'ssh_nodes',
95
+ 'groups' => [
96
+ { 'name' => 'frontend',
97
+ 'targets' => [
98
+ {
99
+ 'uri' => 'test.delivery.puppetlabs.net',
100
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
101
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
102
+ 'vars' => { 'role' => 'agent' },
103
+ },
104
+ {
105
+ 'uri' => 'test2.delivery.puppetlabs.net',
106
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
107
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
108
+ 'vars' => { 'role' => 'server' },
109
+ },
110
+ {
111
+ 'uri' => 'test3.delivery.puppetlabs.net',
112
+ 'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
113
+ 'vars' => { 'roles' => %w[agent nginx webserver] },
114
+ },
115
+ ] },
116
+ ],
117
+ },
118
+ {
119
+ 'name' => 'winrm_nodes',
120
+ 'targets' => [
121
+ {
122
+ 'uri' => 'test4.delivery.puppetlabs.net',
123
+ 'config' => { 'transport' => 'winrm', 'winrm' => { 'user' => 'admin', 'password' => 'Qu@lity!' } },
124
+ 'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
125
+ 'vars' => { 'roles' => %w[agent iis webserver] },
126
+ },
127
+ ],
128
+ },
129
+ ] }
130
+ end
@@ -0,0 +1,41 @@
1
+ groups:
2
+ - name: ssh_nodes
3
+ groups:
4
+ - name: webservers
5
+ targets:
6
+ - 192.168.100.179
7
+ - 192.168.100.180
8
+ - 192.168.100.181
9
+ - name: memcached
10
+ targets:
11
+ - 192.168.101.50
12
+ - 192.168.101.60
13
+ config:
14
+ ssh:
15
+ user: root
16
+ config:
17
+ transport: ssh
18
+ ssh:
19
+ user: centos
20
+ private-key: ~/.ssh/id_rsa
21
+ host-key-check: false
22
+ - name: win_nodes
23
+ groups:
24
+ - name: domaincontrollers
25
+ targets:
26
+ - 192.168.110.10
27
+ - 192.168.110.20
28
+ - name: testservers
29
+ targets:
30
+ - 172.16.219.20
31
+ - 172.16.219.30
32
+ config:
33
+ winrm:
34
+ realm: MYDOMAIN
35
+ ssl: false
36
+ config:
37
+ transport: winrm
38
+ winrm:
39
+ user: DOMAIN\opsaccount
40
+ password: S3cretP@ssword
41
+ ssl: true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet_litmus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.0
4
+ version: 0.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-19 00:00:00.000000000 Z
11
+ date: 2022-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bolt
@@ -185,6 +185,8 @@ files:
185
185
  - spec/data/doot.tar.gz
186
186
  - spec/data/inventory.yaml
187
187
  - spec/data/jim.yaml
188
+ - spec/exe/fake_metadata.json
189
+ - spec/exe/matrix_from_metadata_v2_spec.rb
188
190
  - spec/lib/puppet_litmus/inventory_manipulation_spec.rb
189
191
  - spec/lib/puppet_litmus/puppet_helpers_spec.rb
190
192
  - spec/lib/puppet_litmus/puppet_litmus_version_spec.rb
@@ -192,11 +194,13 @@ files:
192
194
  - spec/lib/puppet_litmus/rake_tasks_spec.rb
193
195
  - spec/lib/puppet_litmus/util_spec.rb
194
196
  - spec/spec_helper.rb
197
+ - spec/support/inventory.rb
198
+ - spec/support/inventorytesting.yaml
195
199
  homepage: https://github.com/puppetlabs/puppet_litmus
196
200
  licenses:
197
201
  - Apache-2.0
198
202
  metadata: {}
199
- post_install_message:
203
+ post_install_message:
200
204
  rdoc_options: []
201
205
  require_paths:
202
206
  - lib
@@ -211,19 +215,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
215
  - !ruby/object:Gem::Version
212
216
  version: '0'
213
217
  requirements: []
214
- rubygems_version: 3.1.4
215
- signing_key:
218
+ rubygems_version: 3.0.3
219
+ signing_key:
216
220
  specification_version: 4
217
221
  summary: Providing a simple command line tool for puppet content creators, to enable
218
222
  simple and complex test deployments.
219
223
  test_files:
220
224
  - spec/spec_helper.rb
225
+ - spec/support/inventory.rb
226
+ - spec/support/inventorytesting.yaml
221
227
  - spec/lib/puppet_litmus/rake_tasks_spec.rb
222
228
  - spec/lib/puppet_litmus/puppet_litmus_version_spec.rb
223
229
  - spec/lib/puppet_litmus/util_spec.rb
224
230
  - spec/lib/puppet_litmus/inventory_manipulation_spec.rb
225
231
  - spec/lib/puppet_litmus/rake_helper_spec.rb
226
232
  - spec/lib/puppet_litmus/puppet_helpers_spec.rb
233
+ - spec/exe/fake_metadata.json
234
+ - spec/exe/matrix_from_metadata_v2_spec.rb
227
235
  - spec/data/doot.tar.gz
228
236
  - spec/data/jim.yaml
229
237
  - spec/data/inventory.yaml