191 lines
5.8 KiB
Puppet
191 lines
5.8 KiB
Puppet
# Defined Type java::adoptium
|
|
#
|
|
# @summary
|
|
# Install one or more versions of Adoptium Temurin OpenJDK (former AdoptOpenJDK).
|
|
#
|
|
# @param ensure
|
|
# Install or remove the package.
|
|
#
|
|
# @param version_major
|
|
# Major version which should be installed, e.g. '16' or '17'
|
|
#
|
|
# @param version_minor
|
|
# Minor version which should be installed, e.g. '0'
|
|
#
|
|
# @param version_patch
|
|
# Minor version which should be installed, e.g. '2'
|
|
#
|
|
# @param version_build
|
|
# Build version which should be installed, e.g. '07'
|
|
#
|
|
# @param proxy_server
|
|
# Specify a proxy server, with port number if needed. ie: https://example.com:8080. (passed to archive)
|
|
#
|
|
# @param proxy_type
|
|
# Proxy server type (none|http|https|ftp). (passed to archive)
|
|
#
|
|
# @param url
|
|
# Full URL
|
|
#
|
|
# @param basedir
|
|
# Directory under which the installation will occur. If not set, defaults to
|
|
# /usr/lib/jvm for Debian and /usr/java for RedHat.
|
|
#
|
|
# @param manage_basedir
|
|
# Whether to manage the basedir directory. Defaults to false.
|
|
# Note: /usr/lib/jvm is managed for Debian by default, separate from this parameter.
|
|
#
|
|
# @param manage_symlink
|
|
# Whether to manage a symlink that points to the installation directory. Defaults to false.
|
|
#
|
|
# @param symlink_name
|
|
# The name for the optional symlink in the installation directory.
|
|
#
|
|
define java::adoptium (
|
|
$ensure = 'present',
|
|
$version_major = undef,
|
|
$version_minor = undef,
|
|
$version_patch = undef,
|
|
$version_build = undef,
|
|
$proxy_server = undef,
|
|
$proxy_type = undef,
|
|
$url = undef,
|
|
$basedir = undef,
|
|
$manage_basedir = true,
|
|
$manage_symlink = false,
|
|
$symlink_name = undef,
|
|
) {
|
|
|
|
# archive module is used to download the java package
|
|
include ::archive
|
|
|
|
$install_path = "jdk-${version_major}.${version_minor}.${version_patch}+${version_build}"
|
|
|
|
# determine package type (exe/tar/rpm), destination directory based on OS
|
|
case $facts['kernel'] {
|
|
'Linux' : {
|
|
case $facts['os']['family'] {
|
|
'RedHat', 'Amazon' : {
|
|
if $basedir {
|
|
$_basedir = $basedir
|
|
} else {
|
|
$_basedir = '/usr/java'
|
|
}
|
|
}
|
|
'Debian' : {
|
|
if $basedir {
|
|
$_basedir = $basedir
|
|
} else {
|
|
$_basedir = '/usr/lib/jvm'
|
|
}
|
|
}
|
|
default : {
|
|
fail ("unsupported platform ${$facts['os']['name']}") }
|
|
}
|
|
|
|
$creates_path = "${_basedir}/${install_path}"
|
|
$os = 'linux_hotspot'
|
|
}
|
|
default : {
|
|
fail ( "unsupported platform ${$facts['kernel']}" ) }
|
|
}
|
|
|
|
# set java architecture nomenclature
|
|
$os_architecture = $facts['os']['architecture'] ? {
|
|
undef => $facts['architecture'],
|
|
default => $facts['os']['architecture']
|
|
}
|
|
|
|
case $os_architecture {
|
|
'i386' : { $arch = 'x86-32' }
|
|
'x86_64' : { $arch = 'x64' }
|
|
'amd64' : { $arch = 'x64' }
|
|
default : {
|
|
fail ("unsupported platform ${$os_architecture}")
|
|
}
|
|
}
|
|
|
|
# package name and path for download from github
|
|
#
|
|
# following are build based on this real life example full URLs:
|
|
#
|
|
# https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz
|
|
# https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_alpine-linux_hotspot_16.0.2_7.tar.gz
|
|
|
|
$package_name = "OpenJDK${version_major}U-jdk_${arch}_${os}_${version_major}.${version_minor}.${version_patch}_${version_build}.tar.gz"
|
|
|
|
# if complete URL is provided, use this value for source in archive resource
|
|
if $url {
|
|
$source = $url
|
|
}
|
|
else {
|
|
$source = "https://github.com/adoptium/temurin${version_major}-binaries/releases/download/jdk-${version_major}.${version_minor}.${version_patch}%2B${version_build}/${package_name}"
|
|
notice ("Default source url : ${source}")
|
|
}
|
|
|
|
# full path to the installer
|
|
$destination = "/tmp/${package_name}"
|
|
notice ("Destination is ${destination}")
|
|
|
|
case $ensure {
|
|
'present' : {
|
|
archive { $destination :
|
|
ensure => present,
|
|
source => $source,
|
|
extract_path => '/tmp',
|
|
cleanup => false,
|
|
creates => $creates_path,
|
|
proxy_server => $proxy_server,
|
|
proxy_type => $proxy_type,
|
|
}
|
|
case $facts['kernel'] {
|
|
'Linux' : {
|
|
case $facts['os']['family'] {
|
|
'Debian' : {
|
|
ensure_resource('file', $_basedir, {
|
|
ensure => directory,
|
|
})
|
|
$install_requires = [Archive[$destination], File[$_basedir]]
|
|
}
|
|
default : {
|
|
$install_requires = [Archive[$destination]]
|
|
}
|
|
}
|
|
|
|
if $manage_basedir {
|
|
if (!defined(File[$_basedir])) {
|
|
file { $_basedir:
|
|
ensure => 'directory',
|
|
before => Exec["Install Adoptium Temurin java ${version_major} ${version_minor} ${version_patch} ${version_build}"],
|
|
}
|
|
}
|
|
}
|
|
|
|
exec { "Install Adoptium Temurin java ${version_major} ${version_minor} ${version_patch} ${version_build}" :
|
|
path => '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin',
|
|
command => "tar -zxf ${destination} -C ${_basedir}",
|
|
creates => $creates_path,
|
|
require => $install_requires
|
|
}
|
|
|
|
if ($manage_symlink and $symlink_name) {
|
|
file { "${_basedir}/${symlink_name}":
|
|
ensure => link,
|
|
target => $creates_path,
|
|
require => Exec["Install Adoptium Temurin java ${version_major} ${version_minor} ${version_patch} ${version_build}"],
|
|
}
|
|
}
|
|
|
|
}
|
|
default : {
|
|
fail ("unsupported platform ${$facts['kernel']}")
|
|
}
|
|
}
|
|
}
|
|
default : {
|
|
notice ("Action ${ensure} not supported.")
|
|
}
|
|
}
|
|
|
|
}
|