puppet_litmus 0.2.0 → 0.3.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/rake_tasks.rb +15 -5
- data/lib/puppet_litmus/serverspec.rb +9 -16
- data/lib/puppet_litmus/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8eb95d6d8c4273f6f5a8adb391bd2733a63780a6
|
4
|
+
data.tar.gz: d0ee040ae15c4d6e3eeffa0a87e58983647545ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37edcc9a67e468ffb8a6de584ef74c260e430f0acc4dada0004e732ddf0b472999154302d05f3eec4fee26c33e795c65895b15442ee126af4ed754f12ceb24c7
|
7
|
+
data.tar.gz: 7185b48a857a1bd10a5501f85fbe6ee311a5b45f65b1ed2e9ea265a205701bd041f1dfc0c894df13fcb54567d5971012d8fabaf72c8cbfbe7cfcb3b872568a25
|
@@ -6,6 +6,7 @@ require 'bolt_spec/run'
|
|
6
6
|
require 'open3'
|
7
7
|
require 'pdk'
|
8
8
|
require 'json'
|
9
|
+
require 'parallel'
|
9
10
|
|
10
11
|
def get_metadata_operating_systems(metadata)
|
11
12
|
return unless metadata.is_a?(Hash)
|
@@ -102,15 +103,15 @@ namespace :litmus do
|
|
102
103
|
raise "Failed to provision with '#{provisioner}'\n #{failed_image_message}" unless failed_image_message.empty?
|
103
104
|
end
|
104
105
|
|
105
|
-
desc "provision container/VM - abs/docker/vmpooler eg 'bundle exec rake 'litmus:provision[vmpooler, ubuntu-1604-x86_64]'"
|
106
|
+
desc "provision container/VM - abs/docker/vagrant/vmpooler eg 'bundle exec rake 'litmus:provision[vmpooler, ubuntu-1604-x86_64]'"
|
106
107
|
task :provision, [:provisioner, :platform] do |_task, args|
|
107
108
|
include BoltSpec::Run
|
108
109
|
Rake::Task['spec_prep'].invoke
|
109
110
|
config_data = { 'modulepath' => File.join(Dir.pwd, 'spec', 'fixtures', 'modules') }
|
110
111
|
raise "the provision module was not found in #{config_data['modulepath']}, please amend the .fixtures.yml file" unless File.directory?(File.join(config_data['modulepath'], 'provision'))
|
111
112
|
|
112
|
-
unless %w[abs
|
113
|
-
raise "Unknown provisioner '#{args[:provisioner]}', try abs/docker/vmpooler
|
113
|
+
unless %w[abs docker docker_exp vagrant vmpooler].include?(args[:provisioner])
|
114
|
+
raise "Unknown provisioner '#{args[:provisioner]}', try abs/docker/vagrant/vmpooler"
|
114
115
|
end
|
115
116
|
|
116
117
|
params = { 'action' => 'provision', 'platform' => args[:platform], 'inventory' => Dir.pwd }
|
@@ -142,7 +143,8 @@ namespace :litmus do
|
|
142
143
|
results = run_task('puppet_agent::install', targets, params, config: config_data, inventory: inventory_hash)
|
143
144
|
results.each do |result|
|
144
145
|
if result['status'] != 'success'
|
145
|
-
|
146
|
+
command_to_run = "bolt task run puppet_agent::install --targets #{result['node']} --inventoryfile inventory.yaml --modulepath #{config_data['modulepath']}"
|
147
|
+
puts "Failed on #{result['node']}\n#{result}\ntry running '#{command_to_run}'"
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
@@ -207,7 +209,7 @@ namespace :litmus do
|
|
207
209
|
targets.each do |node_name|
|
208
210
|
# how do we know what provisioner to use
|
209
211
|
node_facts = facts_from_node(inventory_hash, node_name)
|
210
|
-
next unless %w[abs docker
|
212
|
+
next unless %w[abs docker docker_exp vagrant vmpooler].include?(node_facts['provisioner'])
|
211
213
|
|
212
214
|
params = { 'action' => 'tear_down', 'node_name' => node_name, 'inventory' => Dir.pwd }
|
213
215
|
result = run_task("provision::#{node_facts['provisioner']}", 'localhost', params, config: config_data, inventory: nil)
|
@@ -253,6 +255,14 @@ namespace :litmus do
|
|
253
255
|
stdout, stderr, status = Open3.capture3(test)
|
254
256
|
["================\n#{title}\n", stdout, stderr, status]
|
255
257
|
end
|
258
|
+
# because we cannot modify variables inside of Parallel
|
259
|
+
results.each do |result|
|
260
|
+
if result.last.to_i.zero?
|
261
|
+
success_list.push(result.first.scan(%r{.*})[2])
|
262
|
+
else
|
263
|
+
failure_list.push(result.first.scan(%r{.*})[2])
|
264
|
+
end
|
265
|
+
end
|
256
266
|
spinner.success
|
257
267
|
else
|
258
268
|
spinners = TTY::Spinner::Multi.new("[:spinner] Running against #{targets.size} targets.")
|
@@ -42,18 +42,7 @@ module PuppetLitmus::Serverspec
|
|
42
42
|
command_to_run += " --modulepath #{Dir.pwd}/spec/fixtures/modules" if target_node_name.nil? || target_node_name == 'localhost'
|
43
43
|
command_to_run += ' --detailed-exitcodes' if !opts[:catch_changes].nil? && (opts[:catch_changes] == true)
|
44
44
|
command_to_run += ' --debug' if !opts[:debug].nil? && (opts[:debug] == true)
|
45
|
-
|
46
|
-
if Gem.win_platform?
|
47
|
-
stdout, stderr, status = Open3.capture3(command_to_run)
|
48
|
-
status_text = if status.to_i.zero?
|
49
|
-
'success'
|
50
|
-
else
|
51
|
-
'failure'
|
52
|
-
end
|
53
|
-
result = [{ 'node' => 'localhost', 'status' => status_text, 'result' => { 'exit_code' => status.to_i, 'stderr' => stderr, 'stdout' => stdout } }]
|
54
|
-
else
|
55
|
-
result = run_command(command_to_run, target_node_name, config: nil, inventory: inventory_hash)
|
56
|
-
end
|
45
|
+
result = run_command(command_to_run, target_node_name, config: nil, inventory: inventory_hash)
|
57
46
|
|
58
47
|
raise "apply manifest failed\n`#{command_to_run}`\n======\n#{result}" if result.first['result']['exit_code'] != 0 && opts[:expect_failures] != true
|
59
48
|
|
@@ -64,15 +53,15 @@ module PuppetLitmus::Serverspec
|
|
64
53
|
result
|
65
54
|
end
|
66
55
|
|
67
|
-
# Creates a manifest file locally
|
56
|
+
# Creates a manifest file locally in a temp location, if its a remote target copy it to there.
|
68
57
|
#
|
69
58
|
# @param manifest [String] puppet manifest code.
|
70
59
|
# @return [String] The path to the location of the manifest.
|
71
60
|
def create_manifest_file(manifest)
|
72
|
-
require '
|
73
|
-
|
61
|
+
require 'tmpdir'
|
74
62
|
target_node_name = ENV['TARGET_HOST']
|
75
|
-
|
63
|
+
tmp_filename = File.join(Dir.tmpdir, "manifest_#{Time.now.strftime('%Y%m%d')}_#{Process.pid}_#{rand(0x100000000).to_s(36)}.pp")
|
64
|
+
manifest_file = File.open(tmp_filename, 'w')
|
76
65
|
manifest_file.write(manifest)
|
77
66
|
manifest_file.close
|
78
67
|
if target_node_name.nil? || target_node_name == 'localhost'
|
@@ -122,6 +111,10 @@ module PuppetLitmus::Serverspec
|
|
122
111
|
|
123
112
|
raise "task failed\n`#{task_name}`\n======\n#{result}" if result.first['status'] != 'success'
|
124
113
|
|
114
|
+
result = OpenStruct.new(exit_code: result.first['result']['exit_code'],
|
115
|
+
stdout: result.first['result']['stdout'],
|
116
|
+
stderr: result.first['result']['stderr'])
|
117
|
+
yield result if block_given?
|
125
118
|
result
|
126
119
|
end
|
127
120
|
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.3.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: 2019-05-
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bolt
|