puppet_metadata 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c9d6561f0093dee6ac521a50bfd507ab2695e192530bb5fdd28dd5264009af3
4
- data.tar.gz: 688205c5b0991c110f288b2acaa54048c6866eeb2f4ced9d392b87e5ddbad535
3
+ metadata.gz: 1812a9565d5558aea69c47b403fd31788417b995ad8c4ef5349ddee10d18529c
4
+ data.tar.gz: 54dda6a4915469ce27d0d2b9a1c43fbcee5cfdc2314dfc3fa8358afca9d303da
5
5
  SHA512:
6
- metadata.gz: 1dfc8d32b372c913d9a86937328f131647f487d546e22cd105547788f3af3396b36049c0c350ee4802baa19d90c00d230acf3bccd6fd8a499170eccb91ec4440
7
- data.tar.gz: d87f9a1be70d013480f72e319f4a9c8179157eb2425bf1be6ae4acafbe5d908a5ed5aa0cfa67bfb33204087a27b3844a0d1f56d0dab408ffa183beccb45981ed
6
+ metadata.gz: 49675f7c180f2300e05c3018cb6d0c9f064d74b5f95fee222d73e7f83c385a8b4a839779462163a11022f9c700d115839c1d79d239a0f5988a1cbf5c3dea344d
7
+ data.tar.gz: be883a1b3af62b048436c263afd6dc4a0963fc5345d9a8e69f63af96e52f84670c5ec1d63ef212a371ed2044f62e21f2c5a49e9016f0c1c108083a12efbd7a7e
@@ -1,5 +1,5 @@
1
1
  module PuppetMetadata
2
- class AIO
2
+ class AIO
3
3
  COMPATIBLE = {
4
4
  'AlmaLinux' => 'RedHat',
5
5
  'Amazon' => 'RedHat',
@@ -7,15 +7,16 @@ module PuppetMetadata
7
7
  'OracleLinux' => 'RedHat',
8
8
  'Rocky' => 'RedHat',
9
9
  'Scientific' => 'RedHat',
10
- }
10
+ }.freeze
11
11
 
12
- BUILDS = {
12
+ BUILDS = {
13
13
  # RPM-based
14
14
  'RedHat' => {
15
15
  '5' => 5..7,
16
16
  '6' => 5..7,
17
17
  '7' => 5..7,
18
18
  '8' => 5..7,
19
+ '9' => 6..7,
19
20
  },
20
21
  'Fedora' => {
21
22
  '26' => [5],
@@ -35,9 +36,10 @@ module PuppetMetadata
35
36
  # deb-based
36
37
  'Debian' => {
37
38
  '7' => [5],
38
- '8' => 5..7,
39
+ '8' => 5..6,
39
40
  '9' => 5..7,
40
41
  '10' => 5..7,
42
+ '11' => 6..7,
41
43
  },
42
44
  'Ubuntu' => {
43
45
  '14.04' => 5..6,
@@ -45,14 +47,23 @@ module PuppetMetadata
45
47
  '18.04' => 5..7,
46
48
  '20.04' => 6..7,
47
49
  },
48
- }
50
+ }.freeze
49
51
 
50
- def self.find_base_os(os)
51
- COMPATIBLE.fetch(os, os)
52
- end
52
+ PUPPET_RUBY_VERSIONS = {
53
+ 4 => '2.1',
54
+ 5 => '2.4',
55
+ 6 => '2.5',
56
+ 7 => '2.7',
57
+ }.freeze
58
+
59
+ class << self
60
+ def find_base_os(os)
61
+ COMPATIBLE.fetch(os, os)
62
+ end
53
63
 
54
- def self.has_aio_build?(os, release, puppet_version)
55
- BUILDS.dig(find_base_os(os), release)&.include?(puppet_version)
64
+ def has_aio_build?(os, release, puppet_version)
65
+ BUILDS.dig(find_base_os(os), release)&.include?(puppet_version)
66
+ end
56
67
  end
57
68
  end
58
69
  end
@@ -4,62 +4,79 @@ module PuppetMetadata
4
4
  # @see https://rubygems.org/gems/beaker
5
5
  # @see https://rubygems.org/gems/beaker-hostgenerator
6
6
  class Beaker
7
- # Convert an Operating System name with a release to a Beaker setfile
8
- #
9
- # @param [String] os
10
- # The Operating System string as metadata.json knows it, which in turn is
11
- # based on Facter's operatingsystem fact.
12
- # @param [String] release The OS release
13
- # @param [Boolean] use_fqdn
14
- # Whether or not to use a FQDN, ensuring a domain
15
- # @param [Boolean, Array[String]] pidfile_workaround
16
- # Whether or not to apply the systemd PIDFile workaround. This is only
17
- # needed when the daemon uses PIDFile in its service file and using
18
- # Docker as a Beaker hypervisor. This is to work around Docker's
19
- # limitations.
20
- # When a boolean, it's applied on applicable operating systems. On arrays
21
- # it's applied only when os is included in the provided array.
22
- #
23
- # @return [nil] If no setfile is available
24
- # @return [Array<(String, String)>] The beaker setfile description with a readable name
25
- def self.os_release_to_setfile(os, release, use_fqdn: false, pidfile_workaround: false)
26
- return unless os_supported?(os)
7
+ # These images have an older systemd, which they work with
8
+ # PIDFile parameter
9
+ PIDFILE_COMPATIBLE_IMAGES = {
10
+ 'CentOS' => {
11
+ '7' => 'centos:7.6.1810',
12
+ },
13
+ 'Ubuntu' => {
14
+ '16.04' => 'ubuntu:xenial-20191212',
15
+ },
16
+ }.freeze
27
17
 
28
- name = "#{os.downcase}#{release.tr('.', '')}-64"
18
+ # There is no CentOS 8 image that works with PIDFile in systemd
19
+ # unit files
20
+ PIDFILE_INCOMPATIBLE = {
21
+ 'CentOS' => ['8'],
22
+ }.freeze
23
+ class << self
24
+ # Convert an Operating System name with a release to a Beaker setfile
25
+ #
26
+ # @param [String] os
27
+ # The Operating System string as metadata.json knows it, which in turn is
28
+ # based on Facter's operatingsystem fact.
29
+ # @param [String] release The OS release
30
+ # @param [Boolean] use_fqdn
31
+ # Whether or not to use a FQDN, ensuring a domain
32
+ # @param [Boolean, Array[String]] pidfile_workaround
33
+ # Whether or not to apply the systemd PIDFile workaround. This is only
34
+ # needed when the daemon uses PIDFile in its service file and using
35
+ # Docker as a Beaker hypervisor. This is to work around Docker's
36
+ # limitations.
37
+ # When a boolean, it's applied on applicable operating systems. On arrays
38
+ # it's applied only when os is included in the provided array.
39
+ #
40
+ # @return [nil] If no setfile is available
41
+ # @return [Array<(String, String)>] The beaker setfile description with a readable name
42
+ def os_release_to_setfile(os, release, use_fqdn: false, pidfile_workaround: false)
43
+ return unless os_supported?(os)
29
44
 
30
- options = {}
31
- options[:hostname] = "#{name}.example.com" if use_fqdn
45
+ name = "#{os.downcase}#{release.tr('.', '')}-64"
32
46
 
33
- # Docker messes up cgroups and modern systemd can't deal with that when
34
- # PIDFile is used.
35
- if pidfile_workaround && (!pidfile_workaround.is_a?(Array) || pidfile_workaround.include?(os))
36
- case os
37
- when 'CentOS'
38
- case release
39
- when '7'
40
- options[:image] = 'centos:7.6.1810'
41
- when '8'
42
- # There is no CentOS 8 image that works with PIDFile in systemd
43
- # unit files
44
- return
47
+ options = {}
48
+ options[:hostname] = "#{name}.example.com" if use_fqdn
49
+
50
+ # Docker messes up cgroups and some systemd versions can't deal with
51
+ # that when PIDFile is used.
52
+ if pidfile_workaround?(pidfile_workaround, os)
53
+ return if PIDFILE_INCOMPATIBLE[os]&.include?(release)
54
+
55
+ if (image = PIDFILE_COMPATIBLE_IMAGES.dig(os, release))
56
+ options[:image] = image
45
57
  end
46
- when 'Ubuntu'
47
- options[:image] = 'ubuntu:xenial-20191212' if release == '16.04'
48
58
  end
59
+
60
+ human_name = "#{os} #{release}"
61
+
62
+ [build_setfile(name, options), human_name]
49
63
  end
50
64
 
51
- setfile = name
52
- setfile += "{#{options.map { |key, value| "#{key}=#{value}" }.join(',')}}" if options.any?
65
+ # Return whether a Beaker setfile can be generated for the given OS
66
+ # @param [String] os The operating system
67
+ def os_supported?(os)
68
+ ['CentOS', 'Fedora', 'Debian', 'Ubuntu'].include?(os)
69
+ end
53
70
 
54
- human_name = "#{os} #{release}"
71
+ private
55
72
 
56
- [setfile, human_name]
57
- end
73
+ def pidfile_workaround?(pidfile_workaround, os)
74
+ pidfile_workaround && (!pidfile_workaround.is_a?(Array) || pidfile_workaround.include?(os))
75
+ end
58
76
 
59
- # Return whether a Beaker setfile can be generated for the given OS
60
- # @param [String] os The operating system
61
- def self.os_supported?(os)
62
- ['CentOS', 'Fedora', 'Debian', 'Ubuntu'].include?(os)
77
+ def build_setfile(name, options)
78
+ "#{name}#{options.any? ? "{#{options.map { |key, value| "#{key}=#{value}" }.join(',')}}" : ''}"
79
+ end
63
80
  end
64
81
  end
65
82
  end
@@ -13,7 +13,7 @@ module PuppetMetadata
13
13
  beaker_setfiles: beaker_setfiles(beaker_use_fqdn, beaker_pidfile_workaround),
14
14
  puppet_major_versions: puppet_major_versions,
15
15
  puppet_unit_test_matrix: puppet_unit_test_matrix,
16
- github_action_test_matrix: github_action_test_matrix,
16
+ github_action_test_matrix: github_action_test_matrix(use_fqdn: beaker_use_fqdn, pidfile_workaround: beaker_pidfile_workaround),
17
17
  }
18
18
  end
19
19
 
@@ -42,7 +42,7 @@ module PuppetMetadata
42
42
 
43
43
  def puppet_unit_test_matrix
44
44
  metadata.puppet_major_versions.sort.reverse.map do |puppet|
45
- ruby = puppet_ruby_version(puppet)
45
+ ruby = PuppetMetadata::AIO::PUPPET_RUBY_VERSIONS[puppet]
46
46
  next unless ruby
47
47
 
48
48
  {
@@ -52,24 +52,8 @@ module PuppetMetadata
52
52
  end.compact
53
53
  end
54
54
 
55
- def puppet_ruby_version(puppet_version)
56
- case puppet_version
57
- when 4
58
- '2.1'
59
- when 5
60
- '2.4'
61
- when 6
62
- '2.5'
63
- when 7
64
- '2.7'
65
- end
66
- end
67
-
68
-
69
55
  def github_action_test_matrix(use_fqdn: false, pidfile_workaround: false)
70
- matrix_include = []
71
-
72
- metadata.operatingsystems.each do |os, releases|
56
+ metadata.operatingsystems.each_with_object([]) do |(os, releases), matrix_include|
73
57
  releases&.each do |release|
74
58
  puppet_major_versions.each do |puppet_version|
75
59
  next unless AIO.has_aio_build?(os, release, puppet_version[:value])
@@ -87,8 +71,6 @@ module PuppetMetadata
87
71
  end
88
72
  end
89
73
  end
90
-
91
- matrix_include
92
74
  end
93
75
  end
94
76
  end
@@ -11,7 +11,8 @@ module PuppetMetadata
11
11
  EOL_DATES = {
12
12
  # https://endoflife.software/operating-systems/linux/centos
13
13
  'CentOS' => {
14
- '8' => '2029-05-31',
14
+ '9' => nil, # EOL Date is not yet announced.
15
+ '8' => '2024-05-31',
15
16
  '7' => '2024-06-30',
16
17
  '6' => '2020-11-30',
17
18
  '5' => '2017-03-31',
@@ -22,9 +23,10 @@ module PuppetMetadata
22
23
  # https://wiki.debian.org/DebianReleases
23
24
  'Debian' => {
24
25
  # TODO: EOL is standard support, not the extended life cycle
26
+ '11' => nil, # '~2024',
25
27
  '10' => nil, # '~2022',
26
- '9' => nil, # '~2020',
27
- '8' => '2018-06-06',
28
+ '9' => '2020-07-06',
29
+ '8' => '2018-06-17',
28
30
  '7' => '2016-04-26',
29
31
  '6' => '2015-05-31',
30
32
  '5' => '2012-02-06',
@@ -113,47 +115,49 @@ module PuppetMetadata
113
115
  '5.04' => '2006-10-31',
114
116
  '4.10' => '2006-04-30',
115
117
  },
116
- }
118
+ }.freeze
117
119
 
118
- # Return the EOL date for the given operating system release
119
- # @param [String] operatingsystem
120
- # The operating system
121
- # @param [String] release
122
- # The major version of the operating system
123
- # @return [optional, Date]
124
- # The EOL date for the given operating system release. Nil is returned
125
- # when the either when the OS, the release or the EOL date is unknown
126
- def self.eol_date(operatingsystem, release)
127
- releases = EOL_DATES[operatingsystem]
128
- return unless releases
129
- date = releases[release]
130
- return unless date
131
- Date.parse(date)
132
- end
120
+ class << self
121
+ # Return the EOL date for the given operating system release
122
+ # @param [String] operatingsystem
123
+ # The operating system
124
+ # @param [String] release
125
+ # The major version of the operating system
126
+ # @return [optional, Date]
127
+ # The EOL date for the given operating system release. Nil is returned
128
+ # when the either when the OS, the release or the EOL date is unknown
129
+ def eol_date(operatingsystem, release)
130
+ releases = EOL_DATES[operatingsystem]
131
+ return unless releases
132
+ date = releases[release]
133
+ return unless date
134
+ Date.parse(date)
135
+ end
133
136
 
134
- # Return whether the given operating system release is EOL at the given
135
- # date
136
- #
137
- # @param [String] operatingsystem
138
- # The operating system
139
- # @param [String] release
140
- # The major version of the operating system
141
- # @return [Boolean]
142
- # The EOL date for the given operating system release. Nil is returned
143
- # when the either when the OS, the release or the EOL date is unknown
144
- def self.eol?(operatingsystem, release, at = nil)
145
- date = eol_date(operatingsystem, release)
146
- date && date < (at || Date.today)
147
- end
137
+ # Return whether the given operating system release is EOL at the given
138
+ # date
139
+ #
140
+ # @param [String] operatingsystem
141
+ # The operating system
142
+ # @param [String] release
143
+ # The major version of the operating system
144
+ # @return [Boolean]
145
+ # The EOL date for the given operating system release. Nil is returned
146
+ # when the either when the OS, the release or the EOL date is unknown
147
+ def eol?(operatingsystem, release, at = nil)
148
+ date = eol_date(operatingsystem, release)
149
+ date && date < (at || Date.today)
150
+ end
148
151
 
149
- # Return the latest known release for a given operating system
150
- # @param [String] operatingsystem The operating system
151
- # @return [optional, String]
152
- # The latest major release for the given operating system, if any is
153
- # known
154
- def self.latest_release(operatingsystem)
155
- releases = EOL_DATES[operatingsystem]
156
- releases&.keys&.max_by { |release| Gem::Version.new(release) }
152
+ # Return the latest known release for a given operating system
153
+ # @param [String] operatingsystem The operating system
154
+ # @return [optional, String]
155
+ # The latest major release for the given operating system, if any is
156
+ # known
157
+ def latest_release(operatingsystem)
158
+ releases = EOL_DATES[operatingsystem]
159
+ releases&.keys&.max_by { |release| Gem::Version.new(release) }
160
+ end
157
161
  end
158
162
  end
159
163
  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: 1.0.0
4
+ version: 1.3.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: 2021-08-11 00:00:00.000000000 Z
12
+ date: 2022-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metadata-json-lint
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  requirements: []
156
- rubygems_version: 3.2.22
156
+ rubygems_version: 3.2.32
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: Data structures for the Puppet Metadata