puppet_litmus 1.0.2 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2693612b3ed4ca88a6ea03742ea115b658d888635f7302a9b8ee36d447d8994
4
- data.tar.gz: 0a2826a635e4ae9619de7a8b7c138506924896fc2ee7d297c78a5b430890150b
3
+ metadata.gz: 4433a55c5c24b484d53d1584036b0bc8371f784dd762ce92eaff928ae984cb66
4
+ data.tar.gz: '08c533a7048dce835a3af639dad0c5f481533fd50be36739c0a0be416e450634'
5
5
  SHA512:
6
- metadata.gz: 3b842feacbc47aa91f9b2f8aee6a81e37f7f58a06b73560ba4b5e61a0a798db4558b51823832a585233e224da8f594de0cb06f38cd1a3e25da83866687210975
7
- data.tar.gz: baf2be2e9f64f2c0f8e60807494d109b82ce86bafaa33f2b1b46ecb9ad30a11393972b2fbad069528a9d8fe7dc3516afa0eb8cf90f443e1d210f93ba10942168
6
+ metadata.gz: c52c6c1b0fa3908ecc2dda5bbc4502e0acc4e03c3eb41704f20a729acfa04f13abd3c8c1ede9f38ba69ea6476d0e32eb3870e36db1862c94dd0195dd79e3dc9b
7
+ data.tar.gz: 44c24366269ac536d2089a3051099c2deeb1312f2b2e73ef64d99a2b9d2348abd0a173a4f65150ba19ffc56e1f7d3264dc1ca81796b278908c93222603b07804
@@ -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
- # Set platforms based on declared operating system support
100
- metadata['operatingsystem_support'].sort_by { |a| a['operatingsystem'] }.each do |sup|
101
- os = sup['operatingsystem']
102
- sup['operatingsystemrelease'].sort_by(&:to_i).each do |ver|
103
- image_key = "#{os}-#{ver}"
104
-
105
- if IMAGE_TABLE.key?(image_key) && !exclude_list.include?(image_key.downcase)
106
- matrix[:platforms] << {
107
- label: image_key,
108
- provider: 'provision::provision_service',
109
- image: IMAGE_TABLE[image_key]
110
- }
111
- elsif DOCKER_PLATFORMS.key?(image_key) && !exclude_list.include?(image_key.downcase)
112
- matrix[:platforms] << {
113
- label: image_key,
114
- provider: 'provision::docker',
115
- image: DOCKER_PLATFORMS[image_key]
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
- puts "::warning::#{image_key} was excluded from testing" if exclude_list.include?(image_key.downcase)
119
- puts "::warning::Cannot find image for #{image_key}" unless exclude_list.include?(image_key.downcase)
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))
@@ -323,35 +323,9 @@ module PuppetLitmus::InventoryManipulation
323
323
  # @param inventory_hash [Hash] hash of the inventory.yaml file
324
324
  # @param node_name [String] node of nodes to limit the search for the node_name in
325
325
  def add_platform_field(inventory_hash, node_name)
326
- facts = begin
327
- facts_from_node(inventory_hash, node_name)
328
- rescue StandardError => e
329
- warn e
330
- {}
331
- end
332
- Honeycomb.current_span.add_field('litmus.platform', facts&.dig('platform'))
333
- end
334
-
335
- # Add platform custom information field to the current span for each node being targeted.
336
- # If more than one node is being targeted, each node will be given a separate custom field.
337
- #
338
- # @param span [Honeycomb::Span] The current span
339
- # @param target_node_names [Array[String]] Nodes being targeted
340
- # @param inventory_hash [Hash] Hash of the inventory.yaml file
341
- def add_node_fields_to_span(span, target_node_names, inventory_hash)
342
- node_counter = 1
343
- Array(target_node_names).each do |target_name|
344
- name_field = 'litmus.node_name'
345
- platform_field = 'litmus.platform'
346
-
347
- name_field = "#{name_field}_#{node_counter}"
348
- platform_field = "#{platform_field}_#{node_counter}"
349
- span.add_field(name_field, target_name)
350
- if target_in_inventory?(inventory_hash, target_name)
351
- facts = facts_from_node(inventory_hash, target_name)
352
- span.add_field(platform_field, facts&.dig('platform')) unless facts.nil?
353
- end
354
- node_counter += 1
355
- end
326
+ facts_from_node(inventory_hash, node_name)
327
+ rescue StandardError => e
328
+ warn e
329
+ {}
356
330
  end
357
331
  end