puppet_litmus 0.22.0 → 0.25.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09a793d09382a0f461b0390ebb71f94ae4a14df41873d44a77f2006ee15934bf'
4
- data.tar.gz: eced3b1aceb10d8fc85f90dd15ab3cfc300f793b85e2f516548510d59bd9ab4c
3
+ metadata.gz: 228833b61d086ab7b01341ce03eb1169c309855209ca8a1345d55525fbe6403b
4
+ data.tar.gz: 9e1f9a8f180f047bf49ac493b00871294bf22adccc134fbea6aa7c46fa8b6769
5
5
  SHA512:
6
- metadata.gz: b2226c90e2928e78e44ab3faf2ff837da356934ea89768637b7943c32d615b3c04ff605a00063dff6ad24126ac5e9a43f2e86f16c6385132bbc9c4ba7a27b82e
7
- data.tar.gz: 5651ff30427d4f96b72440c28458251e00c4c595df98a602130fa95aec6f18c1f5d378d2a737ece3c918367cd38933f7aa615733ffc0c5ee77e6240f4fd82db8
6
+ metadata.gz: efc5c864bf1781678e2cfd729bbbe2e5bdbe1f0eb03b244f135d892629c6e404aa01c1290fb001bb5616f8149800ff05e55fb57abb78b4f2041d1539ab18864d
7
+ data.tar.gz: 1b12e3fcd6b1d9def5040c720a543a44df317538dcfe9058930a205412c709ff6160215edacaa4f6c22e6c2223b543d9f6d7ccc884b059ce849c5c83ce3079e1
@@ -6,7 +6,6 @@
6
6
  require 'json'
7
7
 
8
8
  IMAGE_TABLE = {
9
- 'RedHat-6' => 'rhel-6',
10
9
  'RedHat-7' => 'rhel-7',
11
10
  'RedHat-8' => 'rhel-8',
12
11
  'SLES-12' => 'sles-12',
@@ -36,9 +35,8 @@ DOCKER_PLATFORMS = [
36
35
  # This table uses the latest version in each collection for accurate
37
36
  # comparison when evaluating puppet requirements from the metadata
38
37
  COLLECTION_TABLE = {
39
- '5.5.22' => 'puppet5',
40
- '6.19.1' => 'puppet6-nightly',
41
- '7.0.0' => 'puppet7-nightly',
38
+ '6.21.0' => 'puppet6-nightly',
39
+ '7.4.0' => 'puppet7-nightly',
42
40
  }.freeze
43
41
 
44
42
  matrix = {
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # this script creates a build matrix for github actions from the claimed supported platforms and puppet versions in metadata.json
5
+
6
+ require 'json'
7
+
8
+ IMAGE_TABLE = {
9
+ 'RedHat-7' => 'rhel-7',
10
+ 'RedHat-8' => 'rhel-8',
11
+ 'SLES-12' => 'sles-12',
12
+ 'SLES-15' => 'sles-15',
13
+ 'Windows-2012 R2' => 'windows-2012-r2-core',
14
+ 'Windows-2016' => 'windows-2016',
15
+ 'Windows-2019' => 'windows-2019-core',
16
+ }.freeze
17
+
18
+ DOCKER_PLATFORMS = {
19
+ 'CentOS-6' => 'litmusimage/centos:6',
20
+ 'CentOS-7' => 'litmusimage/centos:7',
21
+ 'CentOS-8' => 'litmusimage/centos:8',
22
+ 'Debian-10' => 'litmusimage/debian:10',
23
+ # 'Debian-8' => 'litmusimage/debian:8', Removing from testing: https://puppet.com/docs/pe/2021.0/supported_operating_systems.html
24
+ 'Debian-9' => 'litmusimage/debian:9',
25
+ 'OracleLinux-6' => 'litmusimage/oraclelinux:6',
26
+ 'OracleLinux-7' => 'litmusimage/oraclelinux:7',
27
+ 'Scientific-6' => 'litmusimage/scientificlinux:6',
28
+ 'Scientific-7' => 'litmusimage/scientificlinux:7',
29
+ # 'Ubuntu-14.04' => 'litmusimage/ubuntu:14.04', Removing from testing: https://puppet.com/docs/pe/2021.0/supported_operating_systems.html
30
+ 'Ubuntu-16.04' => 'litmusimage/ubuntu:16.04',
31
+ 'Ubuntu-18.04' => 'litmusimage/ubuntu:18.04',
32
+ 'Ubuntu-20.04' => 'litmusimage/ubuntu:20.04',
33
+ }.freeze
34
+
35
+ # This table uses the latest version in each collection for accurate
36
+ # comparison when evaluating puppet requirements from the metadata
37
+ COLLECTION_TABLE = {
38
+ '6.24.0' => 'puppet6-nightly',
39
+ '7.4.0' => 'puppet7-nightly',
40
+ }.freeze
41
+
42
+ matrix = {
43
+ platforms: [],
44
+ collection: [],
45
+ }
46
+
47
+ metadata = JSON.parse(File.read('metadata.json'))
48
+ # Set platforms based on declared operating system support
49
+ metadata['operatingsystem_support'].sort_by { |a| a['operatingsystem'] }.each do |sup|
50
+ os = sup['operatingsystem']
51
+ sup['operatingsystemrelease'].sort_by { |a| a.to_i }.each do |ver|
52
+ image_key = "#{os}-#{ver}"
53
+ if IMAGE_TABLE.key? image_key
54
+ matrix[:platforms] << {
55
+ label: image_key,
56
+ provider: 'provision::provision_service',
57
+ image: IMAGE_TABLE[image_key],
58
+ }
59
+ elsif DOCKER_PLATFORMS.key? image_key
60
+ matrix[:platforms] << {
61
+ label: image_key,
62
+ provider: 'provision::docker',
63
+ image: DOCKER_PLATFORMS[image_key],
64
+ }
65
+ else
66
+ puts "::warning::Cannot find image for #{image_key}"
67
+ end
68
+ end
69
+ end
70
+
71
+ # Set collections based on puppet version requirements
72
+ if metadata.key?('requirements') && metadata['requirements'].length.positive?
73
+ metadata['requirements'].each do |req|
74
+ next unless req.key?('name') && req.key?('version_requirement') && req['name'] == 'puppet'
75
+
76
+ ver_regexp = %r{^([>=<]{1,2})\s*([\d.]+)\s+([>=<]{1,2})\s*([\d.]+)$}
77
+ match = ver_regexp.match(req['version_requirement'])
78
+ if match.nil?
79
+ puts "::warning::Didn't recognize version_requirement '#{req['version_requirement']}'"
80
+ break
81
+ end
82
+
83
+ cmp_one, ver_one, cmp_two, ver_two = match.captures
84
+ reqs = ["#{cmp_one} #{ver_one}", "#{cmp_two} #{ver_two}"]
85
+
86
+ COLLECTION_TABLE.each do |key, val|
87
+ if Gem::Requirement.create(reqs).satisfied_by?(Gem::Version.new(key))
88
+ matrix[:collection] << val
89
+ end
90
+ end
91
+ end
92
+ end
93
+
94
+ # Set to defaults (all collections) if no matches are found
95
+ if matrix[:collection].empty?
96
+ matrix[:collection] = COLLECTION_TABLE.values
97
+ end
98
+
99
+ # Just to make sure there aren't any duplicates
100
+ matrix[:platforms] = matrix[:platforms].uniq.sort { |a, b| a[:label] <=> b[:label] }
101
+ matrix[:collection] = matrix[:collection].uniq.sort
102
+
103
+ puts "::set-output name=matrix::#{JSON.generate(matrix)}"
104
+
105
+ puts "Created matrix with #{matrix[:platforms].length * matrix[:collection].length} cells."
@@ -17,10 +17,7 @@ module PuppetLitmus::InventoryManipulation
17
17
  end
18
18
  raise "There is no inventory file at '#{inventory_full_path}'." unless File.exist?(inventory_full_path)
19
19
 
20
- inventory_hash = YAML.load_file(inventory_full_path)
21
- raise "Inventory file is incompatible (version 2 and up). Try the 'bolt project migrate' command." if inventory_hash['version'].nil? || (inventory_hash['version'] < 2)
22
-
23
- inventory_hash
20
+ YAML.load_file(inventory_full_path)
24
21
  end
25
22
 
26
23
  # Provide a default hash for executing against localhost
@@ -28,7 +25,6 @@ module PuppetLitmus::InventoryManipulation
28
25
  # @return [Hash] inventory.yaml hash containing only an entry for localhost
29
26
  def localhost_inventory_hash
30
27
  {
31
- 'version' => 2,
32
28
  'groups' => [
33
29
  {
34
30
  'name' => 'local',
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # helper functions for running puppet commands. They execute a target system specified by ENV['TARGET_HOST']
4
- # heavily uses functions from here https://github.com/puppetlabs/bolt/blob/master/developer-docs/bolt_spec-run.md
4
+ # heavily uses functions from here https://github.com/puppetlabs/bolt/blob/main/developer-docs/bolt_spec-run.md
5
5
  module PuppetLitmus::PuppetHelpers
6
6
  # Applies a manifest twice. First checking for errors. Secondly to make sure no changes occur.
7
7
  #
@@ -11,7 +11,7 @@ module PuppetLitmus::PuppetHelpers
11
11
  Honeycomb.start_span(name: 'litmus.idempotent_apply') do |span|
12
12
  ENV['HONEYCOMB_TRACE'] = span.to_trace_header
13
13
  manifest_file_location = create_manifest_file(manifest)
14
- apply_manifest(nil, expect_failures: false, manifest_file_location: manifest_file_location)
14
+ apply_manifest(nil, catch_failures: true, manifest_file_location: manifest_file_location)
15
15
  apply_manifest(nil, catch_changes: true, manifest_file_location: manifest_file_location)
16
16
  end
17
17
  end
@@ -83,18 +83,21 @@ module PuppetLitmus::PuppetHelpers
83
83
  command_to_run += ' --noop' if !opts[:noop].nil? && (opts[:noop] == true)
84
84
  command_to_run += ' --detailed-exitcodes' if use_detailed_exit_codes == true
85
85
 
86
- command_to_run = "try { #{command_to_run}; exit $LASTEXITCODE } catch { write-error $_ ; exit 1 }" if os[:family] == 'windows'
87
-
88
- span.add_field('litmus.command_to_run', command_to_run)
89
86
  span.add_field('litmus.target_node_name', target_node_name)
90
- # IAC-1365 - Workaround for BOLT-1535 and bolt issue #1650
91
- # bolt_result = run_command(command_to_run, target_node_name, config: nil, inventory: inventory_hash)
92
- bolt_result = Tempfile.open(['temp', '.ps1']) do |script|
93
- script.write(command_to_run)
94
- script.close
95
- run_script(script.path, target_node_name, [], options: {}, config: nil, inventory: inventory_hash)
96
- end
97
87
 
88
+ if os[:family] == 'windows'
89
+ # IAC-1365 - Workaround for BOLT-1535 and bolt issue #1650
90
+ command_to_run = "try { #{command_to_run}; exit $LASTEXITCODE } catch { write-error $_ ; exit 1 }"
91
+ span.add_field('litmus.command_to_run', command_to_run)
92
+ bolt_result = Tempfile.open(['temp', '.ps1']) do |script|
93
+ script.write(command_to_run)
94
+ script.close
95
+ run_script(script.path, target_node_name, [], options: {}, config: nil, inventory: inventory_hash)
96
+ end
97
+ else
98
+ span.add_field('litmus.command_to_run', command_to_run)
99
+ bolt_result = run_command(command_to_run, target_node_name, config: nil, inventory: inventory_hash)
100
+ end
98
101
  span.add_field('litmus.bolt_result', bolt_result)
99
102
  result = OpenStruct.new(exit_code: bolt_result.first['value']['exit_code'],
100
103
  stdout: bolt_result.first['value']['stdout'],
@@ -2,5 +2,5 @@
2
2
 
3
3
  # version of this gem
4
4
  module PuppetLitmus
5
- VERSION ||= '0.22.0'
5
+ VERSION ||= '0.25.1'
6
6
  end
@@ -16,7 +16,7 @@ describe 'litmus rake tasks' do
16
16
  'operatingsystem_support' =>
17
17
  [{ 'operatingsystem' => 'RedHat', 'operatingsystemrelease' => ['5'] },
18
18
  { 'operatingsystem' => 'Ubuntu', 'operatingsystemrelease' => ['14.04', '18.04'] }],
19
- 'template-ref' => 'heads/master-0-g7827fc2' }
19
+ 'template-ref' => 'heads/main-0-g7827fc2' }
20
20
  expect(File).to receive(:read).with(any_args).once
21
21
  expect(JSON).to receive(:parse).with(any_args).and_return(metadata)
22
22
  expect($stdout).to receive(:puts).with('redhat-5-x86_64')
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.22.0
4
+ version: 0.25.1
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-01-21 00:00:00.000000000 Z
11
+ date: 2021-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bolt
@@ -166,12 +166,14 @@ email:
166
166
  - info@puppet.com
167
167
  executables:
168
168
  - matrix_from_metadata
169
+ - matrix_from_metadata_v2
169
170
  extensions: []
170
171
  extra_rdoc_files: []
171
172
  files:
172
173
  - LICENSE
173
174
  - README.md
174
175
  - exe/matrix_from_metadata
176
+ - exe/matrix_from_metadata_v2
175
177
  - lib/puppet_litmus.rb
176
178
  - lib/puppet_litmus/inventory_manipulation.rb
177
179
  - lib/puppet_litmus/puppet_helpers.rb
@@ -194,7 +196,7 @@ homepage: https://github.com/puppetlabs/puppet_litmus
194
196
  licenses:
195
197
  - Apache-2.0
196
198
  metadata: {}
197
- post_install_message:
199
+ post_install_message:
198
200
  rdoc_options: []
199
201
  require_paths:
200
202
  - lib
@@ -209,8 +211,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
211
  - !ruby/object:Gem::Version
210
212
  version: '0'
211
213
  requirements: []
212
- rubygems_version: 3.0.3
213
- signing_key:
214
+ rubygems_version: 3.0.6
215
+ signing_key:
214
216
  specification_version: 4
215
217
  summary: Providing a simple command line tool for puppet content creators, to enable
216
218
  simple and complex test deployments.