module-postgresql/manifests/params.pp
Ken Barber f6fb18a5b3 Fix up and add some tests for unknown OS patch
This patch just adds some new tests for the unknown OS patch, and cleans up
some existing tests to look for the new warning message.

Also, change the warning message for $osfamily and manage_package_repo to
reflect the parameter at fault.

Signed-off-by: Ken Barber <ken@bob.sh>
2013-06-06 20:53:36 +01:00

239 lines
9 KiB
Puppet

# Class: postgresql::params
#
# The postgresql configuration settings.
#
# Parameters:
#
# Actions:
#
# Requires:
#
# Sample Usage:
#
# TODO: add real docs
# This class allows you to use a newer version of postgres, rather than your
# system's default version.
#
# If you want to do that, note that it is important that you use the '->',
# or a before/require metaparameter to make sure that the `params`
# class is evaluated before any of the other classes in the module.
#
# Also note that this class includes the ability to automatically manage
# the yumrepo resource. If you'd prefer to manage the repo yourself, simply pass
# 'false' or omit the 'manage_repo' parameter--it defaults to 'false'. You will
# still need to use the 'params' class to specify the postgres version
# number, though, in order for the other classes to be able to find the
# correct paths to the postgres dirs.
class postgresql::params(
$version = $::postgres_default_version,
$manage_package_repo = false,
$package_source = undef,
$locale = undef,
$charset = 'UTF8',
$custom_datadir = undef,
$custom_confdir = undef,
$custom_bindir = undef,
$custom_client_package_name = undef,
$custom_server_package_name = undef,
$custom_contrib_package_name = undef,
$custom_devel_package_name = undef,
$custom_java_package_name = undef,
$custom_service_name = undef,
$custom_user = undef,
$custom_group = undef,
$run_initdb = undef
) {
$user = pick($custom_user, 'postgres')
$group = pick($custom_group, 'postgres')
$ip_mask_deny_postgres_user = '0.0.0.0/0'
$ip_mask_allow_all_users = '127.0.0.1/32'
$listen_addresses = 'localhost'
$ipv4acls = []
$ipv6acls = []
# TODO: figure out a way to make this not platform-specific
$manage_redhat_firewall = false
if ($manage_package_repo) {
case $::osfamily {
'RedHat': {
$rh_pkg_source = pick($package_source, 'yum.postgresql.org')
case $rh_pkg_source {
'yum.postgresql.org': {
class { 'postgresql::package_source::yum_postgresql_org':
version => $version
}
}
default: {
fail("Unsupported package source '${rh_pkg_source}' for ${::osfamily} OS family. Currently the only supported source is 'yum.postgresql.org'")
}
}
}
'Debian': {
class { 'postgresql::package_source::apt_postgresql_org': }
}
default: {
fail("Unsupported osfamily for manage_package_repo: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} currently only supports managing repos for osfamily RedHat and Debian")
}
}
}
# This is a bit hacky, but if the puppet nodes don't have pluginsync enabled,
# they will fail with a not-so-helpful error message. Here we are explicitly
# verifying that the custom fact exists (which implies that pluginsync is
# enabled and succeeded). If not, we fail with a hint that tells the user
# that pluginsync might not be enabled. Ideally this would be handled directly
# in puppet.
if ($::postgres_default_version == undef) {
fail "No value for postgres_default_version facter fact; it's possible that you don't have pluginsync enabled."
}
case $::operatingsystem {
default: {
$service_provider = undef
}
}
# Amazon Linux's OS Family is 'Linux', operating system 'Amazon'.
case $::osfamily {
'RedHat', 'Linux': {
$needs_initdb = pick($run_initdb, true)
$firewall_supported = true
$persist_firewall_command = '/sbin/iptables-save > /etc/sysconfig/iptables'
if $version == $::postgres_default_version {
$client_package_name = pick($custom_client_package_name, 'postgresql')
$server_package_name = pick($custom_server_package_name, 'postgresql-server')
$contrib_package_name = pick($custom_contrib_package_name,'postgresql-contrib')
$devel_package_name = pick($custom_devel_package_name, 'postgresql-devel')
$java_package_name = pick($custom_java_package_name, 'postgresql-jdbc')
$service_name = pick($custom_service_name, 'postgresql')
$bindir = pick($custom_bindir, '/usr/bin')
$datadir = pick($custom_datadir, '/var/lib/pgsql/data')
$confdir = pick($custom_confdir, $datadir)
} else {
$version_parts = split($version, '[.]')
$package_version = "${version_parts[0]}${version_parts[1]}"
$client_package_name = pick($custom_client_package_name, "postgresql${package_version}")
$server_package_name = pick($custom_server_package_name, "postgresql${package_version}-server")
$contrib_package_name = pick($custom_contrib_package_name,"postgresql${package_version}-contrib")
$devel_package_name = pick($custom_devel_package_name, "postgresql${package_version}-devel")
$java_package_name = pick($custom_java_package_name, "postgresql${package_version}-jdbc")
$service_name = pick($custom_service_name, "postgresql-${version}")
$bindir = pick($custom_bindir, "/usr/pgsql-${version}/bin")
$datadir = pick($custom_datadir, "/var/lib/pgsql/${version}/data")
$confdir = pick($custom_confdir, $datadir)
}
$service_status = undef
$python_package_name="python-psycopg2"
}
'Debian': {
$firewall_supported = false
# TODO: not exactly sure yet what the right thing to do for Debian/Ubuntu is.
#$persist_firewall_command = '/sbin/iptables-save > /etc/iptables/rules.v4'
if $manage_package_repo == true {
$needs_initdb = pick($run_initdb, true)
$service_name = pick($custom_service_name, 'postgresql')
} else {
$needs_initdb = pick($run_initdb, false)
case $::operatingsystem {
'Debian': {
$service_name = pick($custom_service_name, 'postgresql')
}
'Ubuntu': {
# thanks, ubuntu
if($::lsbmajdistrelease == '10') {
$service_name = pick($custom_service_name, "postgresql-${version}")
} else {
$service_name = pick($custom_service_name, 'postgresql')
}
}
}
}
$client_package_name = pick($custom_client_package_name, "postgresql-client-${version}")
$server_package_name = pick($custom_server_package_name, "postgresql-${version}")
$contrib_package_name = pick($custom_contrib_package_name, "postgresql-contrib-${version}")
$devel_package_name = pick($custom_devel_package_name, 'libpq-dev')
$java_package_name = pick($custom_java_package_name, 'libpostgresql-jdbc-java')
$bindir = pick($custom_bindir, "/usr/lib/postgresql/${version}/bin")
$datadir = pick($custom_datadir, "/var/lib/postgresql/${version}/main")
$confdir = pick($custom_confdir, "/etc/postgresql/${version}/main")
$service_status = "/etc/init.d/${service_name} status | /bin/egrep -q 'Running clusters: .+|online'"
$python_package_name = "python-psycopg2"
}
default: {
$err_msg_prefix = "Module ${module_name} does not provide defaults for osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}; please specify a value for ${module_name}::params::"
if ($run_initdb != undef) {
$needs_initdb = $run_initdb
} else {
fail("${err_msg_prefix}run_initdb")
}
$firewall_supported = false
if ($custom_service_name) {
$service_name = $custom_service_name
} else {
fail("${err_msg_prefix}custom_service_name")
}
if ($custom_client_package_name) {
$client_package_name = $custom_client_package_name
} else {
fail("${err_msg_prefix}custom_client_package_name")
}
if ($custom_server_package_name) {
$server_package_name = $custom_server_package_name
} else {
fail("${err_msg_prefix}custom_server_package_name")
}
$contrib_package_name = $custom_contrib_package_name
$devel_package_name = $custom_devel_package_name
$java_package_name = $custom_java_package_name
if ($custom_bindir) {
$bindir = $custom_bindir
} else {
fail("${err_msg_prefix}custom_bindir")
}
if ($custom_datadir) {
$datadir = $custom_datadir
} else {
fail("${err_msg_prefix}custom_datadir")
}
if ($custom_confdir) {
$confdir = $custom_confdir
} else {
fail("${err_msg_prefix}custom_confdir")
}
$service_status = undef
}
}
$initdb_path = "${bindir}/initdb"
$createdb_path = "${bindir}/createdb"
$psql_path = "${bindir}/psql"
$pg_hba_conf_path = "${confdir}/pg_hba.conf"
$postgresql_conf_path = "${confdir}/postgresql.conf"
}