diff --git a/manifests/init.pp b/manifests/init.pp index eb079ab..9b45bf3 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -53,15 +53,11 @@ class java( Optional[String] $java_alternative_path = undef, Optional[String] $java_home = undef ) { - include java::params + include ::java::params - if has_key($java::params::java, $distribution) { - $default_package_name = $java::params::java[$distribution]['package'] - $default_alternative = $java::params::java[$distribution]['alternative'] - $default_alternative_path = $java::params::java[$distribution]['alternative_path'] - $default_java_home = $java::params::java[$distribution]['java_home'] - } else { - fail("Java distribution ${distribution} is not supported.") + $default_package_name = has_key($java::params::java, $distribution) ? { + false => undef, + default => $java::params::java[$distribution]['package'], } $use_java_package_name = $package ? { @@ -69,12 +65,17 @@ class java( default => $package, } + + ## Weird logic........ ## If $java_alternative is set, use that. ## Elsif the DEFAULT package is being used, then use $default_alternative. ## Else undef $use_java_alternative = $java_alternative ? { - undef => $use_java_package_name ? { - $default_package_name => $default_alternative, + undef => $use_java_package_name ? { + $default_package_name => has_key($java::params::java, $distribution) ? { + default => $java::params::java[$distribution]['alternative'], + false => undef, + }, default => undef, }, default => $java_alternative, @@ -82,21 +83,38 @@ class java( ## Same logic as $java_alternative above. $use_java_alternative_path = $java_alternative_path ? { - undef => $use_java_package_name ? { - $default_package_name => $default_alternative_path, + undef => $use_java_package_name ? { + $default_package_name => has_key($java::params::java, $distribution) ? { + default => $java::params::java[$distribution]['alternative_path'], + false => undef, + }, default => undef, }, default => $java_alternative_path, } $use_java_home = $java_home ? { - undef => $use_java_package_name ? { - $default_package_name => $default_java_home, + undef => $use_java_package_name ? { + $default_package_name => has_key($java::params::java, $distribution) ? { + default => $java::params::java[$distribution]['java_home'], + false => undef, + }, default => undef, }, default => $java_home, } + ## This should only be required if we did not override all the information we need. + # One of the defaults is missing and its not intentional: + if (( + $use_java_package_name == undef or $use_java_alternative == undef or + $use_java_alternative_path == undef or $use_java_home == undef + ) and ( + ! has_key($::java::params::java, $distribution) + )) { + fail("Java distribution ${distribution} is not supported. Missing default values.") + } + $jre_flag = $use_java_package_name ? { /headless/ => '--jre-headless', default => '--jre' diff --git a/spec/classes/java_spec.rb b/spec/classes/java_spec.rb index ff56262..00a4e3f 100644 --- a/spec/classes/java_spec.rb +++ b/spec/classes/java_spec.rb @@ -245,6 +245,34 @@ describe 'java', :type => :class do it { is_expected.to contain_package('java').with_name('jre') } end + describe 'custom java package' do + let(:facts) { {:osfamily => 'Debian', :operatingsystem => 'Debian', :lsbdistcodename => 'jessie', :operatingsystemrelease => '8.6', :architecture => 'amd64',} } + context 'all params provided' do + let(:params) { { + 'distribution' => 'custom', + 'package' => 'custom_jdk', + 'java_alternative' => 'java-custom_jdk', + 'java_alternative_path' => '/opt/custom_jdk/bin/java', + 'java_home' => '/opt/custom_jdk', + } } + + it { is_expected.to contain_package('java').with_name('custom_jdk') } + it { is_expected.to contain_file_line('java-home-environment').with_line('JAVA_HOME=/opt/custom_jdk') } + it { is_expected.to contain_exec('update-java-alternatives').with_command('update-java-alternatives --set java-custom_jdk --jre') } + + end + context 'missing parameters' do + let(:params) { { + 'distribution' => 'custom', + 'package' => 'custom_jdk', + } } + it do + expect { catalogue }.to raise_error Puppet::Error, /is not supported. Missing default values/ + end + end + end + + describe 'incompatible OSs' do [ {