puppet_litmus 0.13.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/puppet_litmus/rake_helper.rb +14 -0
- data/lib/puppet_litmus/rake_tasks.rb +16 -15
- data/lib/puppet_litmus/spec_helper_acceptance.rb +4 -1
- data/lib/puppet_litmus/version.rb +1 -1
- data/spec/lib/puppet_litmus/puppet_helpers_spec.rb +4 -4
- data/spec/lib/puppet_litmus/rake_helper_spec.rb +21 -0
- data/spec/lib/puppet_litmus/rake_tasks_spec.rb +11 -0
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 815ccaf832ee6fa876fa73222f64246bf39d1510488cd5c655ea880976e94c32
|
4
|
+
data.tar.gz: 40c94ee82672dd7a48d100d54cdf1091fea06b8b706e69c0382e4dbf5edfdb86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6aa9e819c9d11d3d2f149e29792ee373c715cac86d4f6b2f6620efba1111b27b2fb9756470bed981e3fcf0d9b1897e398390a6dd8215e9d3cced0842311f58bb
|
7
|
+
data.tar.gz: 14fa50906d8122c789d13a380dc245e41da0106c9ee9b1c7993b62b40de2661aa3a700303dcb2f7194756cbb34d3f143b94fb987d620a21cfd31a73bdf243382
|
@@ -207,4 +207,18 @@ module PuppetLitmus::RakeHelper
|
|
207
207
|
install_module_command = "puppet module uninstall #{module_name}"
|
208
208
|
run_command(install_module_command, target_nodes, config: nil, inventory: inventory_hash)
|
209
209
|
end
|
210
|
+
|
211
|
+
def check_connectivity?(inventory_hash, target_node_name)
|
212
|
+
require 'bolt_spec/run'
|
213
|
+
include BoltSpec::Run
|
214
|
+
target_nodes = find_targets(inventory_hash, target_node_name)
|
215
|
+
results = run_command('cd .', target_nodes, config: nil, inventory: inventory_hash)
|
216
|
+
failed = []
|
217
|
+
results.each do |result|
|
218
|
+
failed.push(result['target']) if result['status'] == 'failure'
|
219
|
+
end
|
220
|
+
raise "Connectivity has failed on: #{failed}" unless failed.length.zero?
|
221
|
+
|
222
|
+
true
|
223
|
+
end
|
210
224
|
end
|
@@ -53,7 +53,7 @@ namespace :litmus do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
if result.first['status'] != 'success'
|
56
|
-
failed_image_message += "=====\n#{result.first['node']}\n#{result.first['result']['_output']}\n"
|
56
|
+
failed_image_message += "=====\n#{result.first['node']}\n#{result.first['result']['_output']}\n#{result.inspect}"
|
57
57
|
else
|
58
58
|
STDOUT.puts "#{result.first['result']['node_name']}, #{image}"
|
59
59
|
end
|
@@ -175,6 +175,20 @@ namespace :litmus do
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
+
# Check that the nodes in the inventory are still contactable
|
179
|
+
#
|
180
|
+
# @param :target_node_name [Array] nodes on which to check connnectivity
|
181
|
+
desc 'check_connectivity - build and install module'
|
182
|
+
task :check_connectivity, [:target_node_name] do |_task, args|
|
183
|
+
inventory_hash = inventory_hash_from_inventory_file
|
184
|
+
target_nodes = find_targets(inventory_hash, args[:target_node_name])
|
185
|
+
if target_nodes.empty?
|
186
|
+
puts 'No targets found'
|
187
|
+
exit 0
|
188
|
+
end
|
189
|
+
check_connectivity?(inventory_hash, args[:target_node_name])
|
190
|
+
end
|
191
|
+
|
178
192
|
# Install the puppet module under test on a collection of nodes
|
179
193
|
#
|
180
194
|
# @param :target_node_name [Array] nodes on which to install a puppet module for testing.
|
@@ -366,23 +380,10 @@ namespace :litmus do
|
|
366
380
|
# output test summary
|
367
381
|
puts "Successful on #{success_list.size} nodes: #{success_list}" if success_list.any?
|
368
382
|
puts "Failed on #{failure_list.size} nodes: #{failure_list}" if failure_list.any?
|
383
|
+
Rake::Task['litmus:check_connectivity'].invoke
|
369
384
|
exit 1 if failure_list.any?
|
370
385
|
end
|
371
386
|
|
372
|
-
# Run acceptance tests against all machines in the inventory file in serial.
|
373
|
-
desc 'Run tests in serial against all machines in the inventory file'
|
374
|
-
task :serial do
|
375
|
-
# Iterate over all of the acceptance test tasks and invoke them;
|
376
|
-
# We can rely on them always being in the format `litmus:acceptance:host_name:port`
|
377
|
-
# The host_name might be localhost or an IP or a DNS-resolvable node.
|
378
|
-
prefix = 'litmus:acceptance:'
|
379
|
-
tasks = Rake::Task.tasks.select { |task| task.name =~ %r{^#{prefix}.+:\d+$} }
|
380
|
-
tasks.each do |task|
|
381
|
-
puts "Running acceptance tests against #{task.name[prefix.length..-1]}"
|
382
|
-
task.invoke
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
387
|
targets.each do |target|
|
387
388
|
desc "Run serverspec against #{target}"
|
388
389
|
next if target == 'litmus_localhost'
|
@@ -9,6 +9,7 @@ module PuppetLitmus
|
|
9
9
|
|
10
10
|
RSpec.configure do |config|
|
11
11
|
config.include PuppetLitmus
|
12
|
+
config.extend PuppetLitmus
|
12
13
|
end
|
13
14
|
|
14
15
|
if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost'
|
@@ -73,7 +74,9 @@ module PuppetLitmus
|
|
73
74
|
set :os, family: 'windows'
|
74
75
|
user = node_config.dig('winrm', 'user') unless node_config.dig('winrm', 'user').nil?
|
75
76
|
pass = node_config.dig('winrm', 'password') unless node_config.dig('winrm', 'password').nil?
|
76
|
-
endpoint = "http://#{ENV['TARGET_HOST']}
|
77
|
+
endpoint = URI("http://#{ENV['TARGET_HOST']}")
|
78
|
+
endpoint.port = 5985 if endpoint.port == 80
|
79
|
+
endpoint.path = '/wsman'
|
77
80
|
|
78
81
|
opts = {
|
79
82
|
user: user,
|
@@ -122,10 +122,10 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
|
|
122
122
|
let(:local) { '/tmp' }
|
123
123
|
let(:remote) { '/remote_tmp' }
|
124
124
|
# Ignore rubocop because these hashes are representative of output from an external method and editing them leads to test failures.
|
125
|
-
# rubocop:disable SpaceInsideHashLiteralBraces, SpaceInsideBlockBraces, SpaceAroundOperators, LineLength, SpaceAfterComma
|
125
|
+
# rubocop:disable Layout/SpaceInsideHashLiteralBraces, Layout/SpaceInsideBlockBraces, Layout/SpaceAroundOperators, Metrics/LineLength, Layout/SpaceAfterComma
|
126
126
|
let(:result_success) {[{'node'=>'some.host','target'=>'some.host','action'=>'upload','object'=>'C:\foo\bar.ps1','status'=>'success','result'=>{'_output'=>'Uploaded \'C:\foo\bar.ps1\' to \'some.host:C:\bar\''}}]}
|
127
127
|
let(:result_failure) {[{'node'=>'some.host','target'=>'some.host','action'=>nil,'object'=>nil,'status'=>'failure','result'=>{'_error'=>{'kind'=>'puppetlabs.tasks/task_file_error','msg'=>'No such file or directory @ rb_sysopen - /nonexistant/file/path','details'=>{},'issue_code'=>'WRITE_ERROR'}}}]}
|
128
|
-
# rubocop:enable SpaceInsideHashLiteralBraces, SpaceInsideBlockBraces, SpaceAroundOperators, LineLength, SpaceAfterComma
|
128
|
+
# rubocop:enable Layout/SpaceInsideHashLiteralBraces, Layout/SpaceInsideBlockBraces, Layout/SpaceAroundOperators, Metrics/LineLength, Layout/SpaceAfterComma
|
129
129
|
let(:inventory_hash) { { 'groups' => [{ 'name' => 'local', 'nodes' => [{ 'name' => 'some.host', 'config' => { 'transport' => 'local' } }] }] } }
|
130
130
|
let(:localhost_inventory_hash) { { 'groups' => [{ 'name' => 'local', 'nodes' => [{ 'name' => 'litmus_localhost', 'config' => { 'transport' => 'local' } }] }] } }
|
131
131
|
|
@@ -228,11 +228,11 @@ RSpec.describe PuppetLitmus::PuppetHelpers do
|
|
228
228
|
let(:params) { { 'action' => 'install', 'name' => 'foo' } }
|
229
229
|
let(:config_data) { { 'modulepath' => File.join(Dir.pwd, 'spec', 'fixtures', 'modules') } }
|
230
230
|
# Ignore rubocop because these hashes are representative of output from an external method and editing them leads to test failures.
|
231
|
-
# rubocop:disable SpaceInsideHashLiteralBraces, SpaceBeforeBlockBraces, SpaceInsideBlockBraces, SpaceAroundOperators, LineLength, SpaceAfterComma
|
231
|
+
# rubocop:disable Layout/SpaceInsideHashLiteralBraces, Layout/SpaceBeforeBlockBraces, Layout/SpaceInsideBlockBraces, Layout/SpaceAroundOperators, Metrics/LineLength, Layout/SpaceAfterComma
|
232
232
|
let(:result_unstructured_task_success){ [{'node'=>'some.host','target'=>'some.host','action'=>'task','object'=>'testtask::unstructured','status'=>'success','result'=>{'_output'=>'SUCCESS!'}}]}
|
233
233
|
let(:result_structured_task_success){ [{'node'=>'some.host','target'=>'some.host','action'=>'task','object'=>'testtask::structured','status'=>'success','result'=>{'key1'=>'foo','key2'=>'bar'}}]}
|
234
234
|
let(:result_failure) {[{'node'=>'some.host','target'=>'some.host','action'=>'task','object'=>'testtask::unstructured','status'=>'failure','result'=>{'_error'=>{'msg'=>'FAILURE!','kind'=>'puppetlabs.tasks/task-error','details'=>{'exitcode'=>123}}}}]}
|
235
|
-
# rubocop:enable SpaceInsideHashLiteralBraces, SpaceBeforeBlockBraces, SpaceInsideBlockBraces, SpaceAroundOperators, LineLength, SpaceAfterComma
|
235
|
+
# rubocop:enable Layout/SpaceInsideHashLiteralBraces, Layout/SpaceBeforeBlockBraces, Layout/SpaceInsideBlockBraces, Layout/SpaceAroundOperators, Metrics/LineLength, Layout/SpaceAfterComma
|
236
236
|
let(:inventory_hash) { { 'groups' => [{ 'name' => 'local', 'nodes' => [{ 'name' => 'some.host', 'config' => { 'transport' => 'local' } }] }] } }
|
237
237
|
|
238
238
|
it 'responds to bolt_run_task' do
|
@@ -78,6 +78,27 @@ RSpec.describe PuppetLitmus::RakeHelper do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
context 'with check_connectivity' do
|
82
|
+
let(:inventory_hash) do
|
83
|
+
{ 'groups' =>
|
84
|
+
[{ 'name' => 'ssh_nodes', 'nodes' =>
|
85
|
+
[{ 'name' => 'some.host', 'facts' => { 'provisioner' => 'docker', 'container_name' => 'foo', 'platform' => 'some.host' } }] }] }
|
86
|
+
end
|
87
|
+
let(:targets) { ['some.host'] }
|
88
|
+
let(:command) { 'cd .' }
|
89
|
+
|
90
|
+
it 'node available' do
|
91
|
+
allow(Open3).to receive(:capture3).with('cd .').and_return(['success', '', 0])
|
92
|
+
allow_any_instance_of(BoltSpec::Run).to receive(:run_command).with(command, targets, config: nil, inventory: inventory_hash).and_return([{ 'target' => 'some.host', 'status' => 'success' }])
|
93
|
+
described_class.check_connectivity?(inventory_hash, nil)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'node unavailable' do
|
97
|
+
allow_any_instance_of(BoltSpec::Run).to receive(:run_command).with(command, targets, config: nil, inventory: inventory_hash).and_return([{ 'target' => 'some.host', 'status' => 'failure' }])
|
98
|
+
expect { described_class.check_connectivity?(inventory_hash, nil) }.to raise_error(RuntimeError, %r{Connectivity has failed on:})
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
81
102
|
context 'with uninstall module' do
|
82
103
|
let(:inventory_hash) do
|
83
104
|
{ 'groups' =>
|
@@ -81,4 +81,15 @@ describe 'litmus rake tasks' do
|
|
81
81
|
expect { Rake::Task['litmus:provision_list'].invoke('deet') }.to raise_error(%r{deet})
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
context 'with litmus:check_connectivity task' do
|
86
|
+
let(:inventory_hash) { { 'groups' => [{ 'name' => 'ssh_nodes', 'nodes' => [{ 'name' => 'some.host' }] }] } }
|
87
|
+
|
88
|
+
it 'happy path' do
|
89
|
+
stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'some.host'))
|
90
|
+
expect_any_instance_of(PuppetLitmus::InventoryManipulation).to receive(:inventory_hash_from_inventory_file).and_return(inventory_hash)
|
91
|
+
expect_any_instance_of(PuppetLitmus::RakeHelper).to receive(:check_connectivity?).with(inventory_hash, nil).and_return(true)
|
92
|
+
Rake::Task['litmus:check_connectivity'].invoke
|
93
|
+
end
|
94
|
+
end
|
84
95
|
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.14.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:
|
11
|
+
date: 2020-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bolt
|
@@ -163,18 +163,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
165
|
requirements: []
|
166
|
-
|
166
|
+
rubyforge_project:
|
167
|
+
rubygems_version: 2.7.6.2
|
167
168
|
signing_key:
|
168
169
|
specification_version: 4
|
169
170
|
summary: Providing a simple command line tool for puppet content creators, to enable
|
170
171
|
simple and complex test deployments.
|
171
172
|
test_files:
|
172
|
-
- spec/
|
173
|
-
- spec/data/inventory.yaml
|
174
|
-
- spec/data/jim.yaml
|
175
|
-
- spec/lib/puppet_litmus/inventory_manipulation_spec.rb
|
176
|
-
- spec/lib/puppet_litmus/puppet_helpers_spec.rb
|
177
|
-
- spec/lib/puppet_litmus/rake_helper_spec.rb
|
173
|
+
- spec/spec_helper.rb
|
178
174
|
- spec/lib/puppet_litmus/rake_tasks_spec.rb
|
179
175
|
- spec/lib/puppet_litmus/version_spec.rb
|
180
|
-
- spec/
|
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
|
+
- spec/data/doot.tar.gz
|
180
|
+
- spec/data/jim.yaml
|
181
|
+
- spec/data/inventory.yaml
|