puppet_metadata 1.1.1 → 1.2.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: 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