Puppet Class: java

Defined in:
manifests/init.pp

Summary

This module manages the Java runtime package

Overview

Parameters:

  • distribution (String) (defaults to: 'jdk')

    The java distribution to install. Can be one of “jdk” or “jre”, or other platform-specific options where there are multiple implementations available (eg: OpenJDK vs Oracle JDK).

  • version (Pattern[/present|installed|latest|^[.+_0-9a-zA-Z:~-]+$/]) (defaults to: 'present')

    The version of java to install. By default, this module simply ensures that java is present, and does not require a specific version.

  • package (Optional[String]) (defaults to: undef)

    The name of the java package. This is configurable in case a non-standard java package is desired.

  • package_options (Optional[Array]) (defaults to: undef)

    Array of strings to pass installation options to the ‘package’ Puppet resource. Options available depend on the ‘package’ provider for the target OS.

  • java_alternative (Optional[String]) (defaults to: undef)

    The name of the java alternative to use on Debian systems. “update-java-alternatives -l” will show which choices are available. If you specify a particular package, you will almost always also want to specify which java_alternative to choose. If you set this, you also need to set the path below.

  • java_alternative_path (Optional[String]) (defaults to: undef)

    The path to the “java” command on Debian systems. Since the alternatives system makes it difficult to verify which alternative is actually enabled, this is required to ensure the correct JVM is enabled.

  • java_home (Optional[String]) (defaults to: undef)

    The path to where the JRE is installed. This will be set as an environment variable.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'manifests/init.pp', line 38

class java (
  String                                                    $distribution           = 'jdk',
  Pattern[/present|installed|latest|^[.+_0-9a-zA-Z:~-]+$/]  $version                = 'present',
  Optional[String]                                          $package                = undef,
  Optional[Array]                                           $package_options        = undef,
  Optional[String]                                          $java_alternative       = undef,
  Optional[String]                                          $java_alternative_path  = undef,
  Optional[String]                                          $java_home              = undef
) {
  contain java::params

  $default_package_name = has_key($java::params::java, $distribution) ? {
    false   => undef,
    default => $java::params::java[$distribution]['package'],
  }

  $use_java_package_name = $package ? {
    undef   => $default_package_name,
    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 => has_key($java::params::java, $distribution) ? {
        default => $java::params::java[$distribution]['alternative'],
        false => undef,
      },
      default               => undef,
    },
    default => $java_alternative,
  }

  ## Same logic as $java_alternative above.
  $use_java_alternative_path = $java_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 => 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'
  }

  if $facts['os']['family'] == 'Debian' {
    # Needed for update-java-alternatives
    package { 'java-common':
      ensure => present,
      before => Class['java::config'],
    }
  }

  package { 'java':
    ensure          => $version,
    install_options => $package_options,
    name            => $use_java_package_name,
  }
  -> class { 'java::config': }
}