Skip to content

Commit 81ae579

Browse files
authored
Merge pull request #1303 from ekohl/el9-fix
Add Red Hat Enterprise Linux 9 support
2 parents 833faa8 + c0b674e commit 81ae579

File tree

7 files changed

+88
-73
lines changed

7 files changed

+88
-73
lines changed

manifests/globals.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@
183183
},
184184
'Amazon' => '9.2',
185185
default => $facts['os']['release']['major'] ? {
186+
'9' => '13',
186187
'8' => '10',
187188
'7' => '9.2',
188189
'6' => '8.4',

manifests/params.pp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -82,28 +82,12 @@
8282
$postgresql_conf_mode = pick($postgresql_conf_mode, '0600')
8383
}
8484

85-
case $facts['os']['name'] {
86-
'Amazon': {
87-
$service_reload = "service ${service_name} reload"
88-
$service_status = "service ${service_name} status"
89-
}
90-
91-
# RHEL 5 uses SysV init, RHEL 6 uses upstart, RHEL 7+ uses systemd.
92-
'RedHat', 'CentOS', 'Scientific', 'OracleLinux': {
93-
if versioncmp($facts['os']['release']['major'], '7') >= 0 {
94-
$service_reload = "systemctl reload ${service_name}"
95-
$service_status = "systemctl status ${service_name}"
96-
} else {
97-
$service_reload = "service ${service_name} reload"
98-
$service_status = "service ${service_name} status"
99-
}
100-
}
101-
102-
# Default will catch Fedora which uses systemd
103-
default: {
104-
$service_reload = "systemctl reload ${service_name}"
105-
$service_status = "systemctl status ${service_name}"
106-
}
85+
if pick($service_provider, $facts['service_provider']) == 'systemd' {
86+
$service_reload = "systemctl reload ${service_name}"
87+
$service_status = "systemctl status ${service_name}"
88+
} else {
89+
$service_reload = "service ${service_name} reload"
90+
$service_status = "service ${service_name} status"
10791
}
10892

10993
$psql_path = pick($psql_path, "${bindir}/psql")

manifests/server/config.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@
181181

182182
# RedHat-based systems hardcode some PG* variables in the init script, and need to be overriden
183183
# in /etc/sysconfig/pgsql/postgresql. Create a blank file so we can manage it with augeas later.
184-
if ($facts['os']['family'] == 'RedHat') and ($facts['os']['release']['major'] !~ /^(7|8)$/) and ($facts['os']['name'] != 'Fedora') {
184+
if $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'], '7') < 0 {
185185
file { '/etc/sysconfig/pgsql/postgresql':
186186
ensure => file,
187187
replace => false,

manifests/server/config_entry.pp

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -106,48 +106,45 @@
106106
before => Postgresql_conf[$name],
107107
}
108108
}
109-
}
110-
if $facts['os']['family'] == 'RedHat' {
111-
if ! ($facts['os']['release']['major'] in ['7', '8'] or $facts['os']['name'] == 'Fedora') {
112-
if $name == 'port' {
113-
# We need to force postgresql to stop before updating the port
114-
# because puppet becomes confused and is unable to manage the
115-
# service appropriately.
116-
exec { "postgresql_stop_${name}":
117-
command => "service ${postgresql::server::service_name} stop",
118-
onlyif => "service ${postgresql::server::service_name} status",
119-
unless => "grep 'PGPORT=${value}' /etc/sysconfig/pgsql/postgresql",
120-
path => '/sbin:/bin:/usr/bin:/usr/local/bin',
121-
require => File['/etc/sysconfig/pgsql/postgresql'],
122-
}
123-
-> augeas { 'override PGPORT in /etc/sysconfig/pgsql/postgresql':
124-
lens => 'Shellvars.lns',
125-
incl => '/etc/sysconfig/pgsql/postgresql',
126-
context => '/files/etc/sysconfig/pgsql/postgresql',
127-
changes => "set PGPORT ${value}",
128-
require => File['/etc/sysconfig/pgsql/postgresql'],
129-
notify => Class['postgresql::server::service'],
130-
before => Class['postgresql::server::reload'],
131-
}
132-
} elsif $name == 'data_directory' {
133-
# We need to force postgresql to stop before updating the data directory
134-
# otherwise init script breaks
135-
exec { "postgresql_${name}":
136-
command => "service ${postgresql::server::service_name} stop",
137-
onlyif => "service ${postgresql::server::service_name} status",
138-
unless => "grep 'PGDATA=${value}' /etc/sysconfig/pgsql/postgresql",
139-
path => '/sbin:/bin:/usr/bin:/usr/local/bin',
140-
require => File['/etc/sysconfig/pgsql/postgresql'],
141-
}
142-
-> augeas { 'override PGDATA in /etc/sysconfig/pgsql/postgresql':
143-
lens => 'Shellvars.lns',
144-
incl => '/etc/sysconfig/pgsql/postgresql',
145-
context => '/files/etc/sysconfig/pgsql/postgresql',
146-
changes => "set PGDATA ${value}",
147-
require => File['/etc/sysconfig/pgsql/postgresql'],
148-
notify => Class['postgresql::server::service'],
149-
before => Class['postgresql::server::reload'],
150-
}
109+
} elsif $facts['os']['family'] == 'RedHat' and versioncmp($facts['os']['release']['major'], '7') < 0 {
110+
if $name == 'port' {
111+
# We need to force postgresql to stop before updating the port
112+
# because puppet becomes confused and is unable to manage the
113+
# service appropriately.
114+
exec { "postgresql_stop_${name}":
115+
command => "service ${postgresql::server::service_name} stop",
116+
onlyif => "service ${postgresql::server::service_name} status",
117+
unless => "grep 'PGPORT=${value}' /etc/sysconfig/pgsql/postgresql",
118+
path => '/sbin:/bin:/usr/bin:/usr/local/bin',
119+
require => File['/etc/sysconfig/pgsql/postgresql'],
120+
}
121+
-> augeas { 'override PGPORT in /etc/sysconfig/pgsql/postgresql':
122+
lens => 'Shellvars.lns',
123+
incl => '/etc/sysconfig/pgsql/postgresql',
124+
context => '/files/etc/sysconfig/pgsql/postgresql',
125+
changes => "set PGPORT ${value}",
126+
require => File['/etc/sysconfig/pgsql/postgresql'],
127+
notify => Class['postgresql::server::service'],
128+
before => Class['postgresql::server::reload'],
129+
}
130+
} elsif $name == 'data_directory' {
131+
# We need to force postgresql to stop before updating the data directory
132+
# otherwise init script breaks
133+
exec { "postgresql_${name}":
134+
command => "service ${postgresql::server::service_name} stop",
135+
onlyif => "service ${postgresql::server::service_name} status",
136+
unless => "grep 'PGDATA=${value}' /etc/sysconfig/pgsql/postgresql",
137+
path => '/sbin:/bin:/usr/bin:/usr/local/bin',
138+
require => File['/etc/sysconfig/pgsql/postgresql'],
139+
}
140+
-> augeas { 'override PGDATA in /etc/sysconfig/pgsql/postgresql':
141+
lens => 'Shellvars.lns',
142+
incl => '/etc/sysconfig/pgsql/postgresql',
143+
context => '/files/etc/sysconfig/pgsql/postgresql',
144+
changes => "set PGDATA ${value}",
145+
require => File['/etc/sysconfig/pgsql/postgresql'],
146+
notify => Class['postgresql::server::service'],
147+
before => Class['postgresql::server::reload'],
151148
}
152149
}
153150
}

metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"operatingsystemrelease": [
2828
"6",
2929
"7",
30-
"8"
30+
"8",
31+
"9"
3132
]
3233
},
3334
{

provision.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ release_checks_6:
3737
- redhat-6-x86_64
3838
- redhat-7-x86_64
3939
- redhat-8-x86_64
40+
- redhat-9-x86_64
4041
- centos-6-x86_64
4142
- centos-7-x86_64
4243
- centos-8-x86_64
@@ -58,6 +59,7 @@ release_checks_7:
5859
images:
5960
- redhat-7-x86_64
6061
- redhat-8-x86_64
62+
- redhat-9-x86_64
6163
- centos-7-x86_64
6264
- centos-8-x86_64
6365
- oracle-7-x86_64

spec/spec_helper_local.rb

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,32 +92,62 @@ def param(type, title, param)
9292
end
9393
end
9494

95+
# This duplicates spec_helper but we need it for add_custom_fact
96+
include RspecPuppetFacts
97+
# Rough conversion of grepping in the puppet source:
98+
# grep defaultfor lib/puppet/provider/service/*.rb
99+
# See https://github.com/voxpupuli/voxpupuli-test/blob/master/lib/voxpupuli/test/facts.rb
100+
add_custom_fact :service_provider, ->(_os, facts) do
101+
case facts[:osfamily].downcase
102+
when 'archlinux'
103+
'systemd'
104+
when 'darwin'
105+
'launchd'
106+
when 'debian'
107+
'systemd'
108+
when 'freebsd'
109+
'freebsd'
110+
when 'gentoo'
111+
'openrc'
112+
when 'openbsd'
113+
'openbsd'
114+
when 'redhat'
115+
facts[:operatingsystemrelease].to_i >= 7 ? 'systemd' : 'redhat'
116+
when 'suse'
117+
facts[:operatingsystemmajrelease].to_i >= 12 ? 'systemd' : 'redhat'
118+
when 'windows'
119+
'windows'
120+
else
121+
'init'
122+
end
123+
end
124+
95125
shared_context 'Debian 9' do
96-
let(:facts) { on_supported_os['debian-9-x86_64'].merge(service_provider: 'systemd') }
126+
let(:facts) { on_supported_os['debian-9-x86_64'] }
97127
end
98128

99129
shared_context 'Debian 10' do
100-
let(:facts) { on_supported_os['debian-10-x86_64'].merge(service_provider: 'systemd') }
130+
let(:facts) { on_supported_os['debian-10-x86_64'] }
101131
end
102132

103133
shared_context 'Debian 11' do
104-
let(:facts) { on_supported_os['debian-11-x86_64'].merge(service_provider: 'systemd') }
134+
let(:facts) { on_supported_os['debian-11-x86_64'] }
105135
end
106136

107137
shared_context 'Ubuntu 18.04' do
108-
let(:facts) { on_supported_os['ubuntu-18.04-x86_64'].merge(service_provider: 'systemd') }
138+
let(:facts) { on_supported_os['ubuntu-18.04-x86_64'] }
109139
end
110140

111141
shared_context 'RedHat 6' do
112-
let(:facts) { on_supported_os['redhat-6-x86_64'].merge(service_provider: 'redhat') }
142+
let(:facts) { on_supported_os['redhat-6-x86_64'] }
113143
end
114144

115145
shared_context 'RedHat 7' do
116-
let(:facts) { on_supported_os['redhat-7-x86_64'].merge(service_provider: 'systemd') }
146+
let(:facts) { on_supported_os['redhat-7-x86_64'] }
117147
end
118148

119149
shared_context 'RedHat 8' do
120-
let(:facts) { on_supported_os['redhat-8-x86_64'].merge(service_provider: 'systemd') }
150+
let(:facts) { on_supported_os['redhat-8-x86_64'] }
121151
end
122152

123153
shared_context 'Fedora 33' do

0 commit comments

Comments
 (0)