puppet_metadata 1.1.1 → 1.2.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: e8eb631a9aedc17f9f1e298507ab1b181b6e5923b412fcfb4e169cdff9820b12
4
- data.tar.gz: e991cabd97835e963c08ab86dcf86455d3e898400032584d64cf40a1251af986
3
+ metadata.gz: a51387ced797e16745c927b7a839fc3192ff47fc7269a0729ccf5ebebfe85bb6
4
+ data.tar.gz: 9d0187e002a2cbc5d90c080405370efb979bdd2a3eec1be295c9567ab20639cb
5
5
  SHA512:
6
- metadata.gz: b7b644b7fd564ae6a4fe57ba11becd6ffc242e9744362fc882412425783f0af70464f99da7dd30eaa9cb6da447ce4c85267797605f92365606bcbf52d48c8210
7
- data.tar.gz: 6cd2fa3fd5d41ef5fe01dc91143e31873e98237da6757df2d3500c4d44b9b7406f78f48f0c69fc22905773d27ebd76852611e4208fe911e382348d214505c0ff
6
+ metadata.gz: 73b3e503a1331f92f98a4b0ebcf9c6fa5c69474edee3cdecafd2899647728d40b8494802042c02422cfdbdee33a7573cd1d1c0dba7443ccae14ecf0031d43433
7
+ data.tar.gz: 3201c83529d017649552d63833e774971692cb59d0eca654e59bd08265f0287a08da5f3b994f1e9ad72e14e1b50cfd9a3959950cee3056c433ccc0988400e441
@@ -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,9 +7,9 @@ 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,
@@ -35,7 +35,7 @@ module PuppetMetadata
35
35
  # deb-based
36
36
  'Debian' => {
37
37
  '7' => [5],
38
- '8' => 5..7,
38
+ '8' => 5..6,
39
39
  '9' => 5..7,
40
40
  '10' => 5..7,
41
41
  '11' => 6..7,
@@ -46,14 +46,23 @@ module PuppetMetadata
46
46
  '18.04' => 5..7,
47
47
  '20.04' => 6..7,
48
48
  },
49
- }
49
+ }.freeze
50
50
 
51
- def self.find_base_os(os)
52
- COMPATIBLE.fetch(os, os)
53
- end
51
+ PUPPET_RUBY_VERSIONS = {
52
+ 4 => '2.1',
53
+ 5 => '2.4',
54
+ 6 => '2.5',
55
+ 7 => '2.7',
56
+ }.freeze
57
+
58
+ class << self
59
+ def find_base_os(os)
60
+ COMPATIBLE.fetch(os, os)
61
+ end
54
62
 
55
- def self.has_aio_build?(os, release, puppet_version)
56
- BUILDS.dig(find_base_os(os), release)&.include?(puppet_version)
63
+ def has_aio_build?(os, release, puppet_version)
64
+ BUILDS.dig(find_base_os(os), release)&.include?(puppet_version)
65
+ end
57
66
  end
58
67
  end
59
68
  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 modern systemd can't deal with that when
51
+ # 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
@@ -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
@@ -114,47 +114,49 @@ module PuppetMetadata
114
114
  '5.04' => '2006-10-31',
115
115
  '4.10' => '2006-04-30',
116
116
  },
117
- }
117
+ }.freeze
118
118
 
119
- # Return the EOL date for the given operating system release
120
- # @param [String] operatingsystem
121
- # The operating system
122
- # @param [String] release
123
- # The major version of the operating system
124
- # @return [optional, Date]
125
- # The EOL date for the given operating system release. Nil is returned
126
- # when the either when the OS, the release or the EOL date is unknown
127
- def self.eol_date(operatingsystem, release)
128
- releases = EOL_DATES[operatingsystem]
129
- return unless releases
130
- date = releases[release]
131
- return unless date
132
- Date.parse(date)
133
- end
119
+ class << self
120
+ # Return the EOL date for the given operating system release
121
+ # @param [String] operatingsystem
122
+ # The operating system
123
+ # @param [String] release
124
+ # The major version of the operating system
125
+ # @return [optional, Date]
126
+ # The EOL date for the given operating system release. Nil is returned
127
+ # when the either when the OS, the release or the EOL date is unknown
128
+ def eol_date(operatingsystem, release)
129
+ releases = EOL_DATES[operatingsystem]
130
+ return unless releases
131
+ date = releases[release]
132
+ return unless date
133
+ Date.parse(date)
134
+ end
134
135
 
135
- # Return whether the given operating system release is EOL at the given
136
- # date
137
- #
138
- # @param [String] operatingsystem
139
- # The operating system
140
- # @param [String] release
141
- # The major version of the operating system
142
- # @return [Boolean]
143
- # The EOL date for the given operating system release. Nil is returned
144
- # when the either when the OS, the release or the EOL date is unknown
145
- def self.eol?(operatingsystem, release, at = nil)
146
- date = eol_date(operatingsystem, release)
147
- date && date < (at || Date.today)
148
- end
136
+ # Return whether the given operating system release is EOL at the given
137
+ # date
138
+ #
139
+ # @param [String] operatingsystem
140
+ # The operating system
141
+ # @param [String] release
142
+ # The major version of the operating system
143
+ # @return [Boolean]
144
+ # The EOL date for the given operating system release. Nil is returned
145
+ # when the either when the OS, the release or the EOL date is unknown
146
+ def eol?(operatingsystem, release, at = nil)
147
+ date = eol_date(operatingsystem, release)
148
+ date && date < (at || Date.today)
149
+ end
149
150
 
150
- # Return the latest known release for a given operating system
151
- # @param [String] operatingsystem The operating system
152
- # @return [optional, String]
153
- # The latest major release for the given operating system, if any is
154
- # known
155
- def self.latest_release(operatingsystem)
156
- releases = EOL_DATES[operatingsystem]
157
- releases&.keys&.max_by { |release| Gem::Version.new(release) }
151
+ # Return the latest known release for a given operating system
152
+ # @param [String] operatingsystem The operating system
153
+ # @return [optional, String]
154
+ # The latest major release for the given operating system, if any is
155
+ # known
156
+ def latest_release(operatingsystem)
157
+ releases = EOL_DATES[operatingsystem]
158
+ releases&.keys&.max_by { |release| Gem::Version.new(release) }
159
+ end
158
160
  end
159
161
  end
160
162
  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.1.1
4
+ version: 1.2.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-21 00:00:00.000000000 Z
12
+ date: 2021-10-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metadata-json-lint