Refactor and reduce

The module in its previous incarnation was unnecessarily hard to read
and use. This commit applies the "params" pattern in order to more
clearly deliniate between logical variable selection and actual
declarative configuration.
This commit is contained in:
Reid Vandewiele
2013-04-04 19:32:42 -07:00
parent ff80bc7f79
commit f7a95a1e0e
7 changed files with 68 additions and 208 deletions

View File

@@ -4,111 +4,40 @@
#
# Parameters:
#
# [*distribution*]
# The java distribution to install. Can be one of "jdk" or "jre".
#
# [*version*]
# The version of java to install. By default, this module simply ensures
# that java is present, and does not require a specific version.
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
# [Remember: No empty lines between comments and class definition]
class java(
$distribution = 'jdk',
$version = 'present'
) {
include java::params
validate_re($distribution, '^jdk$|^jre$|^java.*$')
validate_re($version, 'installed|^[._0-9a-zA-Z:-]+$')
validate_re($version, 'present|installed|latest|^[._0-9a-zA-Z:-]+$')
anchor { 'java::begin': }
anchor { 'java::end': }
case $::osfamily {
'RedHat': {
if ($operatingsystem == 'Fedora') {
class { 'java::package_redhat':
version => $version,
distribution => 'java',
require => Anchor['java::begin'],
before => Anchor['java::end'],
case $distribution {
default: { fail('distribution must be one of jdk, jre') }
'jdk': {
$java_package_name = $java::params::jdk_package
}
} else {
class { 'java::package_redhat':
version => $version,
distribution => $distribution,
require => Anchor['java::begin'],
before => Anchor['java::end'],
'jre': {
$java_package_name = $java::params::jre_package
}
}
}
'Debian': {
case $::lsbdistcodename {
squeeze, lucid: {
$distribution_debian = $distribution ? {
jdk => 'openjdk-6-jdk',
jre => 'openjdk-6-jre-headless',
}
}
wheezy, precise: {
$distribution_debian = $distribution ? {
jdk => 'openjdk-7-jdk',
jre => 'openjdk-7-jre-headless',
}
}
default: {
fail("operatingsystem distribution ${::lsbdistcodename} is not supported")
}
}
class { 'java::package_debian':
version => $version,
distribution => $distribution_debian,
require => Anchor['java::begin'],
before => Anchor['java::end'],
}
}
'Solaris': {
$distribution_solaris = $distribution ? {
jdk => 'developer/java/jdk-7',
jre => 'runtime/java/jre-7',
}
class { 'java::package_solaris':
version => $version,
distribution => $distribution_solaris,
require => Anchor['java::begin'],
before => Anchor['java::end'],
}
}
'Suse': {
$distribution_suse = $distribution ? {
jdk => 'java-1_6_0-ibm-devel',
jre => 'java-1_6_0-ibm',
}
class { 'java::package_suse':
version => $version,
distribution => $distribution_suse,
require => Anchor['java::begin'],
before => Anchor['java::end'],
}
}
default: {
fail("osfamily ${::osfamily} is not supported")
}
package { 'java':
ensure => $version,
name => $java_package_name,
}
}

View File

@@ -1,27 +0,0 @@
# Class: java::package_debian
#
# Implementation class of the Java package
# for debian based systems.
#
# This class is not meant to be used by the end user
# of the module. It is an implementation class
# of the composite Class[java]
#
# Parameters:
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
class java::package_debian(
$version,
$distribution
) {
package { 'java':
ensure => $version,
name => $distribution,
}
}

View File

@@ -1,28 +0,0 @@
# Class: java::package_redhat
#
# Implementation class of the Java package
# for redhat based systems.
#
# This class is not meant to be used by the end user
# of the module. It is an implementation class
# of the composite Class[java]
#
# Parameters:
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
class java::package_redhat(
$version,
$distribution
) {
package { 'java':
ensure => $version,
name => $distribution,
}
}

View File

@@ -1,27 +0,0 @@
# Class: java::package_solaris
#
# Implementation class of the Java package
# for Solaris based systems.
#
# This class is not meant to be used by the end user
# of the module. It is an implementation class
# of the composite Class[java]
#
# Parameters:
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
class java::package_solaris(
$version,
$distribution
) {
package { 'java':
ensure => $version,
name => $distribution,
}
}

View File

@@ -1,27 +0,0 @@
# Class: java::package_suse
#
# Implementation class of the Java package
# for SUSE based systems.
#
# This class is not meant to be used by the end user
# of the module. It is an implementation class
# of the composite Class[java]
#
# Parameters:
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
class java::package_suse(
$version,
$distribution
) {
package { 'java':
ensure => $version,
name => $distribution,
}
}

46
manifests/params.pp Normal file
View File

@@ -0,0 +1,46 @@
# Class: java::params
#
# This class sets the value of two variables, jdk_package and jre_package,
# appropriate for the client system in question.
#
class java::params {
case $::osfamily {
default: { fail("unsupported platform ${::osfamily}") }
'RedHat': {
case $::operatingsystem {
default: { fail("unsupported os ${::operatingsystem}") }
'RedHat', 'CentOS': {
$jdk_package = 'java-1.7.0-openjdk-devel'
$jre_package = 'java-1.7.0-openjdk'
}
'Fedora': {
$jdk_package = 'java'
$jre_package = 'java'
}
}
}
'Debian': {
case $::lsbdistcodename {
default: { fail("unsupported release ${::lsbdistcodename}") }
'squeeze', 'lucid': {
$jdk_package = 'openjdk-6-jdk'
$jre_package = 'openjdk-6-jre-headless'
}
'wheezy', 'precise': {
$jdk_package = 'openjdk-7-jdk'
$jre_package = 'openjdk-7-jre-headless'
}
}
}
'Solaris': {
$jdk_package = 'developer/java/jdk-7'
$jre_package = 'runtime/java/jre-7'
}
'Suse': {
$jdk_package = 'java-1_6_0-ibm-devel'
$jre_package = 'java-1_6_0-ibm'
}
}
}

View File

@@ -1,10 +1,4 @@
node default {
notify { "alpha": } ->
class { 'java':
distribution => 'jdk',
version => 'latest',
} ->
notify { "omega": }
}