From b4119681e47eb1dc5324e8d21b948e99c8926f85 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 29 Feb 2024 12:01:22 +0100 Subject: [PATCH 1/3] Refactor params to have less duplication This introduces variables to make it easier to support multiple versions. --- manifests/params.pp | 57 +++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index cfbaa289..75c81292 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -11,27 +11,23 @@ 'AlmaLinux', 'Rocky', 'RedHat', 'CentOS', 'OracleLinux', 'Scientific', 'OEL', 'SLC', 'CloudLinux': { # See PR#160 / c8e46b5 for why >= 6.3 < 7.1 if (versioncmp($facts['os']['release']['full'], '7.1') < 0) { - $jdk_package = 'java-1.7.0-openjdk-devel' - $jre_package = 'java-1.7.0-openjdk' - $java_home = '/usr/lib/jvm/java-1.7.0/' - } - else { - $jdk_package = 'java-1.8.0-openjdk-devel' - $jre_package = 'java-1.8.0-openjdk' - $java_home = '/usr/lib/jvm/java-1.8.0/' + $openjdk = '1.7.0' + } else { + $openjdk = '1.8.0' } + $jdk_package = "java-${openjdk}-openjdk-devel" + $jre_package = "java-${openjdk}-openjdk" + $java_home = "/usr/lib/jvm/java-${openjdk}/" } 'Fedora': { if (versioncmp($facts['os']['release']['full'], '21') < 0) { - $jdk_package = 'java-1.7.0-openjdk-devel' - $jre_package = 'java-1.7.0-openjdk' - $java_home = "/usr/lib/jvm/java-1.7.0-openjdk-${facts['os']['architecture']}/" - } - else { - $jdk_package = 'java-1.8.0-openjdk-devel' - $jre_package = 'java-1.8.0-openjdk' - $java_home = "/usr/lib/jvm/java-1.8.0-openjdk-${facts['os']['architecture']}/" + $openjdk = '1.7.0' + } else { + $openjdk = '1.8.0' } + $jdk_package = "java-${openjdk}-openjdk-devel" + $jre_package = "java-${openjdk}-openjdk" + $java_home = "/usr/lib/jvm/java-${openjdk}-openjdk-${facts['os']['architecture']}/" } 'Amazon': { $jdk_package = 'java-1.7.0-openjdk-devel' @@ -63,23 +59,24 @@ } case $facts['os']['release']['major'] { '10', '11', '18.04', '18.10', '19.04', '19.10', '20.04', '22.04': { - $java = { - 'jdk' => { - 'package' => 'openjdk-11-jdk', - 'alternative' => "java-1.11.0-openjdk-${openjdk_architecture}", - 'alternative_path' => "/usr/lib/jvm/java-1.11.0-openjdk-${openjdk_architecture}/bin/java", - 'java_home' => "/usr/lib/jvm/java-1.11.0-openjdk-${openjdk_architecture}/", - }, - 'jre' => { - 'package' => 'openjdk-11-jre-headless', - 'alternative' => "java-1.11.0-openjdk-${openjdk_architecture}", - 'alternative_path' => "/usr/lib/jvm/java-1.11.0-openjdk-${openjdk_architecture}/bin/java", - 'java_home' => "/usr/lib/jvm/java-1.11.0-openjdk-${openjdk_architecture}/", - }, - } + $openjdk = 11 } default: { fail("unsupported release ${facts['os']['release']['major']}") } } + $java = { + 'jdk' => { + 'package' => "openjdk-${openjdk}-jdk", + 'alternative' => "java-1.${openjdk}.0-openjdk-${openjdk_architecture}", + 'alternative_path' => "/usr/lib/jvm/java-1.${openjdk}.0-openjdk-${openjdk_architecture}/bin/java", + 'java_home' => "/usr/lib/jvm/java-1.${openjdk}.0-openjdk-${openjdk_architecture}/", + }, + 'jre' => { + 'package' => "openjdk-${openjdk}-jre-headless", + 'alternative' => "java-1.${openjdk}.0-openjdk-${openjdk_architecture}", + 'alternative_path' => "/usr/lib/jvm/java-1.${openjdk}.0-openjdk-${openjdk_architecture}/bin/java", + 'java_home' => "/usr/lib/jvm/java-1.${openjdk}.0-openjdk-${openjdk_architecture}/", + }, + } } 'OpenBSD': { $java = { From bd970c95817fca74eb8cdb211e1eac7072b52fad Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 29 Feb 2024 12:05:51 +0100 Subject: [PATCH 2/3] Reduce duplication in spec tests by using nesting This sets up common contexts for an OS and then runs the tests within those. This avoids duplicating the fact definitions. --- spec/classes/java_spec.rb | 59 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/spec/classes/java_spec.rb b/spec/classes/java_spec.rb index 09906916..632987d5 100644 --- a/spec/classes/java_spec.rb +++ b/spec/classes/java_spec.rb @@ -10,49 +10,54 @@ it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.8.0/') } end - context 'when selecting jdk for Debian Buster (10.0)' do + context 'on Debian Buster (10.0)' do let(:facts) { { os: { family: 'Debian', name: 'Debian', lsb: { distcodename: 'buster' }, release: { major: '10' }, architecture: 'amd64' } } } - let(:params) { { 'distribution' => 'jdk' } } - it { is_expected.to contain_package('java').with_name('openjdk-11-jdk') } - it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } - end + context 'when selecting jdk' do + let(:params) { { 'distribution' => 'jdk' } } - context 'when selecting jre for Debian Buster (10.0)' do - let(:facts) { { os: { family: 'Debian', name: 'Debian', lsb: { distcodename: 'buster' }, release: { major: '10' }, architecture: 'amd64' } } } - let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('openjdk-11-jdk') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + end + + context 'when selecting jre' do + let(:params) { { 'distribution' => 'jre' } } - it { is_expected.to contain_package('java').with_name('openjdk-11-jre-headless') } - it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + it { is_expected.to contain_package('java').with_name('openjdk-11-jre-headless') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + end end - context 'when selecting jdk for Ubuntu Bionic (18.04)' do + context 'on Ubuntu Bionic (18.04)' do let(:facts) { { os: { family: 'Debian', name: 'Ubuntu', lsb: { distcodename: 'bionic' }, release: { major: '18.04' }, architecture: 'amd64' } } } - let(:params) { { 'distribution' => 'jdk' } } - it { is_expected.to contain_package('java').with_name('openjdk-11-jdk') } - it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } - end + context 'when selecting jdk' do + let(:params) { { 'distribution' => 'jdk' } } - context 'when selecting jre for Ubuntu Bionic (18.04)' do - let(:facts) { { os: { family: 'Debian', name: 'Ubuntu', lsb: { distcodename: 'bionic' }, release: { major: '18.04' }, architecture: 'amd64' } } } - let(:params) { { 'distribution' => 'jre' } } + it { is_expected.to contain_package('java').with_name('openjdk-11-jdk') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + end + + context 'when selecting jre' do + let(:params) { { 'distribution' => 'jre' } } - it { is_expected.to contain_package('java').with_name('openjdk-11-jre-headless') } - it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + it { is_expected.to contain_package('java').with_name('openjdk-11-jre-headless') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64/') } + end end - context 'when selecting openjdk for Oracle Linux' do + context 'on Oracle Linux 7.0' do let(:facts) { { os: { family: 'RedHat', name: 'OracleLinux', release: { full: '7.0' }, architecture: 'x86_64' } } } - it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } - end + context 'when selecting openjdk' do + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk-devel') } + end - context 'when selecting passed value for Oracle Linux' do - let(:facts) { { os: { family: 'RedHat', name: 'OracleLinux', release: { full: '7.0' }, architecture: 'x86_64' } } } - let(:params) { { 'distribution' => 'jre' } } + context 'when selecting passed value for Oracle Linux' do + let(:params) { { 'distribution' => 'jre' } } - it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } + it { is_expected.to contain_package('java').with_name('java-1.7.0-openjdk') } + end end context 'when selecting passed value for Scientific Linux' do From 00c7eb14802f1658a24d842d8f8b9717ca2b7f5b Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 29 Feb 2024 12:03:21 +0100 Subject: [PATCH 3/3] Support Debian 12 --- manifests/params.pp | 3 +++ metadata.json | 3 ++- spec/classes/java_spec.rb | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 75c81292..a301347f 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -58,6 +58,9 @@ default => $facts['os']['architecture'] } case $facts['os']['release']['major'] { + '12': { + $openjdk = 17 + } '10', '11', '18.04', '18.10', '19.04', '19.10', '20.04', '22.04': { $openjdk = 11 } diff --git a/metadata.json b/metadata.json index b50a98a0..529e45f8 100644 --- a/metadata.json +++ b/metadata.json @@ -43,7 +43,8 @@ "operatingsystem": "Debian", "operatingsystemrelease": [ "10", - "11" + "11", + "12" ] }, { diff --git a/spec/classes/java_spec.rb b/spec/classes/java_spec.rb index 632987d5..9908af9c 100644 --- a/spec/classes/java_spec.rb +++ b/spec/classes/java_spec.rb @@ -28,6 +28,24 @@ end end + context 'on Debian Bookworm (12)' do + let(:facts) { { os: { family: 'Debian', name: 'Debian', lsb: { distcodename: 'bookworm' }, release: { major: '12' }, architecture: 'amd64' } } } + + context 'when selecting jdk' do + let(:params) { { 'distribution' => 'jdk' } } + + it { is_expected.to contain_package('java').with_name('openjdk-17-jdk') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64/') } + end + + context 'when selecting jre' do + let(:params) { { 'distribution' => 'jre' } } + + it { is_expected.to contain_package('java').with_name('openjdk-17-jre-headless') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64/') } + end + end + context 'on Ubuntu Bionic (18.04)' do let(:facts) { { os: { family: 'Debian', name: 'Ubuntu', lsb: { distcodename: 'bionic' }, release: { major: '18.04' }, architecture: 'amd64' } } }