puppet_metadata 3.5.0 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6592e846ac0678664a4f88091a19002df675cbbf06d51159a0a54e9e68573ae7
4
- data.tar.gz: c5975198c75b77e682c8ce263f0b2279f77bbb2df1fb941f5809b909416cf003
3
+ metadata.gz: 28aa43873472b811f5e9cc1fb83463e9cdaf413dc0ffc7b3e30674f7f82e19ba
4
+ data.tar.gz: b8965851efccac5ffd2045f8cbbc944a7fc5db0df386806ec371af8fc86221ef
5
5
  SHA512:
6
- metadata.gz: 46c96e7c74f6f2967b0d7a9c3f0568564e5edcca10f0b57a4652edea19b33d6adad589971cb6141cbab0864eadd58a450554b540fd318bd22717d80e634f6060
7
- data.tar.gz: c7a6da54b846424e3122206c6d6908dd8e4716450c7b79e1529a96df24e376a95c77a04cb73bc40519b5e901da43e08857a061cac0687e83b20da1284ff40565
6
+ metadata.gz: 06df9e652fd704478bc5c95fa86406ea587daf0b21af5bfe5a12a988801c6ee81965713d4e90a484b0e10e2c739147a6b06730ac0ce001be68943598cb5860ce
7
+ data.tar.gz: 87fb2e005ccfb3ab28808d56113541e3a96d6e4ae05064e60818a6abe18249ff7fb94af34fb517ca296ab15136d503ed9ae57fd19ca68adcf7a3a0d54a2779e6
data/README.md CHANGED
@@ -16,23 +16,23 @@ To get outputs [usable in Github Actions](https://docs.github.com/en/free-pro-te
16
16
 
17
17
  ```console
18
18
  $ metadata2gha
19
- puppet_major_versions=[{"name":"Puppet 7","value":7,"collection":"puppet7"},{"name":"Puppet 6","value":6,"collection":"puppet6"}]
20
- puppet_unit_test_matrix=[{"puppet":7,"ruby":"2.7"},{"puppet":6,"ruby":"2.5"}]
21
- github_action_test_matrix=[{"setfile":{"name":"Debian 11","value":"debian11-64"},"puppet":{"name":"Puppet 7","value":7,"collection":"puppet7"}},{"setfile":{"name":"Debian 11","value":"debian11-64"},"puppet":{"name":"Puppet 6","value":6,"collection":"puppet6"}}]
19
+ puppet_major_versions=[{"name":"Puppet 8","value":8,"collection":"puppet8"},{"name":"Puppet 7","value":7,"collection":"puppet7"}]
20
+ puppet_unit_test_matrix=[{"puppet":8,"ruby":"3.2"},{"puppet":7,"ruby":"2.7"}]
21
+ puppet_beaker_test_matrix=[{"name":"Puppet 8 - Debian 12","env":{"BEAKER_PUPPET_COLLECTION":"puppet8","BEAKER_SETFILE":"debian12-64{hostname=debian12-64-puppet8}"}},{"name":"Puppet 7 - Debian 12","env":{"BEAKER_PUPPET_COLLECTION":"puppet7","BEAKER_SETFILE":"debian12-64{hostname=debian12-64-puppet7}"}}]
22
22
  ```
23
23
 
24
24
  Puppet major versions formatted for readability:
25
25
  ```json
26
26
  [
27
+ {
28
+ "name": "Puppet 8",
29
+ "value": 8,
30
+ "collection": "puppet8"
31
+ },
27
32
  {
28
33
  "name": "Puppet 7",
29
34
  "value": 7,
30
35
  "collection": "puppet7"
31
- },
32
- {
33
- "name": "Puppet 6",
34
- "value": 6,
35
- "collection": "puppet6"
36
36
  }
37
37
  ]
38
38
  ```
@@ -40,70 +40,177 @@ Puppet major versions formatted for readability:
40
40
  Puppet unit test matrix formatted for readability:
41
41
  ```json
42
42
  [
43
+ {
44
+ "puppet": 8,
45
+ "ruby": "3.2"
46
+ },
43
47
  {
44
48
  "puppet": 7,
45
49
  "ruby": "2.7"
50
+ }
51
+ ]
52
+ ```
53
+
54
+ Beaker test matrix formatted for readability
55
+ ```json
56
+ [
57
+ {
58
+ "name": "Puppet 8 - Debian 12",
59
+ "env": {
60
+ "BEAKER_PUPPET_COLLECTION": "puppet8",
61
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet8}"
62
+ }
46
63
  },
47
64
  {
48
- "puppet": 6,
49
- "ruby": "2.5"
65
+ "name": "Puppet 7 - Debian 12",
66
+ "env": {
67
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
68
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7}"
69
+ }
50
70
  }
51
71
  ]
52
72
  ```
53
73
 
54
- GitHub Action test matrix formatted for readability
74
+ It is possible to specify the path to metadata.json and customize the setfiles. For example, to ensure the setfiles use FQDNs and apply the [systemd PIDFile workaround under docker](https://github.com/docker/for-linux/issues/835). This either means either using an older image (CentOS 7, Ubuntu 16.04) or skipping (CentOS 8).
75
+
76
+ ```console
77
+ $ metadata2gha --use-fqdn --pidfile-workaround true /path/to/metadata.json
78
+ ```
79
+
80
+ This results in the following JSON data
55
81
  ```json
56
82
  [
57
83
  {
58
- "setfile": {
59
- "name": "Debian 11",
60
- "value": "debian11-64"
61
- },
62
- "puppet": {
63
- "name": "Puppet 7",
64
- "value": 7,
65
- "collection": "puppet7"
84
+ "name": "Puppet 7 - CentOS 7",
85
+ "env": {
86
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
87
+ "BEAKER_SETFILE": "centos7-64{hostname=centos7-64-puppet7.example.com,image=centos:7.6.1810}"
88
+ }
89
+ },
90
+ {
91
+ "name": "Puppet 7 - Debian 12",
92
+ "env": {
93
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
94
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7.example.com}"
66
95
  }
67
96
  },
68
97
  {
69
- "setfile": {
70
- "name": "Debian 11",
71
- "value": "debian11-64"
72
- },
73
- "puppet": {
74
- "name": "Puppet 6",
75
- "value": 6,
76
- "collection": "puppet6"
98
+ "name": "Puppet 7 - Ubuntu 22.04",
99
+ "env": {
100
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
101
+ "BEAKER_SETFILE": "ubuntu2204-64{hostname=ubuntu2204-64-puppet7.example.com}"
77
102
  }
78
103
  }
79
104
  ]
80
105
  ```
81
106
 
82
- It is also possible to specify the path to metadata.json and customize the setfiles. For example, to ensure the setfiles use FQDNs and apply the [systemd PIDFile workaround under docker](https://github.com/docker/for-linux/issues/835). This either means either using an older image (CentOS 7, Ubuntu 16.04) or skipping (CentOS 8).
107
+ If you need custom hostname or multiple hosts in your integration tests this could be achived by using the --beaker-hosts option
108
+
109
+ Option argument is 'HOSTNAME:ROLES;HOSTNAME:..;..' where
110
+ - hosts are separated by ';'
111
+ - host number and roles are separated by ':'
112
+ - Roles follow beaker-hostgenerator syntax
113
+ If you don't need any extra roles use '1;2;..'
83
114
 
84
115
  ```console
85
- $ metadata2gha --use-fqdn --pidfile-workaround true /path/to/metadata.json
116
+ $ metadata2gha --beaker-hosts 'foo:primary.ma;bar:secondary.a'
117
+ ```
118
+
119
+ This results in the following JSON data
120
+ ```json
121
+ [
122
+ {
123
+ "name": "Puppet 7 - Debian 12",
124
+ "env": {
125
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
126
+ "BEAKER_SETFILE": "debian12-64primary.ma{hostname=foo-puppet7}-debian12-64secondary.a{hostname=bar-puppet7}"
127
+ }
128
+ }
129
+ ]
130
+ ```
131
+
132
+ If you need to Expand the matrix ie by product versions it could be achived by using the --beaker-facter option
133
+
134
+ Option argument is 'FACT:LABEL:VALUE,VALUE,..' where
135
+ - Fact, label and values are separated by ':'
136
+ - Values are separated by ','
137
+
138
+ ```console
139
+ $ metadata2gha --beaker-facter 'mongodb_repo_version:MongoDB:4.4,5.0,6.0,7.0'
86
140
  ```
87
141
 
88
142
  This results in the following JSON data
89
143
  ```json
90
144
  [
91
145
  {
92
- "name": "CentOS 7",
93
- "value": "centos7-64{hostname=centos7-64.example.com,image=centos:7.6.1810}"
146
+ "name": "Puppet 7 - Debian 12 - MongoDB 4.4",
147
+ "env": {
148
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
149
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7}",
150
+ "BEAKER_FACTER_mongodb_repo_version": "4.4"
151
+ }
152
+ },
153
+ {
154
+ "name": "Puppet 7 - Debian 12 - MongoDB 5.0",
155
+ "env": {
156
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
157
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7}",
158
+ "BEAKER_FACTER_mongodb_repo_version": "5.0"
159
+ }
94
160
  },
95
161
  {
96
- "name": "Debian 10",
97
- "value": "debian10-64{hostname=debian10-64.example.com}"
162
+ "name": "Puppet 7 - Debian 12 - MongoDB 6.0",
163
+ "env": {
164
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
165
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7}",
166
+ "BEAKER_FACTER_mongodb_repo_version": "6.0"
167
+ }
98
168
  },
99
169
  {
100
- "name": "Ubuntu 18.04",
101
- "value": "ubuntu1804-64{hostname=ubuntu1804-64.example.com}"
170
+ "name": "Puppet 7 - Debian 12 - MongoDB 7.0",
171
+ "env": {
172
+ "BEAKER_PUPPET_COLLECTION": "puppet7",
173
+ "BEAKER_SETFILE": "debian12-64{hostname=debian12-64-puppet7}",
174
+ "BEAKER_FACTER_mongodb_repo_version": "7.0"
175
+ }
102
176
  }
103
177
  ]
104
178
  ```
105
179
 
106
- It is also possible to specify a comma separated list of operating systems as used in `metadata.json` (`CentOS,Ubuntu`).
180
+ ## Work with the API
181
+
182
+ The API can be initialised like this:
183
+
184
+ ```ruby
185
+ require 'puppet_metadata'
186
+ metadata = PuppetMetadata.read('/path/to/a/metadata.json')
187
+ ```
188
+
189
+ The metadata object has several different methods that we can call
190
+
191
+ ### List all supported operating systems
192
+
193
+ ```
194
+ [9] pry(main)> metadata.operatingsystems
195
+ => {"Archlinux"=>nil, "Gentoo"=>nil, "Fedora"=>["32", "33"], "CentOS"=>["7", "8"], "RedHat"=>["7", "8"], "Ubuntu"=>["18.04"], "Debian"=>["9", "10"], "VirtuozzoLinux"=>["7"]}
196
+ [10] pry(main)>
197
+ ```
198
+
199
+ ### List supported major puppet versions
200
+
201
+ ```
202
+ [10] pry(main)> metadata.puppet_major_versions
203
+ => [6, 7]
204
+ [11] pry(main)>
205
+ ```
206
+
207
+ ### Check if an operating systems is supported
208
+
209
+ ```
210
+ [6] pry(main)> metadata.os_release_supported?('Archlinux', nil)
211
+ => true
212
+ [7] pry(main)>
213
+ ```
107
214
 
108
215
  ## Transfer Notice
109
216
 
data/bin/metadata2gha CHANGED
@@ -11,6 +11,7 @@ options = {
11
11
  domain: nil,
12
12
  minimum_major_puppet_version: nil,
13
13
  beaker_fact: nil,
14
+ beaker_hosts: nil,
14
15
  }
15
16
 
16
17
  OptionParser.new do |opts|
@@ -40,6 +41,15 @@ OptionParser.new do |opts|
40
41
  options[:beaker_facter] = [fact, label, values.split(',')]
41
42
  end
42
43
  end
44
+ opts.on('--beaker-hosts HOSTNAME:ROLES;HOSTNAME:ROLES;...', 'Expand the setfile string to create multiple hosts with custom roles. Roles string; see beaker-hostgenerator') do |opt|
45
+ options[:beaker_hosts] = {}
46
+ if opt != 'false'
47
+ opt.split(';').each do |host|
48
+ hostname, roles = host.split(':', 2)
49
+ options[:beaker_hosts][hostname] = roles
50
+ end
51
+ end
52
+ end
43
53
  end.parse!
44
54
 
45
55
  filename = ARGV[0]
@@ -41,6 +41,7 @@ module PuppetMetadata
41
41
  '9' => 5..7,
42
42
  '10' => 5..8,
43
43
  '11' => 6..8,
44
+ '12' => 7..8,
44
45
  },
45
46
  'Ubuntu' => {
46
47
  '14.04' => 5..6,
@@ -19,6 +19,9 @@ module PuppetMetadata
19
19
  # unit files
20
20
  PIDFILE_INCOMPATIBLE = {
21
21
  'CentOS' => ['8'],
22
+ 'AlmaLinux' => ['8'],
23
+ 'OracleLinux' => ['7', '8'],
24
+ 'Rocky' => ['8'],
22
25
  }.freeze
23
26
  class << self
24
27
  # modifies the operating system name to suit beaker-hostgenerator
@@ -52,34 +55,69 @@ module PuppetMetadata
52
55
  # Enforce a domain to be appended to the hostname, making it an FQDN
53
56
  # @param [Optional[String]] puppet_version
54
57
  # The desired puppet version. Will be appended to the hostname
58
+ # @param [Optional[Hash]] hosts
59
+ # Key: hostname, Value: roles (roles string as defined by beaker-hostgenerator )
60
+ # Override the automatically generated hostname and optionally add roles
61
+ # If more than one entry this will generate multiple hosts in the setfile
62
+ # The domain may still be set via the `domain` param.
55
63
  #
56
64
  # @return [nil] If no setfile is available
57
65
  # @return [Array<(String, String)>] The beaker setfile description with a readable name
58
- def os_release_to_setfile(os, release, use_fqdn: false, pidfile_workaround: false, domain: nil, puppet_version: nil)
66
+ def os_release_to_setfile(os, release, use_fqdn: false, pidfile_workaround: false, domain: nil, puppet_version: nil, hosts: nil)
59
67
  return unless os_supported?(os)
60
68
 
61
69
  aos = adjusted_os(os)
62
-
63
70
  name = "#{aos}#{release.tr('.', '')}-64"
64
- hostname = (puppet_version.nil? && puppet_version != 'none') ? name : "#{name}-#{puppet_version}"
71
+ human_name = "#{os} #{release}"
65
72
  domain ||= 'example.com' if use_fqdn
66
73
 
67
- options = {}
68
- options[:hostname] = "#{hostname}.#{domain}" if domain
74
+ hosts_settings = []
75
+ if hosts
76
+ hosts.each do |hostname, roles|
77
+ hosts_settings << {
78
+ 'name' => if roles
79
+ name + roles
80
+ elsif hosts.size > 1
81
+ hosts_settings.empty? ? "#{name}.ma" : "#{name}.a"
82
+ else
83
+ name
84
+ end,
85
+ 'hostname' => ((puppet_version.nil? || puppet_version == 'none') ? hostname : "#{hostname}-#{puppet_version}") + (domain ? ".#{domain}" : ''),
86
+ }
87
+ end
88
+ else
89
+ hosts_settings << {
90
+ 'name' => name,
91
+ 'hostname' => if puppet_version && puppet_version != 'none'
92
+ "#{name}-#{puppet_version}" + (domain ? ".#{domain}" : '')
93
+ elsif domain
94
+ name + (domain ? ".#{domain}" : '')
95
+ else
96
+ ''
97
+ end,
98
+ }
99
+ end
69
100
 
101
+ options = {}
70
102
  # Docker messes up cgroups and some systemd versions can't deal with
71
103
  # that when PIDFile is used.
104
+ image_to_use = nil
72
105
  if pidfile_workaround?(pidfile_workaround, os)
73
106
  return if PIDFILE_INCOMPATIBLE[os]&.include?(release)
74
107
 
75
108
  if (image = PIDFILE_COMPATIBLE_IMAGES.dig(os, release))
76
- options[:image] = image
109
+ image_to_use = image
77
110
  end
78
111
  end
79
112
 
80
- human_name = "#{os} #{release}"
113
+ setfile_parts = []
114
+ hosts_settings.each do |host_settings|
115
+ options[:hostname] = host_settings['hostname'] unless host_settings['hostname'].empty?
116
+ options[:image] = image_to_use if image_to_use
117
+ setfile_parts << build_setfile(host_settings['name'], options)
118
+ end
81
119
 
82
- [build_setfile(name, options), human_name]
120
+ [setfile_parts.join('-'), human_name]
83
121
  end
84
122
 
85
123
  # Return whether a Beaker setfile can be generated for the given OS
@@ -144,6 +144,7 @@ module PuppetMetadata
144
144
  pidfile_workaround: options[:beaker_pidfile_workaround],
145
145
  domain: options[:domain],
146
146
  puppet_version: puppet_collection,
147
+ hosts: options[:beaker_hosts],
147
148
  )
148
149
  end
149
150
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet_metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vox Pupuli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-10-18 00:00:00.000000000 Z
12
+ date: 2024-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metadata-json-lint
@@ -107,14 +107,14 @@ dependencies:
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 2.0.0
110
+ version: 2.6.0
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 2.0.0
117
+ version: 2.6.0
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: yard
120
120
  requirement: !ruby/object:Gem::Requirement