puppet_litmus 0.14.0 → 0.15.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 +4 -4
- data/lib/puppet_litmus.rb +20 -0
- data/lib/puppet_litmus/inventory_manipulation.rb +27 -26
- data/lib/puppet_litmus/puppet_helpers.rb +117 -93
- data/lib/puppet_litmus/rake_helper.rb +2 -1
- data/lib/puppet_litmus/rake_tasks.rb +28 -0
- data/lib/puppet_litmus/version.rb +1 -1
- data/spec/data/inventory.yaml +3 -3
- data/spec/data/jim.yaml +2 -2
- data/spec/lib/puppet_litmus/inventory_manipulation_spec.rb +32 -32
- data/spec/lib/puppet_litmus/rake_helper_spec.rb +12 -11
- data/spec/lib/puppet_litmus/rake_tasks_spec.rb +15 -5
- metadata +24 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5910db3eed130389c917cfb64116897400905e1d66851f57e16be04d1070b95a
|
4
|
+
data.tar.gz: 01066623755c8b944f4362c0829fd46e3aaa13866a206fe17c74a19da3ed8143
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ce37bbfc92942ee4a50c4cc0831ccd8deac29ec092001c1c82dc3b7a8c57cd1bdb745bb64e224fc0fbc220c458b990b4ea429908a6548a7d18195a63873b3d3
|
7
|
+
data.tar.gz: 49b0a06fdf5772a2ed5104108cc4163b96b6eb500f1bf70259052099ab9231ee7d6b7c56bdfdc3af2708229600eda0c9bd41fb53cf5438db8c5f17309e24728a
|
data/lib/puppet_litmus.rb
CHANGED
@@ -8,6 +8,7 @@ require 'puppet_litmus/inventory_manipulation'
|
|
8
8
|
require 'puppet_litmus/puppet_helpers'
|
9
9
|
require 'puppet_litmus/rake_helper'
|
10
10
|
require 'puppet_litmus/spec_helper_acceptance'
|
11
|
+
require 'honeycomb-beeline'
|
11
12
|
|
12
13
|
# Helper methods for testing puppet content
|
13
14
|
module PuppetLitmus
|
@@ -15,4 +16,23 @@ module PuppetLitmus
|
|
15
16
|
include PuppetLitmus::InventoryManipulation
|
16
17
|
include PuppetLitmus::PuppetHelpers
|
17
18
|
include PuppetLitmus::RakeHelper
|
19
|
+
Honeycomb.configure do |config|
|
20
|
+
end
|
21
|
+
process_span = Honeycomb.start_span(name: 'Litmus Testing')
|
22
|
+
if ENV['CI'] == 'true' && ENV['TRAVIS'] == 'true'
|
23
|
+
process_span.add_field('module_name', ENV['TRAVIS_REPO_SLUG'])
|
24
|
+
process_span.add_field('travis_build_id', ENV['TRAVIS_BUILD_ID'])
|
25
|
+
process_span.add_field('travis_build_web_url', ENV['TRAVIS_BUILD_WEB_URL'])
|
26
|
+
process_span.add_field('travis_commit_message', ENV['TRAVIS_COMMIT_MESSAGE'])
|
27
|
+
process_span.add_field('travis_pull_request_sha', ENV['TRAVIS_PULL_REQUEST_SHA'])
|
28
|
+
elsif ENV['CI'] == 'True' && ENV['APPVEYOR'] == 'True'
|
29
|
+
process_span.add_field('module_name', ENV['APPVEYOR_PROJECT_SLUG'])
|
30
|
+
process_span.add_field('appveyor_build_id', ENV['APPVEYOR_BUILD_ID'])
|
31
|
+
process_span.add_field('appveyor_url', "https://ci.appveyor.com/project/#{ENV['APPVEYOR_REPO_NAME']}/builds/#{ENV['APPVEYOR_BUILD_ID']}")
|
32
|
+
process_span.add_field('appveyor_repo_commit_message', ENV['APPVEYOR_REPO_COMMIT_MESSAGE'])
|
33
|
+
process_span.add_field('appveyor_pull_request_head_commit', ENV['APPVEYOR_PULL_REQUEST_HEAD_COMMIT'])
|
34
|
+
end
|
35
|
+
at_exit do
|
36
|
+
process_span.send
|
37
|
+
end
|
18
38
|
end
|
@@ -13,9 +13,11 @@ module PuppetLitmus::InventoryManipulation
|
|
13
13
|
else
|
14
14
|
inventory_full_path
|
15
15
|
end
|
16
|
-
raise "There is no inventory file at '#{inventory_full_path}'" unless File.exist?(inventory_full_path)
|
16
|
+
raise "There is no inventory file at '#{inventory_full_path}'." unless File.exist?(inventory_full_path)
|
17
17
|
|
18
18
|
inventory_hash = YAML.load_file(inventory_full_path)
|
19
|
+
raise "Inventory file is incompatible (version 2 and up). Try the 'bolt project migrate' command." if inventory_hash.dig('version').nil? || (inventory_hash['version'] < 2)
|
20
|
+
|
19
21
|
inventory_hash
|
20
22
|
end
|
21
23
|
|
@@ -24,12 +26,13 @@ module PuppetLitmus::InventoryManipulation
|
|
24
26
|
# @return [Hash] inventory.yaml hash containing only an entry for localhost
|
25
27
|
def localhost_inventory_hash
|
26
28
|
{
|
29
|
+
'version' => 2,
|
27
30
|
'groups' => [
|
28
31
|
{
|
29
32
|
'name' => 'local',
|
30
|
-
'
|
33
|
+
'targets' => [
|
31
34
|
{
|
32
|
-
'
|
35
|
+
'uri' => 'litmus_localhost',
|
33
36
|
'config' => { 'transport' => 'local' },
|
34
37
|
'feature' => 'puppet-agent',
|
35
38
|
},
|
@@ -45,13 +48,11 @@ module PuppetLitmus::InventoryManipulation
|
|
45
48
|
# @param targets [Array]
|
46
49
|
# @return [Array] array of targets.
|
47
50
|
def find_targets(inventory_hash, targets)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
targets = [targets]
|
54
|
-
end
|
51
|
+
targets = if targets.nil?
|
52
|
+
inventory_hash.to_s.scan(%r{uri"=>"(\S*)"}).flatten
|
53
|
+
else
|
54
|
+
[targets]
|
55
|
+
end
|
55
56
|
targets
|
56
57
|
end
|
57
58
|
|
@@ -66,8 +67,8 @@ module PuppetLitmus::InventoryManipulation
|
|
66
67
|
inventory_hash['groups'].each do |group|
|
67
68
|
next unless group['name'] == group_name
|
68
69
|
|
69
|
-
group['
|
70
|
-
exists = true if node['
|
70
|
+
group['targets'].each do |node|
|
71
|
+
exists = true if node['uri'] == node_name
|
71
72
|
end
|
72
73
|
end
|
73
74
|
exists
|
@@ -89,8 +90,8 @@ module PuppetLitmus::InventoryManipulation
|
|
89
90
|
# @return [Hash] config for node of name node_name
|
90
91
|
def config_from_node(inventory_hash, node_name)
|
91
92
|
inventory_hash['groups'].each do |group|
|
92
|
-
group['
|
93
|
-
if node['
|
93
|
+
group['targets'].each do |node|
|
94
|
+
if node['uri'] == node_name
|
94
95
|
return node['config']
|
95
96
|
end
|
96
97
|
end
|
@@ -105,8 +106,8 @@ module PuppetLitmus::InventoryManipulation
|
|
105
106
|
# @return [Hash] facts for node of name node_name
|
106
107
|
def facts_from_node(inventory_hash, node_name)
|
107
108
|
inventory_hash['groups'].each do |group|
|
108
|
-
group['
|
109
|
-
if node['
|
109
|
+
group['targets'].each do |node|
|
110
|
+
if node['uri'] == node_name
|
110
111
|
return node['facts']
|
111
112
|
end
|
112
113
|
end
|
@@ -121,8 +122,8 @@ module PuppetLitmus::InventoryManipulation
|
|
121
122
|
# @return [Hash] vars for node of name node_name
|
122
123
|
def vars_from_node(inventory_hash, node_name)
|
123
124
|
inventory_hash['groups'].each do |group|
|
124
|
-
group['
|
125
|
-
if node['
|
125
|
+
group['targets'].each do |node|
|
126
|
+
if node['uri'] == node_name
|
126
127
|
return node['vars']
|
127
128
|
end
|
128
129
|
end
|
@@ -141,12 +142,12 @@ module PuppetLitmus::InventoryManipulation
|
|
141
142
|
if inventory_hash['groups'].any? { |g| g['name'] == group_name }
|
142
143
|
inventory_hash['groups'].each do |group|
|
143
144
|
if group['name'] == group_name
|
144
|
-
group['
|
145
|
+
group['targets'].push node
|
145
146
|
end
|
146
147
|
end
|
147
148
|
else
|
148
149
|
# add new group
|
149
|
-
group = { 'name' => group_name, '
|
150
|
+
group = { 'name' => group_name, 'targets' => [node] }
|
150
151
|
inventory_hash['groups'].push group
|
151
152
|
end
|
152
153
|
inventory_hash
|
@@ -159,7 +160,7 @@ module PuppetLitmus::InventoryManipulation
|
|
159
160
|
# @return [Hash] inventory_hash with node of node_name removed.
|
160
161
|
def remove_node(inventory_hash, node_name)
|
161
162
|
inventory_hash['groups'].each do |group|
|
162
|
-
group['
|
163
|
+
group['targets'].delete_if { |i| i['uri'] == node_name }
|
163
164
|
end
|
164
165
|
inventory_hash
|
165
166
|
end
|
@@ -213,13 +214,13 @@ module PuppetLitmus::InventoryManipulation
|
|
213
214
|
group_index = 0
|
214
215
|
inventory_hash['groups'].each do |group|
|
215
216
|
node_index = 0
|
216
|
-
group['
|
217
|
-
if node['
|
217
|
+
group['targets'].each do |node|
|
218
|
+
if node['uri'] == node_name
|
218
219
|
if node['features'].nil? == true
|
219
220
|
node = node.merge('features' => [])
|
220
221
|
end
|
221
222
|
node['features'].push feature_name unless node['features'].include?(feature_name)
|
222
|
-
inventory_hash['groups'][group_index]['
|
223
|
+
inventory_hash['groups'][group_index]['targets'][node_index] = node
|
223
224
|
end
|
224
225
|
node_index += 1
|
225
226
|
end
|
@@ -237,8 +238,8 @@ module PuppetLitmus::InventoryManipulation
|
|
237
238
|
# @return [Hash] inventory_hash with feature added to node if node_name exists in inventory hash.
|
238
239
|
def remove_feature_from_node(inventory_hash, feature_name, node_name)
|
239
240
|
inventory_hash['groups'].each do |group|
|
240
|
-
group['
|
241
|
-
if node['
|
241
|
+
group['targets'].each do |node|
|
242
|
+
if node['uri'] == node_name && node['features'].nil? != true
|
242
243
|
node['features'].delete(feature_name)
|
243
244
|
end
|
244
245
|
end
|
@@ -122,19 +122,25 @@ module PuppetLitmus::PuppetHelpers
|
|
122
122
|
# @yieldreturn [Block] this method will yield to a block of code passed by the caller; this can be used for additional validation, etc.
|
123
123
|
# @return [Object] A result object from the command.
|
124
124
|
def run_shell(command_to_run, opts = {})
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
125
|
+
Honeycomb.start_span(name: 'litmus_runshell') do |span|
|
126
|
+
target_node_name = targeting_localhost? ? 'litmus_localhost' : ENV['TARGET_HOST']
|
127
|
+
inventory_hash = File.exist?('inventory.yaml') ? inventory_hash_from_inventory_file : localhost_inventory_hash
|
128
|
+
raise "Target '#{target_node_name}' not found in inventory.yaml" unless target_in_inventory?(inventory_hash, target_node_name)
|
129
|
+
|
130
|
+
result = run_command(command_to_run, target_node_name, config: nil, inventory: inventory_hash)
|
131
|
+
if result.first['result']['exit_code'] != 0 && opts[:expect_failures] != true
|
132
|
+
span.add_field('litmus_runshellfailure', result)
|
133
|
+
raise "shell failed\n`#{command_to_run}`\n======\n#{result}"
|
134
|
+
end
|
135
|
+
|
136
|
+
result = OpenStruct.new(exit_code: result.first['result']['exit_code'],
|
137
|
+
exit_status: result.first['result']['exit_code'],
|
138
|
+
stdout: result.first['result']['stdout'],
|
139
|
+
stderr: result.first['result']['stderr'])
|
140
|
+
yield result if block_given?
|
141
|
+
span.add_field('litmus_runshellsuccess', result)
|
142
|
+
result
|
143
|
+
end
|
138
144
|
end
|
139
145
|
|
140
146
|
# Copies file to the target, using its respective transport
|
@@ -145,31 +151,37 @@ module PuppetLitmus::PuppetHelpers
|
|
145
151
|
# @yieldreturn [Block] this method will yield to a block of code passed by the caller; this can be used for additional validation, etc.
|
146
152
|
# @return [Object] A result object from the command.
|
147
153
|
def bolt_upload_file(source, destination, opts = {}, options = {})
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
154
|
+
Honeycomb.start_span(name: 'litmus_uploadfile') do |span|
|
155
|
+
target_node_name = targeting_localhost? ? 'litmus_localhost' : ENV['TARGET_HOST']
|
156
|
+
inventory_hash = File.exist?('inventory.yaml') ? inventory_hash_from_inventory_file : localhost_inventory_hash
|
157
|
+
raise "Target '#{target_node_name}' not found in inventory.yaml" unless target_in_inventory?(inventory_hash, target_node_name)
|
158
|
+
|
159
|
+
result = upload_file(source, destination, target_node_name, options: options, config: nil, inventory: inventory_hash)
|
160
|
+
|
161
|
+
result_obj = {
|
162
|
+
exit_code: 0,
|
163
|
+
stdout: result.first['result']['_output'],
|
164
|
+
stderr: nil,
|
165
|
+
result: result.first['result'],
|
166
|
+
}
|
167
|
+
|
168
|
+
if result.first['status'] != 'success'
|
169
|
+
if opts[:expect_failures] != true
|
170
|
+
span.add_field('litmus_uploadfilefailure', result)
|
171
|
+
raise "upload file failed\n======\n#{result}"
|
172
|
+
end
|
173
|
+
|
174
|
+
result_obj[:exit_code] = 255
|
175
|
+
result_obj[:stderr] = result.first['result']['_error']['msg']
|
176
|
+
end
|
177
|
+
|
178
|
+
result = OpenStruct.new(exit_code: result_obj[:exit_code],
|
179
|
+
stdout: result_obj[:stdout],
|
180
|
+
stderr: result_obj[:stderr])
|
181
|
+
yield result if block_given?
|
182
|
+
span.add_field('litmus_uploadfilesucess', result)
|
183
|
+
result
|
166
184
|
end
|
167
|
-
|
168
|
-
result = OpenStruct.new(exit_code: result_obj[:exit_code],
|
169
|
-
stdout: result_obj[:stdout],
|
170
|
-
stderr: result_obj[:stderr])
|
171
|
-
yield result if block_given?
|
172
|
-
result
|
173
185
|
end
|
174
186
|
|
175
187
|
# rubocop:disable Layout/TrailingWhitespace
|
@@ -184,50 +196,56 @@ module PuppetLitmus::PuppetHelpers
|
|
184
196
|
# @return [Object] A result object from the task.The values available are stdout, stderr and result.
|
185
197
|
# rubocop:enable Layout/TrailingWhitespace
|
186
198
|
def run_bolt_task(task_name, params = {}, opts = {})
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
199
|
+
Honeycomb.start_span(name: 'litmus_runtask') do |span|
|
200
|
+
config_data = { 'modulepath' => File.join(Dir.pwd, 'spec', 'fixtures', 'modules') }
|
201
|
+
target_node_name = targeting_localhost? ? 'litmus_localhost' : ENV['TARGET_HOST']
|
202
|
+
inventory_hash = if !opts[:inventory_file].nil? && File.exist?(opts[:inventory_file])
|
203
|
+
inventory_hash_from_inventory_file(opts[:inventory_file])
|
204
|
+
elsif File.exist?('inventory.yaml')
|
205
|
+
inventory_hash_from_inventory_file('inventory.yaml')
|
206
|
+
else
|
207
|
+
localhost_inventory_hash
|
208
|
+
end
|
209
|
+
raise "Target '#{target_node_name}' not found in inventory.yaml" unless target_in_inventory?(inventory_hash, target_node_name)
|
210
|
+
|
211
|
+
result = run_task(task_name, target_node_name, params, config: config_data, inventory: inventory_hash)
|
212
|
+
result_obj = {
|
213
|
+
exit_code: 0,
|
214
|
+
stdout: nil,
|
215
|
+
stderr: nil,
|
216
|
+
result: result.first['result'],
|
217
|
+
}
|
218
|
+
|
219
|
+
if result.first['status'] == 'success'
|
220
|
+
# stdout returns unstructured data if structured data is not available
|
221
|
+
result_obj[:stdout] = if result.first['result']['_output'].nil?
|
222
|
+
result.first['result'].to_s
|
223
|
+
else
|
224
|
+
result.first['result']['_output']
|
225
|
+
end
|
226
|
+
|
227
|
+
else
|
228
|
+
if opts[:expect_failures] != true
|
229
|
+
span.add_field('litmus_runtaskfailure', result)
|
230
|
+
raise "task failed\n`#{task_name}`\n======\n#{result}"
|
231
|
+
end
|
232
|
+
|
233
|
+
result_obj[:exit_code] = if result.first['result']['_error']['details'].nil?
|
234
|
+
255
|
235
|
+
else
|
236
|
+
result.first['result']['_error']['details'].fetch('exitcode', 255)
|
237
|
+
end
|
238
|
+
result_obj[:stderr] = result.first['result']['_error']['msg']
|
239
|
+
end
|
240
|
+
|
241
|
+
result = OpenStruct.new(exit_code: result_obj[:exit_code],
|
242
|
+
stdout: result_obj[:stdout],
|
243
|
+
stderr: result_obj[:stderr],
|
244
|
+
result: result_obj[:result])
|
245
|
+
yield result if block_given?
|
246
|
+
span.add_field('litmus_runtasksuccess', result)
|
247
|
+
result
|
223
248
|
end
|
224
|
-
|
225
|
-
result = OpenStruct.new(exit_code: result_obj[:exit_code],
|
226
|
-
stdout: result_obj[:stdout],
|
227
|
-
stderr: result_obj[:stderr],
|
228
|
-
result: result_obj[:result])
|
229
|
-
yield result if block_given?
|
230
|
-
result
|
231
249
|
end
|
232
250
|
|
233
251
|
# Runs a script against the target system.
|
@@ -238,19 +256,25 @@ module PuppetLitmus::PuppetHelpers
|
|
238
256
|
# @yieldreturn [Block] this method will yield to a block of code passed by the caller; this can be used for additional validation, etc.
|
239
257
|
# @return [Object] A result object from the script run.
|
240
258
|
def bolt_run_script(script, opts = {}, arguments: [])
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
259
|
+
Honeycomb.start_span(name: 'litmus_runscript') do |span|
|
260
|
+
target_node_name = targeting_localhost? ? 'litmus_localhost' : ENV['TARGET_HOST']
|
261
|
+
inventory_hash = File.exist?('inventory.yaml') ? inventory_hash_from_inventory_file : localhost_inventory_hash
|
262
|
+
raise "Target '#{target_node_name}' not found in inventory.yaml" unless target_in_inventory?(inventory_hash, target_node_name)
|
263
|
+
|
264
|
+
result = run_script(script, target_node_name, arguments, options: opts, config: nil, inventory: inventory_hash)
|
265
|
+
|
266
|
+
if result.first['result']['exit_code'] != 0 && opts[:expect_failures] != true
|
267
|
+
span.add_field('litmus_runscriptfailure', result)
|
268
|
+
raise "script run failed\n`#{script}`\n======\n#{result}"
|
269
|
+
end
|
270
|
+
|
271
|
+
result = OpenStruct.new(exit_code: result.first['result']['exit_code'],
|
272
|
+
stdout: result.first['result']['stdout'],
|
273
|
+
stderr: result.first['result']['stderr'])
|
274
|
+
yield result if block_given?
|
275
|
+
span.add_field('litmus_runscriptsuccess', result)
|
276
|
+
result
|
277
|
+
end
|
254
278
|
end
|
255
279
|
|
256
280
|
# Determines if the current execution is targeting localhost or not
|
@@ -150,7 +150,8 @@ module PuppetLitmus::RakeHelper
|
|
150
150
|
end
|
151
151
|
raise "puppet_agent was not found in #{DEFAULT_CONFIG_DATA['modulepath']}, please amend the .fixtures.yml file" unless File.directory?(File.join(DEFAULT_CONFIG_DATA['modulepath'], 'puppet_agent'))
|
152
152
|
|
153
|
-
|
153
|
+
# using boltspec, when the runner is called it changes the inventory_hash dropping the version field. The clone works around this
|
154
|
+
run_task('puppet_agent::install', targets, params, config: DEFAULT_CONFIG_DATA, inventory: inventory_hash.clone)
|
154
155
|
end
|
155
156
|
|
156
157
|
def configure_path(inventory_hash)
|
@@ -135,6 +135,33 @@ namespace :litmus do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
+
# Add a given feature to a selection of nodes
|
139
|
+
#
|
140
|
+
# @param :target_node_name [Array] nodes on which to add the feature.
|
141
|
+
# @param :added_feature [String] the feature which you wish to add.
|
142
|
+
desc 'add_feature, [:added_feature, :target_node_name]'
|
143
|
+
task :add_feature, [:added_feature, :target_node_name] do |_task, args|
|
144
|
+
inventory_hash = inventory_hash_from_inventory_file
|
145
|
+
targets = find_targets(inventory_hash, args[:target_node_name])
|
146
|
+
if targets.empty?
|
147
|
+
puts 'No targets found'
|
148
|
+
exit 0
|
149
|
+
end
|
150
|
+
if args[:added_feature].nil? || args[:added_feature] == ''
|
151
|
+
puts 'No feature given'
|
152
|
+
exit 0
|
153
|
+
end
|
154
|
+
puts 'add_feature'
|
155
|
+
|
156
|
+
targets.each do |target|
|
157
|
+
inventory_hash = add_feature_to_node(inventory_hash, args[:added_feature], target)
|
158
|
+
end
|
159
|
+
|
160
|
+
write_to_inventory_file(inventory_hash, 'inventory.yaml')
|
161
|
+
|
162
|
+
puts 'Feature added'
|
163
|
+
end
|
164
|
+
|
138
165
|
# Install the puppet modules from a source directory to nodes. It does not install dependencies.
|
139
166
|
#
|
140
167
|
# @param :source [String] source directory to look in (ignores symlinks) defaults do './spec/fixtures/modules'.
|
@@ -400,6 +427,7 @@ namespace :litmus do
|
|
400
427
|
host = 'localhost'
|
401
428
|
RSpec::Core::RakeTask.new(host.to_sym) do |t|
|
402
429
|
t.pattern = 'spec/acceptance/**{,/*/**}/*_spec.rb'
|
430
|
+
Rake::Task['spec_prep'].invoke
|
403
431
|
ENV['TARGET_HOST'] = host
|
404
432
|
end
|
405
433
|
end
|
data/spec/data/inventory.yaml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
---
|
2
2
|
groups:
|
3
3
|
- name: ssh_nodes
|
4
|
-
|
5
|
-
-
|
4
|
+
targets:
|
5
|
+
- uri: test.delivery.puppetlabs.net
|
6
6
|
config:
|
7
7
|
transport: ssh
|
8
8
|
ssh:
|
@@ -13,4 +13,4 @@ groups:
|
|
13
13
|
provisioner: vmpooler
|
14
14
|
platform: centos-5-x86_64
|
15
15
|
- name: winrm_nodes
|
16
|
-
|
16
|
+
targets: []
|
data/spec/data/jim.yaml
CHANGED
@@ -9,27 +9,27 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
9
9
|
let(:no_config_hash) do
|
10
10
|
{ 'groups' =>
|
11
11
|
[{ 'name' => 'ssh_nodes',
|
12
|
-
'
|
13
|
-
[{ '
|
12
|
+
'targets' =>
|
13
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
14
14
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
|
15
|
-
{ 'name' => 'winrm_nodes', '
|
15
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
16
16
|
end
|
17
17
|
|
18
18
|
let(:no_docker_hash) do
|
19
19
|
{ 'groups' =>
|
20
|
-
[{ 'name' => 'ssh_nodes', '
|
21
|
-
{ 'name' => 'winrm_nodes', '
|
20
|
+
[{ 'name' => 'ssh_nodes', 'targets' => [] },
|
21
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
22
22
|
end
|
23
23
|
|
24
24
|
let(:config_hash) do
|
25
25
|
{ 'groups' =>
|
26
26
|
[{ 'name' => 'ssh_nodes',
|
27
|
-
'
|
28
|
-
[{ '
|
27
|
+
'targets' =>
|
28
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
29
29
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
30
30
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
|
31
31
|
'vars' => { 'role' => 'agent' } }] },
|
32
|
-
{ 'name' => 'winrm_nodes', '
|
32
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
33
33
|
end
|
34
34
|
|
35
35
|
let(:inventory_full_path) { 'spec/data/inventory.yaml' }
|
@@ -37,59 +37,59 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
37
37
|
let(:no_feature_hash) do
|
38
38
|
{ 'groups' =>
|
39
39
|
[{ 'name' => 'ssh_nodes',
|
40
|
-
'
|
41
|
-
[{ '
|
40
|
+
'targets' =>
|
41
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
42
42
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
43
43
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }] },
|
44
|
-
{ 'name' => 'winrm_nodes', '
|
44
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
45
45
|
end
|
46
46
|
|
47
47
|
let(:feature_hash_group) do
|
48
48
|
{ 'groups' =>
|
49
49
|
[{ 'name' => 'ssh_nodes',
|
50
|
-
'
|
51
|
-
[{ '
|
50
|
+
'targets' =>
|
51
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
52
52
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
53
53
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
|
54
54
|
'features' => ['puppet-agent'] },
|
55
|
-
{ 'name' => 'winrm_nodes', '
|
55
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
56
56
|
end
|
57
57
|
|
58
58
|
let(:empty_feature_hash_group) do
|
59
59
|
{ 'groups' =>
|
60
60
|
[{ 'name' => 'ssh_nodes',
|
61
|
-
'
|
62
|
-
[{ '
|
61
|
+
'targets' =>
|
62
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
63
63
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
64
64
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' } }],
|
65
65
|
'features' => [] },
|
66
|
-
{ 'name' => 'winrm_nodes', '
|
66
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
67
67
|
end
|
68
68
|
|
69
69
|
let(:feature_hash_node) do
|
70
70
|
{ 'groups' =>
|
71
71
|
[{ 'name' => 'ssh_nodes',
|
72
|
-
'
|
73
|
-
[{ '
|
72
|
+
'targets' =>
|
73
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
74
74
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
75
75
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
|
76
76
|
'features' => ['puppet-agent'] }] },
|
77
|
-
{ 'name' => 'winrm_nodes', '
|
77
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
78
78
|
end
|
79
79
|
|
80
80
|
let(:empty_feature_hash_node) do
|
81
81
|
{ 'groups' =>
|
82
82
|
[{ 'name' => 'ssh_nodes',
|
83
|
-
'
|
84
|
-
[{ '
|
83
|
+
'targets' =>
|
84
|
+
[{ 'uri' => 'test.delivery.puppetlabs.net',
|
85
85
|
'config' => { 'transport' => 'ssh', 'ssh' => { 'user' => 'root', 'password' => 'Qu@lity!', 'host-key-check' => false } },
|
86
86
|
'facts' => { 'provisioner' => 'vmpooler', 'platform' => 'centos-5-x86_64' },
|
87
87
|
'features' => [] }] },
|
88
|
-
{ 'name' => 'winrm_nodes', '
|
88
|
+
{ 'name' => 'winrm_nodes', 'targets' => [] }] }
|
89
89
|
end
|
90
90
|
|
91
91
|
let(:foo_node) do
|
92
|
-
{ '
|
92
|
+
{ 'uri' => 'foo',
|
93
93
|
'facts' => { 'provisioner' => 'bar', 'platform' => 'ubuntu' } }
|
94
94
|
end
|
95
95
|
|
@@ -115,11 +115,11 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'no feature exists for the group, and returns hash with feature added' do
|
118
|
-
expect(described_class.add_feature_to_group(no_feature_hash, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => ['puppet-agent'], 'name' => 'ssh_nodes', '
|
118
|
+
expect(described_class.add_feature_to_group(no_feature_hash, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => ['puppet-agent'], 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net' }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
119
119
|
end
|
120
120
|
|
121
121
|
it 'feature exists for the group, and returns hash with feature removed' do
|
122
|
-
expect(described_class.remove_feature_from_group(feature_hash_group, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => [], 'name' => 'ssh_nodes', '
|
122
|
+
expect(described_class.remove_feature_from_group(feature_hash_group, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => [], 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net' }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
123
123
|
end
|
124
124
|
|
125
125
|
it 'write from inventory_hash to inventory_yaml file feature_hash_group' do
|
@@ -127,15 +127,15 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it 'empty feature exists for the group, and returns hash with feature added' do
|
130
|
-
expect(described_class.add_feature_to_group(empty_feature_hash_group, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => ['puppet-agent'], 'name' => 'ssh_nodes', '
|
130
|
+
expect(described_class.add_feature_to_group(empty_feature_hash_group, 'puppet-agent', 'ssh_nodes')).to eq('groups' => [{ 'features' => ['puppet-agent'], 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net' }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
131
131
|
end
|
132
132
|
|
133
133
|
it 'no feature exists for the node, and returns hash with feature added' do
|
134
|
-
expect(described_class.add_feature_to_node(no_feature_hash, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', '
|
134
|
+
expect(described_class.add_feature_to_node(no_feature_hash, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net', 'features' => ['puppet-agent'] }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'feature exists for the node, and returns hash with feature removed' do
|
138
|
-
expect(described_class.remove_feature_from_node(feature_hash_node, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', '
|
138
|
+
expect(described_class.remove_feature_from_node(feature_hash_node, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net', 'features' => [] }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
139
139
|
end
|
140
140
|
|
141
141
|
it 'write from inventory_hash to inventory_yaml file feature_hash_node' do
|
@@ -143,7 +143,7 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it 'empty feature exists for the node, and returns hash with feature added' do
|
146
|
-
expect(described_class.add_feature_to_node(empty_feature_hash_node, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', '
|
146
|
+
expect(described_class.add_feature_to_node(empty_feature_hash_node, 'puppet-agent', 'test.delivery.puppetlabs.net')).to eq('groups' => [{ 'name' => 'ssh_nodes', 'targets' => [{ 'config' => { 'ssh' => { 'host-key-check' => false, 'password' => 'Qu@lity!', 'user' => 'root' }, 'transport' => 'ssh' }, 'facts' => { 'platform' => 'centos-5-x86_64', 'provisioner' => 'vmpooler' }, 'uri' => 'test.delivery.puppetlabs.net', 'features' => ['puppet-agent'] }] }, { 'name' => 'winrm_nodes', 'targets' => [] }]) # rubocop:disable Metrics/LineLength: Line is too long
|
147
147
|
end
|
148
148
|
|
149
149
|
it 'write from inventory_hash to inventory_yaml file no feature_hash' do
|
@@ -153,12 +153,12 @@ RSpec.describe PuppetLitmus::InventoryManipulation do
|
|
153
153
|
|
154
154
|
it 'group does not exist in inventory, and returns hash with group added' do
|
155
155
|
expect(described_class.add_node_to_group(no_docker_hash, foo_node, 'docker_nodes')).to eq('groups' =>
|
156
|
-
[{ 'name' => 'ssh_nodes', '
|
156
|
+
[{ 'name' => 'ssh_nodes', 'targets' => [] }, { 'name' => 'winrm_nodes', 'targets' => [] }, { 'name' => 'docker_nodes', 'targets' => [foo_node] }])
|
157
157
|
end
|
158
158
|
|
159
159
|
it 'group exists in inventory, and returns hash with node added' do
|
160
160
|
expect(described_class.add_node_to_group(no_docker_hash, foo_node, 'ssh_nodes')).to eq('groups' =>
|
161
|
-
[{ 'name' => 'ssh_nodes', '
|
161
|
+
[{ 'name' => 'ssh_nodes', 'targets' => [foo_node] }, { 'name' => 'winrm_nodes', 'targets' => [] }])
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
@@ -31,8 +31,8 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
31
31
|
context 'with tear_down' do
|
32
32
|
let(:inventory_hash) do
|
33
33
|
{ 'groups' =>
|
34
|
-
[{ 'name' => 'ssh_nodes', '
|
35
|
-
[{ '
|
34
|
+
[{ 'name' => 'ssh_nodes', 'targets' =>
|
35
|
+
[{ 'uri' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
36
36
|
end
|
37
37
|
let(:targets) { ['some.host'] }
|
38
38
|
let(:params) { { 'action' => 'tear_down', 'node_name' => 'some.host', 'inventory' => Dir.pwd } }
|
@@ -47,8 +47,8 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
47
47
|
context 'with install_agent' do
|
48
48
|
let(:inventory_hash) do
|
49
49
|
{ 'groups' =>
|
50
|
-
[{ 'name' => 'ssh_nodes', '
|
51
|
-
[{ '
|
50
|
+
[{ 'name' => 'ssh_nodes', 'targets' =>
|
51
|
+
[{ 'uri' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
52
52
|
end
|
53
53
|
let(:targets) { ['some.host'] }
|
54
54
|
let(:params) { { 'collection' => 'puppet6' } }
|
@@ -62,9 +62,10 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
62
62
|
|
63
63
|
context 'with install_module' do
|
64
64
|
let(:inventory_hash) do
|
65
|
-
{ '
|
66
|
-
|
67
|
-
|
65
|
+
{ 'version' => 2,
|
66
|
+
'groups' =>
|
67
|
+
[{ 'name' => 'ssh_nodes', 'targets' =>
|
68
|
+
[{ 'uri' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
68
69
|
end
|
69
70
|
let(:module_tar) { '/tmp/foo.tar.gz' }
|
70
71
|
let(:targets) { ['some.host'] }
|
@@ -81,8 +82,8 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
81
82
|
context 'with check_connectivity' do
|
82
83
|
let(:inventory_hash) do
|
83
84
|
{ 'groups' =>
|
84
|
-
[{ 'name' => 'ssh_nodes', '
|
85
|
-
[{ '
|
85
|
+
[{ 'name' => 'ssh_nodes', 'targets' =>
|
86
|
+
[{ 'uri' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
86
87
|
end
|
87
88
|
let(:targets) { ['some.host'] }
|
88
89
|
let(:command) { 'cd .' }
|
@@ -102,8 +103,8 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
102
103
|
context 'with uninstall module' do
|
103
104
|
let(:inventory_hash) do
|
104
105
|
{ 'groups' =>
|
105
|
-
[{ 'name' => 'ssh_nodes', '
|
106
|
-
[{ '
|
106
|
+
[{ 'name' => 'ssh_nodes', 'targets' =>
|
107
|
+
[{ 'uri' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
107
108
|
end
|
108
109
|
let(:targets) { ['some.host'] }
|
109
110
|
let(:uninstall_module_command) { 'puppet module uninstall foo-bar' }
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'rake'
|
5
|
+
load File.expand_path('../../../lib/puppet_litmus/inventory_manipulation.rb', __dir__)
|
6
|
+
include PuppetLitmus::InventoryManipulation # rubocop:disable Style/MixinUsage
|
5
7
|
describe 'litmus rake tasks' do
|
6
8
|
before(:all) do # rubocop:disable RSpec/BeforeAfterAll
|
7
9
|
load File.expand_path('../../../lib/puppet_litmus/rake_tasks.rb', __dir__)
|
@@ -27,7 +29,7 @@ describe 'litmus rake tasks' do
|
|
27
29
|
end
|
28
30
|
|
29
31
|
context 'with litmus:install_modules_from_directory' do
|
30
|
-
let(:inventory_hash) { { 'groups' => [{ 'name' => 'ssh_nodes', 'nodes' => [{ '
|
32
|
+
let(:inventory_hash) { { 'groups' => [{ 'name' => 'ssh_nodes', 'nodes' => [{ 'uri' => 'some.host' }] }] } }
|
31
33
|
let(:target_folder) { File.join(Dir.pwd, 'spec/fixtures/modules') }
|
32
34
|
let(:dummy_tar) { File.new('spec/data/doot.tar.gz') }
|
33
35
|
|
@@ -47,10 +49,10 @@ describe 'litmus rake tasks' do
|
|
47
49
|
|
48
50
|
context 'with litmus:provision_install task' do
|
49
51
|
it 'happy path' do
|
50
|
-
expect(Rake::Task['spec_prep']).to receive(:invoke).and_return('')
|
51
|
-
expect(Rake::Task['litmus:provision_list']).to receive(:invoke).with('default')
|
52
|
-
expect(Rake::Task['litmus:install_agent']).to receive(:invoke).with('puppet6')
|
53
|
-
expect(Rake::Task['litmus:install_module']).to receive(:invoke)
|
52
|
+
expect(Rake::Task['spec_prep']).to receive(:invoke).and_return('')
|
53
|
+
expect(Rake::Task['litmus:provision_list']).to receive(:invoke).with('default')
|
54
|
+
expect(Rake::Task['litmus:install_agent']).to receive(:invoke).with('puppet6')
|
55
|
+
expect(Rake::Task['litmus:install_module']).to receive(:invoke)
|
54
56
|
Rake::Task['litmus:provision_install'].invoke('default', 'puppet6')
|
55
57
|
end
|
56
58
|
end
|
@@ -92,4 +94,12 @@ describe 'litmus rake tasks' do
|
|
92
94
|
Rake::Task['litmus:check_connectivity'].invoke
|
93
95
|
end
|
94
96
|
end
|
97
|
+
|
98
|
+
context 'with litmus:acceptance:localhost task' do
|
99
|
+
it 'calls spec_prep' do
|
100
|
+
expect(Rake::Task['spec_prep']).to receive(:invoke).and_return('')
|
101
|
+
expect_any_instance_of(RSpec::Core::RakeTask).to receive(:run_task)
|
102
|
+
Rake::Task['litmus:acceptance:localhost'].invoke
|
103
|
+
end
|
104
|
+
end
|
95
105
|
end
|
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.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bolt
|
@@ -118,6 +118,20 @@ dependencies:
|
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '0'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: honeycomb-beeline
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
type: :runtime
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
121
135
|
description: " Providing a simple command line tool for puppet content creators,
|
122
136
|
to enable simple and complex test deployments.\n"
|
123
137
|
email:
|
@@ -163,19 +177,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
177
|
- !ruby/object:Gem::Version
|
164
178
|
version: '0'
|
165
179
|
requirements: []
|
166
|
-
|
167
|
-
rubygems_version: 2.7.6.2
|
180
|
+
rubygems_version: 3.0.6
|
168
181
|
signing_key:
|
169
182
|
specification_version: 4
|
170
183
|
summary: Providing a simple command line tool for puppet content creators, to enable
|
171
184
|
simple and complex test deployments.
|
172
185
|
test_files:
|
173
|
-
- spec/spec_helper.rb
|
174
|
-
- spec/lib/puppet_litmus/rake_tasks_spec.rb
|
175
|
-
- spec/lib/puppet_litmus/version_spec.rb
|
176
|
-
- spec/lib/puppet_litmus/inventory_manipulation_spec.rb
|
177
|
-
- spec/lib/puppet_litmus/rake_helper_spec.rb
|
178
|
-
- spec/lib/puppet_litmus/puppet_helpers_spec.rb
|
179
186
|
- spec/data/doot.tar.gz
|
180
|
-
- spec/data/jim.yaml
|
181
187
|
- spec/data/inventory.yaml
|
188
|
+
- spec/data/jim.yaml
|
189
|
+
- spec/lib/puppet_litmus/inventory_manipulation_spec.rb
|
190
|
+
- spec/lib/puppet_litmus/puppet_helpers_spec.rb
|
191
|
+
- spec/lib/puppet_litmus/rake_helper_spec.rb
|
192
|
+
- spec/lib/puppet_litmus/rake_tasks_spec.rb
|
193
|
+
- spec/lib/puppet_litmus/version_spec.rb
|
194
|
+
- spec/spec_helper.rb
|