puppet_litmus 1.0.3 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -5
- data/exe/matrix_from_metadata_v2 +71 -22
- data/lib/puppet_litmus/rake_helper.rb +5 -4
- data/lib/puppet_litmus/version.rb +1 -1
- data/spec/exe/matrix_from_metadata_v2_spec.rb +6 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec6aae4d826162090c6d1d7b05df110263b1d77b77879e72623529912a0948fb
|
4
|
+
data.tar.gz: b1d98ca5cad46e027ab1a0c15fdb37ae3e49b8dc70ddf423f2f34ec05e784e7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33254eeeb62d7be13711ee6941a666141715a07f7f3ecf37fb9dc3983403345b6880f4ff060b37b16b83ef7e5ab173982d4323be82af6aa720e59b7fe037f29c
|
7
|
+
data.tar.gz: a06db9fc523e6c6a586ff852cb60769313eb0dfb4be435f24f24038fda950fa87536b8f51248f8d7f36ed431189242f4d57f8dfdf8793d4c0f28d56244b7027a
|
data/README.md
CHANGED
@@ -27,25 +27,36 @@ Litmus also facilitates parallel test runs and running tests in isolation. Each
|
|
27
27
|
|
28
28
|
Install Litmus as a gem by running `gem install puppet_litmus`.
|
29
29
|
|
30
|
-
- Note if you choose to override the `litmus_inventory.yaml` location, please ensure that the directory
|
30
|
+
- Note if you choose to override the `litmus_inventory.yaml` location, please ensure that the directory structure you define exists.
|
31
31
|
|
32
32
|
## matrix_from_metadata_v2
|
33
33
|
|
34
|
-
matrix_from_metadata_v2 tool generates github
|
34
|
+
matrix_from_metadata_v2 tool generates a github action matrix from the supported operating systems listed in the module's metadata.json.
|
35
35
|
|
36
|
-
How to use it:
|
36
|
+
How to use it:
|
37
|
+
in the project module root directory run `bundle exec matrix_from_metadata_v2`
|
37
38
|
|
38
39
|
### --exclude-platforms parameter
|
39
40
|
|
40
|
-
matrix_from_metadata_v2 accepts `--exclude-platforms <JSON array>`
|
41
|
+
matrix_from_metadata_v2 accepts the `--exclude-platforms <JSON array>` argument in order to exclude some platforms from the matrix.
|
41
42
|
|
42
|
-
|
43
|
+
For example:
|
43
44
|
|
44
45
|
`$: bundle exec matrix_from_metadata_v2 --exclude-platforms '["debian-11","centos-8"]'`
|
45
46
|
|
46
47
|
> Note: The option value should be JSON string otherwise it will throw an error.
|
47
48
|
> The values provided in the json array are case-insensitive `["debian-11","centos-8"]'` or `["Debian-11","CentOS-8"]'` are treated as being the same.
|
48
49
|
|
50
|
+
### --custom-matrix parameter
|
51
|
+
|
52
|
+
matrix_from_metadata_v2 accepts the `--custom-matrix /path/to/matrix.json` argument in order to execute your test suite against a custom matrix. This is useful for use cases that do not fit the default matrix generated.
|
53
|
+
|
54
|
+
In order to use this new functionality, run:
|
55
|
+
|
56
|
+
`$: bundle exec matrix_from_metadata_v2 --custom-matrix matrix.json`
|
57
|
+
|
58
|
+
> Note: The file should contain a valid Array of JSON Objects (i.e. `[{"label":"AlmaLinux-8","provider":"provision_service","image":"almalinux-cloud/almalinux-8"}, {..}]`), otherwise it will throw an error.
|
59
|
+
|
49
60
|
## Documentation
|
50
61
|
|
51
62
|
For documentation, see our [Litmus Docs Site](https://puppetlabs.github.io/content-and-tooling-team/docs/litmus/).
|
data/exe/matrix_from_metadata_v2
CHANGED
@@ -94,29 +94,79 @@ else
|
|
94
94
|
exclude_list = []
|
95
95
|
end
|
96
96
|
|
97
|
+
# Force the use of the provision_service provisioner, if the --provision-service argument is present
|
98
|
+
if ARGV.include?('--provision-service')
|
99
|
+
provision_service_occurrences = ARGV.count { |arg| arg == '--provision-service' }
|
100
|
+
raise 'the --provision-service argument should be present just one time in the command' unless provision_service_occurrences <= 1
|
101
|
+
|
102
|
+
# NOTE: that the below are the only available images for the provision service
|
103
|
+
updated_platforms = {
|
104
|
+
'AlmaLinux-8' => 'almalinux-cloud/almalinux-8',
|
105
|
+
'CentOS-7' => 'centos-7',
|
106
|
+
'CentOS-8' => 'centos-stream-8',
|
107
|
+
'Rocky-8' => 'rocky-linux-cloud/rocky-linux-8',
|
108
|
+
'Debian-10' => 'debian-10',
|
109
|
+
'Debian-11' => 'debian-11',
|
110
|
+
'Ubuntu-20.04' => 'ubuntu-2004-lts',
|
111
|
+
'Ubuntu-22.04' => 'ubuntu-2204-lts'
|
112
|
+
}
|
113
|
+
|
114
|
+
updated_list = IMAGE_TABLE.dup.clone
|
115
|
+
updated_list.merge!(updated_platforms)
|
116
|
+
|
117
|
+
IMAGE_TABLE = updated_list.freeze
|
118
|
+
DOCKER_PLATFORMS = {}.freeze
|
119
|
+
end
|
120
|
+
|
97
121
|
metadata_path = ENV['TEST_MATRIX_FROM_METADATA'] || 'metadata.json'
|
98
122
|
metadata = JSON.parse(File.read(metadata_path))
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
}
|
123
|
+
|
124
|
+
# Allow the user to pass a file containing a custom matrix
|
125
|
+
if ARGV.include?('--custom-matrix')
|
126
|
+
custom_matrix_occurrences = ARGV.count { |arg| arg == '--custom-matrix' }
|
127
|
+
raise '--custom-matrix argument should be present just one time in the command' unless custom_matrix_occurrences <= 1
|
128
|
+
|
129
|
+
file_path = ARGV[ARGV.find_index('--custom-matrix') + 1]
|
130
|
+
raise 'no file path specified' if file_path.nil?
|
131
|
+
|
132
|
+
begin
|
133
|
+
custom_matrix = JSON.parse(File.read(file_path))
|
134
|
+
rescue StandardError => e
|
135
|
+
case e
|
136
|
+
when JSON::ParserError
|
137
|
+
raise 'the matrix must be an array of valid JSON objects'
|
138
|
+
when Errno::ENOENT
|
139
|
+
raise "File not found: #{e.message}"
|
117
140
|
else
|
118
|
-
|
119
|
-
|
141
|
+
raise "An unknown exception occurred: #{e.message}"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
custom_matrix.each do |platform|
|
145
|
+
matrix[:platforms] << platform
|
146
|
+
end
|
147
|
+
else
|
148
|
+
# Set platforms based on declared operating system support
|
149
|
+
metadata['operatingsystem_support'].sort_by { |a| a['operatingsystem'] }.each do |sup|
|
150
|
+
os = sup['operatingsystem']
|
151
|
+
sup['operatingsystemrelease'].sort_by(&:to_i).each do |ver|
|
152
|
+
image_key = "#{os}-#{ver}"
|
153
|
+
|
154
|
+
if IMAGE_TABLE.key?(image_key) && !exclude_list.include?(image_key.downcase)
|
155
|
+
matrix[:platforms] << {
|
156
|
+
label: image_key,
|
157
|
+
provider: 'provision_service',
|
158
|
+
image: IMAGE_TABLE[image_key]
|
159
|
+
}
|
160
|
+
elsif DOCKER_PLATFORMS.key?(image_key) && !exclude_list.include?(image_key.downcase)
|
161
|
+
matrix[:platforms] << {
|
162
|
+
label: image_key,
|
163
|
+
provider: 'docker',
|
164
|
+
image: DOCKER_PLATFORMS[image_key]
|
165
|
+
}
|
166
|
+
else
|
167
|
+
puts "::warning::#{image_key} was excluded from testing" if exclude_list.include?(image_key.downcase)
|
168
|
+
puts "::warning::Cannot find image for #{image_key}" unless exclude_list.include?(image_key.downcase)
|
169
|
+
end
|
120
170
|
end
|
121
171
|
end
|
122
172
|
end
|
@@ -155,9 +205,8 @@ end
|
|
155
205
|
|
156
206
|
# Set to defaults (all collections) if no matches are found
|
157
207
|
matrix[:collection] = COLLECTION_TABLE.map { |collection| "puppet#{collection[:puppet_maj_version]}-nightly" } if matrix[:collection].empty?
|
158
|
-
|
159
208
|
# Just to make sure there aren't any duplicates
|
160
|
-
matrix[:platforms] = matrix[:platforms].uniq.sort_by { |a| a[:label] }
|
209
|
+
matrix[:platforms] = matrix[:platforms].uniq.sort_by { |a| a[:label] } unless ARGV.include?('--custom-matrix')
|
161
210
|
matrix[:collection] = matrix[:collection].uniq.sort
|
162
211
|
|
163
212
|
set_output('matrix', JSON.generate(matrix))
|
@@ -98,7 +98,8 @@ module PuppetLitmus::RakeHelper
|
|
98
98
|
|
99
99
|
results = {}
|
100
100
|
targets.each do |node_name|
|
101
|
-
next if
|
101
|
+
# next if local host or provisioner fact empty/not set (GH-421)
|
102
|
+
next if node_name == 'litmus_localhost' || facts_from_node(inventory_hash, node_name)['provisioner'].nil?
|
102
103
|
|
103
104
|
result = tear_down(node_name, inventory_hash)
|
104
105
|
# Some provisioners tear_down targets that were created as a batch job.
|
@@ -287,7 +288,7 @@ module PuppetLitmus::RakeHelper
|
|
287
288
|
if SUPPORTED_PROVISIONERS.include?(provisioner)
|
288
289
|
"provision::#{provisioner}"
|
289
290
|
else
|
290
|
-
warn "WARNING:
|
291
|
+
warn "WARNING: Unsupported provisioner '#{provisioner}', try #{SUPPORTED_PROVISIONERS.join('/')}"
|
291
292
|
provisioner.to_s
|
292
293
|
end
|
293
294
|
end
|
@@ -327,7 +328,7 @@ module PuppetLitmus::RakeHelper
|
|
327
328
|
end
|
328
329
|
|
329
330
|
def start_spinner(message)
|
330
|
-
if (ENV['CI'] || '').casecmp('true').zero?
|
331
|
+
if (ENV['CI'] || '').casecmp('true').zero? || Gem.win_platform?
|
331
332
|
puts message
|
332
333
|
spinner = Thread.new do
|
333
334
|
# CI systems are strange beasts, we only output a '.' every wee while to keep the terminal alive.
|
@@ -345,7 +346,7 @@ module PuppetLitmus::RakeHelper
|
|
345
346
|
end
|
346
347
|
|
347
348
|
def stop_spinner(spinner)
|
348
|
-
if (ENV['CI'] || '').casecmp('true').zero?
|
349
|
+
if (ENV['CI'] || '').casecmp('true').zero? || Gem.win_platform?
|
349
350
|
Thread.kill(spinner)
|
350
351
|
else
|
351
352
|
spinner.success
|
@@ -22,9 +22,9 @@ RSpec.describe 'matrix_from_metadata_v2' do
|
|
22
22
|
[
|
23
23
|
'matrix={',
|
24
24
|
'"platforms":[',
|
25
|
-
'{"label":"CentOS-6","provider":"
|
26
|
-
'{"label":"RedHat-8","provider":"
|
27
|
-
'{"label":"Ubuntu-18.04","provider":"
|
25
|
+
'{"label":"CentOS-6","provider":"docker","image":"litmusimage/centos:6"},',
|
26
|
+
'{"label":"RedHat-8","provider":"provision_service","image":"rhel-8"},',
|
27
|
+
'{"label":"Ubuntu-18.04","provider":"docker","image":"litmusimage/ubuntu:18.04"}',
|
28
28
|
'],',
|
29
29
|
'"collection":[',
|
30
30
|
'"puppet7-nightly","puppet8-nightly"',
|
@@ -59,8 +59,8 @@ RSpec.describe 'matrix_from_metadata_v2' do
|
|
59
59
|
[
|
60
60
|
'matrix={',
|
61
61
|
'"platforms":[',
|
62
|
-
'{"label":"CentOS-6","provider":"
|
63
|
-
'{"label":"RedHat-8","provider":"
|
62
|
+
'{"label":"CentOS-6","provider":"docker","image":"litmusimage/centos:6"},',
|
63
|
+
'{"label":"RedHat-8","provider":"provision_service","image":"rhel-8"}',
|
64
64
|
'],',
|
65
65
|
'"collection":[',
|
66
66
|
'"puppet7-nightly","puppet8-nightly"',
|
@@ -96,7 +96,7 @@ RSpec.describe 'matrix_from_metadata_v2' do
|
|
96
96
|
[
|
97
97
|
'matrix={',
|
98
98
|
'"platforms":[',
|
99
|
-
'{"label":"CentOS-6","provider":"
|
99
|
+
'{"label":"CentOS-6","provider":"docker","image":"litmusimage/centos:6"}',
|
100
100
|
'],',
|
101
101
|
'"collection":[',
|
102
102
|
'"puppet7-nightly","puppet8-nightly"',
|
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: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bolt
|