Skip to content

Commit b608826

Browse files
committed
Fixes #37291 - Use explicit java on RH with Puppetserver 8
The /usr/bin/java file may point to any version. This changes the logic to determine the java version (unless explicitly specified) dynamically based on the puppetserver version and the OS.
1 parent b524354 commit b608826

File tree

7 files changed

+55
-14
lines changed

7 files changed

+55
-14
lines changed

manifests/init.pp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@
305305
# $server_envs_target:: Indicates that $envs_dir should be
306306
# a symbolic link to this target
307307
#
308-
# $server_jvm_java_bin:: Set the default java to use.
308+
# $server_jvm_java_bin:: Set the default java to use. If unspecified, it will be derived from the Puppet version.
309309
#
310310
# $server_jvm_config:: Specify the puppetserver jvm configuration file.
311311
#
@@ -714,7 +714,7 @@
714714
Optional[Stdlib::Absolutepath] $server_puppet_basedir = $puppet::params::server_puppet_basedir,
715715
Enum['current', 'future'] $server_parser = $puppet::params::server_parser,
716716
Variant[Undef, Enum['unlimited'], Pattern[/^\d+[smhdy]?$/]] $server_environment_timeout = $puppet::params::server_environment_timeout,
717-
String $server_jvm_java_bin = $puppet::params::server_jvm_java_bin,
717+
Optional[Stdlib::Absolutepath] $server_jvm_java_bin = undef,
718718
String $server_jvm_config = $puppet::params::server_jvm_config,
719719
Pattern[/^[0-9]+[kKmMgG]$/] $server_jvm_min_heap_size = $puppet::params::server_jvm_min_heap_size,
720720
Pattern[/^[0-9]+[kKmMgG]$/] $server_jvm_max_heap_size = $puppet::params::server_jvm_max_heap_size,

manifests/params.pp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,6 @@
350350
default => '/etc/default/puppetserver',
351351
}
352352

353-
$server_jvm_java_bin = '/usr/bin/java'
354353
$server_jvm_extra_args = undef
355354
$server_jvm_cli_args = undef
356355

manifests/server.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@
420420
Optional[Stdlib::Absolutepath] $puppet_basedir = $puppet::server_puppet_basedir,
421421
Enum['current', 'future'] $parser = $puppet::server_parser,
422422
Variant[Undef, Enum['unlimited'], Pattern[/^\d+[smhdy]?$/]] $environment_timeout = $puppet::server_environment_timeout,
423-
String $jvm_java_bin = $puppet::server_jvm_java_bin,
423+
Optional[Stdlib::Absolutepath] $jvm_java_bin = $puppet::server_jvm_java_bin,
424424
String $jvm_config = $puppet::server_jvm_config,
425425
Pattern[/^[0-9]+[kKmMgG]$/] $jvm_min_heap_size = $puppet::server_jvm_min_heap_size,
426426
Pattern[/^[0-9]+[kKmMgG]$/] $jvm_max_heap_size = $puppet::server_jvm_max_heap_size,

manifests/server/install.pp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,19 @@
4141
install_options => $puppet::package_install_options,
4242
}
4343

44+
# Puppetserver 8 on EL 8 relies on JRE 11 or 17. This prefers JRE 17 by installing it first
45+
if (
46+
!$puppet::server::jvm_java_bin and
47+
$facts['os']['family'] == 'RedHat' and $facts['os']['release']['major'] == '8' and
48+
# This doesn't use server_version because we have 2 mechanisms to set the version
49+
versioncmp(pick($puppet::server::puppetserver_version, $facts['puppetversion']), '8.0.0') >= 0
50+
) {
51+
# EL 8 packaging can install either Java 17 or Java 11, but we prefer Java 17
52+
stdlib::ensure_packages(['jre-17-headless'])
53+
54+
Package['jre-17-headless'] -> Package[$server_package]
55+
}
56+
4457
if $puppet::server::manage_user {
4558
Package[$server_package] -> User[$puppet::server::user]
4659
}

manifests/server/puppetserver.pp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
class puppet::server::puppetserver (
7676
Optional[Pattern[/^[\d]\.[\d]+\.[\d]+$/]] $puppetserver_version = $puppet::server::puppetserver_version,
7777
String $config = $puppet::server::jvm_config,
78-
String $java_bin = $puppet::server::jvm_java_bin,
78+
Optional[Stdlib::Absolutepath] $java_bin = $puppet::server::jvm_java_bin,
7979
Variant[String, Array[String]] $jvm_extra_args = $puppet::server::real_jvm_extra_args,
8080
Optional[String] $jvm_cli_args = $puppet::server::jvm_cli_args,
8181
Pattern[/^[0-9]+[kKmMgG]$/] $jvm_min_heap_size = $puppet::server::jvm_min_heap_size,
@@ -163,6 +163,27 @@
163163

164164
$puppetserver_package = pick($puppet::server::package, 'puppetserver')
165165

166+
if $java_bin {
167+
$_java_bin = $java_bin
168+
} elsif versioncmp($real_puppetserver_version, '8.0.0') >= 0 {
169+
# Follows logic that https://github.com/puppetlabs/ezbake/pull/627 suggests, but takes it a
170+
# step further by also ensuring EL 8 has Java 17
171+
$_java_bin = case $facts['os']['family'] {
172+
'RedHat': {
173+
$facts['os']['release']['major'] ? {
174+
/^([89])$/ => '/usr/lib/jvm/jre-17/bin/java',
175+
'7' => '/usr/lib/jvm/jre-11/bin/java',
176+
default => '/usr/bin/java'
177+
}
178+
}
179+
default: {
180+
'/usr/bin/java'
181+
}
182+
}
183+
} else {
184+
$_java_bin = '/usr/bin/java'
185+
}
186+
166187
$jvm_heap_arr = ["-Xms${jvm_min_heap_size}", "-Xmx${jvm_max_heap_size}"]
167188
if $disable_fips {
168189
$jvm_cmd_arr = $jvm_heap_arr + ['-Dcom.redhat.fips=false', $jvm_extra_args]
@@ -183,13 +204,13 @@
183204
if $jvm_cli_args {
184205
$changes = [
185206
"set JAVA_ARGS '\"${jvm_cmd}\"'",
186-
"set JAVA_BIN ${java_bin}",
207+
"set JAVA_BIN ${_java_bin}",
187208
"set JAVA_ARGS_CLI '\"${jvm_cli_args}\"'",
188209
]
189210
} else {
190211
$changes = [
191212
"set JAVA_ARGS '\"${jvm_cmd}\"'",
192-
"set JAVA_BIN ${java_bin}",
213+
"set JAVA_BIN ${_java_bin}",
193214
]
194215
}
195216
augeas { 'puppet::server::puppetserver::jvm':

spec/acceptance/puppetserver_latest_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ class { 'puppet':
2525
end
2626
end
2727

28+
if ENV['BEAKER_PUPPET_COLLECTION'] != 'puppet7' && fact('os.family') == 'RedHat' && ['8', '9'].include?(fact('os.release.major'))
29+
describe 'JRE version' do
30+
it { expect(package('java-17-openjdk-headless')).to be_installed }
31+
it { expect(package('java-11-openjdk-headless')).not_to be_installed }
32+
it { expect(file('/etc/sysconfig/puppetserver')).to be_file.and(have_attributes(content: include('JAVA_BIN=/usr/lib/jvm/jre-17/bin/java'))) }
33+
end
34+
end
35+
2836
# This is broken on Ubuntu Focal
2937
# https://github.com/theforeman/puppet-puppet/issues/832
3038
describe 'server_max_open_files', unless: unsupported_puppetserver || fact('os.release.major') == '20.04' do

spec/classes/puppet_server_puppetserver_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
let(:facts) do
99
facts
1010
end
11-
11+
let(:java_bin) { %r{^set JAVA_BIN /usr/(lib/jvm/jre-1[17]/)?bin/java$} }
1212
let(:auth_conf) { '/etc/custom/puppetserver/conf.d/auth.conf' }
1313
let(:puppetserver_conf) { '/etc/custom/puppetserver/conf.d/puppetserver.conf' }
1414

@@ -58,15 +58,15 @@
5858
if facts[:os]['family'] == 'RedHat' and facts[:os]['release']['major'] != '7'
5959
it {
6060
should contain_augeas('puppet::server::puppetserver::jvm')
61-
.with_changes(['set JAVA_ARGS \'"-Xms2G -Xmx2G -Dcom.redhat.fips=false"\'', 'set JAVA_BIN /usr/bin/java'])
61+
.with_changes(['set JAVA_ARGS \'"-Xms2G -Xmx2G -Dcom.redhat.fips=false"\'', java_bin])
6262
.with_context('/files/etc/default/puppetserver')
6363
.with_incl('/etc/default/puppetserver')
6464
.with_lens('Shellvars.lns')
6565
}
6666
else
6767
it {
6868
should contain_augeas('puppet::server::puppetserver::jvm')
69-
.with_changes(['set JAVA_ARGS \'"-Xms2G -Xmx2G"\'', 'set JAVA_BIN /usr/bin/java'])
69+
.with_changes(['set JAVA_ARGS \'"-Xms2G -Xmx2G"\'', java_bin])
7070
.with_context('/files/etc/default/puppetserver')
7171
.with_incl('/etc/default/puppetserver')
7272
.with_lens('Shellvars.lns')
@@ -390,7 +390,7 @@
390390
should contain_augeas('puppet::server::puppetserver::jvm')
391391
.with_changes([
392392
'set JAVA_ARGS \'"-Xms2G -Xmx2G -Dcom.redhat.fips=false -XX:foo=bar -XX:bar=foo"\'',
393-
'set JAVA_BIN /usr/bin/java'
393+
java_bin
394394
])
395395
.with_context('/files/etc/default/puppetserver')
396396
.with_incl('/etc/default/puppetserver')
@@ -401,7 +401,7 @@
401401
should contain_augeas('puppet::server::puppetserver::jvm')
402402
.with_changes([
403403
'set JAVA_ARGS \'"-Xms2G -Xmx2G -XX:foo=bar -XX:bar=foo"\'',
404-
'set JAVA_BIN /usr/bin/java'
404+
java_bin
405405
])
406406
.with_context('/files/etc/default/puppetserver')
407407
.with_incl('/etc/default/puppetserver')
@@ -417,7 +417,7 @@
417417
should contain_augeas('puppet::server::puppetserver::jvm')
418418
.with_changes([
419419
'set JAVA_ARGS \'"-Xms2G -Xmx2G -Dcom.redhat.fips=false"\'',
420-
'set JAVA_BIN /usr/bin/java',
420+
java_bin,
421421
'set JAVA_ARGS_CLI \'"-Djava.io.tmpdir=/var/puppettmp"\''
422422
])
423423
.with_context('/files/etc/default/puppetserver')
@@ -429,7 +429,7 @@
429429
should contain_augeas('puppet::server::puppetserver::jvm')
430430
.with_changes([
431431
'set JAVA_ARGS \'"-Xms2G -Xmx2G"\'',
432-
'set JAVA_BIN /usr/bin/java',
432+
java_bin,
433433
'set JAVA_ARGS_CLI \'"-Djava.io.tmpdir=/var/puppettmp"\''
434434
])
435435
.with_context('/files/etc/default/puppetserver')

0 commit comments

Comments
 (0)