X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fpostgresql%2Fmanifests%2Fparams.pp;h=51c45ef3d6fa6746d9ece419e5a9d7e68cd48986;hb=a69999e580f8b3abd12446c2d6ad59e517651813;hp=7ace592f6725f14910cfd9931b2ba41c118baae7;hpb=e7b6b352165009c385c52fcfe5a1055690dbfa4b;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/postgresql/manifests/params.pp b/3rdparty/modules/postgresql/manifests/params.pp index 7ace592f6..51c45ef3d 100644 --- a/3rdparty/modules/postgresql/manifests/params.pp +++ b/3rdparty/modules/postgresql/manifests/params.pp @@ -1,244 +1,320 @@ -# 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_plperl_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 = [] - $manage_pg_hba_conf = true - # 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 - } - } +# PRIVATE CLASS: do not use directly +class postgresql::params inherits postgresql::globals { + $version = $postgresql::globals::globals_version + $postgis_version = $postgresql::globals::globals_postgis_version + $listen_addresses = undef + $port = 5432 + $log_line_prefix = undef + $ip_mask_deny_postgres_user = '0.0.0.0/0' + $ip_mask_allow_all_users = '127.0.0.1/32' + $ipv4acls = [] + $ipv6acls = [] + $encoding = $postgresql::globals::encoding + $locale = $postgresql::globals::locale + $data_checksums = $postgresql::globals::data_checksums + $timezone = $postgresql::globals::timezone + $service_ensure = 'running' + $service_enable = true + $service_manage = true + $service_restart_on_change = true + $service_provider = $postgresql::globals::service_provider + $manage_pg_hba_conf = pick($manage_pg_hba_conf, true) + $manage_pg_ident_conf = pick($manage_pg_ident_conf, true) + $manage_recovery_conf = pick($manage_recovery_conf, false) + $package_ensure = 'present' + $module_workdir = pick($module_workdir,'/tmp') # 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') - $plperl_package_name = pick($custom_plperl_package_name, 'postgresql-plperl') - $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) + $link_pg_config = true + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') + $needs_initdb = pick($needs_initdb, true) + $version_parts = split($version, '[.]') + $package_version = "${version_parts[0]}${version_parts[1]}" + + if $version == $postgresql::globals::default_version and $::operatingsystem != 'Amazon' { + $client_package_name = pick($client_package_name, 'postgresql') + $server_package_name = pick($server_package_name, 'postgresql-server') + $contrib_package_name = pick($contrib_package_name,'postgresql-contrib') + $devel_package_name = pick($devel_package_name, 'postgresql-devel') + $java_package_name = pick($java_package_name, 'postgresql-jdbc') + $docs_package_name = pick($docs_package_name, 'postgresql-docs') + $plperl_package_name = pick($plperl_package_name, 'postgresql-plperl') + $plpython_package_name = pick($plpython_package_name, 'postgresql-plpython') + $service_name = pick($service_name, 'postgresql') + $bindir = pick($bindir, '/usr/bin') + $datadir = $::operatingsystem ? { + 'Amazon' => pick($datadir, "/var/lib/pgsql${package_version}/data"), + default => pick($datadir, '/var/lib/pgsql/data'), + } + $confdir = pick($confdir, $datadir) + } else { + $client_package_name = pick($client_package_name, "postgresql${package_version}") + $server_package_name = pick($server_package_name, "postgresql${package_version}-server") + $contrib_package_name = pick($contrib_package_name,"postgresql${package_version}-contrib") + $devel_package_name = pick($devel_package_name, "postgresql${package_version}-devel") + $java_package_name = pick($java_package_name, "postgresql${package_version}-jdbc") + $docs_package_name = pick($docs_package_name, "postgresql${package_version}-docs") + $plperl_package_name = pick($plperl_package_name, "postgresql${package_version}-plperl") + $plpython_package_name = pick($plpython_package_name, "postgresql${package_version}-plpython") + $service_name = $::operatingsystem ? { + 'Amazon' => pick($service_name, "postgresql${version_parts[0]}${version_parts[1]}"), + default => pick($service_name, "postgresql-${version}"), + } + $bindir = $::operatingsystem ? { + 'Amazon' => pick($bindir, '/usr/bin'), + default => pick($bindir, "/usr/pgsql-${version}/bin"), + } + $datadir = $::operatingsystem ? { + 'Amazon' => pick($datadir, "/var/lib/pgsql${package_version}/data"), + default => pick($datadir, "/var/lib/pgsql/${version}/data"), + } + $confdir = pick($confdir, $datadir) + } + $psql_path = pick($psql_path, "${bindir}/psql") + + $service_status = $service_status + $service_reload = "service ${service_name} reload" + $perl_package_name = pick($perl_package_name, 'perl-DBD-Pg') + $python_package_name = pick($python_package_name, 'python-psycopg2') + + if $postgresql::globals::postgis_package_name { + $postgis_package_name = $postgresql::globals::postgis_package_name + } elsif $::operatingsystemrelease =~ /^5\./ { + $postgis_package_name = 'postgis' + } elsif $postgis_version and versioncmp($postgis_version, '2') < 0 { + $postgis_package_name = "postgis${package_version}" } 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") - $plperl_package_name = pick($custom_plperl_package_name, "postgresql${package_version}-plperl") - $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) + $postgis_package_name = "postgis2_${package_version}" } + } - $service_status = undef - $python_package_name="python-psycopg2" + 'Archlinux': { + $link_pg_config = true + $needs_initdb = pick($needs_initdb, true) + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') + + # Archlinux doesn't have a client-package but has a libs package which + # pulls in postgresql server + $client_package_name = pick($client_package_name, 'postgresql') + $server_package_name = pick($server_package_name, 'postgresql-libs') + $java_package_name = pick($java_package_name, 'postgresql-jdbc') + # Archlinux doesn't have develop packages + $devel_package_name = pick($devel_package_name, 'postgresql-devel') + # Archlinux does have postgresql-contrib but it isn't maintained + $contrib_package_name = pick($contrib_package_name,'undef') + # Archlinux postgresql package provides plperl + $plperl_package_name = pick($plperl_package_name, 'undef') + $plpython_package_name = pick($plpython_package_name, 'undef') + $service_name = pick($service_name, 'postgresql') + $bindir = pick($bindir, '/usr/bin') + $datadir = pick($datadir, '/var/lib/postgres/data') + $confdir = pick($confdir, $datadir) + $psql_path = pick($psql_path, "${bindir}/psql") + + $service_status = $service_status + $service_reload = "systemctl reload ${service_name}" + $python_package_name = pick($python_package_name, 'python-psycopg2') + # Archlinux does not have a perl::DBD::Pg package + $perl_package_name = pick($perl_package_name, 'undef') } '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' + $link_pg_config = false + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') - if $manage_package_repo == true { - $needs_initdb = pick($run_initdb, true) - $service_name = pick($custom_service_name, 'postgresql') + if $postgresql::globals::manage_package_repo == true { + $needs_initdb = pick($needs_initdb, true) + $service_name = pick($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') - } - } + $needs_initdb = pick($needs_initdb, false) + $service_name = $::operatingsystem ? { + 'Debian' => pick($service_name, 'postgresql'), + 'Ubuntu' => $::lsbmajdistrelease ? { + /^10/ => pick($service_name, "postgresql-${version}"), + default => pick($service_name, 'postgresql'), + }, + default => undef } } - $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" - $plperl_package_name = "postgresql-plperl-${version}" - } - - 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 + $client_package_name = pick($client_package_name, "postgresql-client-${version}") + $server_package_name = pick($server_package_name, "postgresql-${version}") + $contrib_package_name = pick($contrib_package_name, "postgresql-contrib-${version}") + if $postgis_version and versioncmp($postgis_version, '2') < 0 { + $postgis_package_name = pick($postgis_package_name, "postgresql-${version}-postgis") } else { - fail("${err_msg_prefix}run_initdb") + $postgis_package_name = pick($postgis_package_name, "postgresql-${version}-postgis-${postgis_version}") } - - $firewall_supported = false - - if ($custom_service_name) { - $service_name = $custom_service_name - } else { - fail("${err_msg_prefix}custom_service_name") + $devel_package_name = pick($devel_package_name, 'libpq-dev') + $java_package_name = $::operatingsystem ? { + 'Debian' => $::operatingsystemrelease ? { + /^6/ => pick($java_package_name, 'libpg-java'), + default => pick($java_package_name, 'libpostgresql-jdbc-java'), + }, + default => pick($java_package_name, 'libpostgresql-jdbc-java'), } - - if ($custom_client_package_name) { - $client_package_name = $custom_client_package_name + $perl_package_name = pick($perl_package_name, 'libdbd-pg-perl') + $plperl_package_name = pick($plperl_package_name, "postgresql-plperl-${version}") + $plpython_package_name = pick($plpython_package_name, "postgresql-plpython-${version}") + $python_package_name = pick($python_package_name, 'python-psycopg2') + + $bindir = pick($bindir, "/usr/lib/postgresql/${version}/bin") + $datadir = pick($datadir, "/var/lib/postgresql/${version}/main") + $confdir = pick($confdir, "/etc/postgresql/${version}/main") + if $::operatingsystem == 'Debian' and versioncmp($::operatingsystemrelease, '8.0') >= 0 { + # Jessie uses systemd + $service_status = pick($service_status, "/usr/sbin/service ${service_name}@*-main status") + } elsif $::operatingsystem == 'Ubuntu' and versioncmp($::operatingsystemrelease, '15.04') >= 0 { + # Ubuntu releases since vivid use systemd + $service_status = pick($service_status, "/usr/sbin/service ${service_name} status") } else { - fail("${err_msg_prefix}custom_client_package_name") + $service_status = pick($service_status, "/etc/init.d/${service_name} status | /bin/egrep -q 'Running clusters: .+|online'") } + $service_reload = "service ${service_name} reload" + $psql_path = pick($psql_path, '/usr/bin/psql') + } - if ($custom_server_package_name) { - $server_package_name = $custom_server_package_name - } else { - fail("${err_msg_prefix}custom_server_package_name") - } + 'Gentoo': { + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') + + $client_package_name = pick($client_package_name, 'UNSET') + $server_package_name = pick($server_package_name, 'postgresql') + $contrib_package_name = pick_default($contrib_package_name, undef) + $devel_package_name = pick_default($devel_package_name, undef) + $java_package_name = pick($java_package_name, 'jdbc-postgresql') + $perl_package_name = pick($perl_package_name, 'DBD-Pg') + $plperl_package_name = undef + $python_package_name = pick($python_package_name, 'psycopg') + + $service_name = pick($service_name, "postgresql-${version}") + $bindir = pick($bindir, "/usr/lib/postgresql-${version}/bin") + $datadir = pick($datadir, "/var/lib/postgresql/${version}_data") + $confdir = pick($confdir, "/etc/postgresql-${version}") + $service_status = pick($service_status, "systemctl status ${service_name}") + $service_reload = "systemctl reload ${service_name}" + $psql_path = pick($psql_path, "${bindir}/psql") + + $needs_initdb = pick($needs_initdb, true) + } + 'FreeBSD': { + case $version { + '96': { + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') + $datadir = pick($datadir, "/var/db/postgres/data${version}") + } + default: { + $user = pick($user, 'pgsql') + $group = pick($group, 'pgsql') + $datadir = pick($datadir, '/usr/local/pgsql/data') + } + } - $contrib_package_name = $custom_contrib_package_name - $devel_package_name = $custom_devel_package_name - $java_package_name = $custom_java_package_name + $link_pg_config = true + $client_package_name = pick($client_package_name, "databases/postgresql${version}-client") + $server_package_name = pick($server_package_name, "databases/postgresql${version}-server") + $contrib_package_name = pick($contrib_package_name, "databases/postgresql${version}-contrib") + $devel_package_name = pick($devel_package_name, 'databases/postgresql-libpqxx3') + $java_package_name = pick($java_package_name, 'databases/postgresql-jdbc') + $perl_package_name = pick($plperl_package_name, 'databases/p5-DBD-Pg') + $plperl_package_name = pick($plperl_package_name, "databases/postgresql${version}-plperl") + $python_package_name = pick($python_package_name, 'databases/py-psycopg2') + + $service_name = pick($service_name, 'postgresql') + $bindir = pick($bindir, '/usr/local/bin') + $confdir = pick($confdir, $datadir) + $service_status = pick($service_status, "/usr/local/etc/rc.d/${service_name} onestatus") + $service_reload = "service ${service_name} reload" + $psql_path = pick($psql_path, "${bindir}/psql") + + $needs_initdb = pick($needs_initdb, true) + } - if ($custom_bindir) { - $bindir = $custom_bindir - } else { - fail("${err_msg_prefix}custom_bindir") - } + 'OpenBSD': { + $user = pick($user, '_postgresql') + $group = pick($group, '_postgresql') + + $client_package_name = pick($client_package_name, 'postgresql-client') + $server_package_name = pick($server_package_name, 'postgresql-server') + $contrib_package_name = pick($contrib_package_name, 'postgresql-contrib') + $devel_package_name = pick($devel_package_name, 'postgresql-client') + $java_package_name = pick($java_package_name, 'postgresql-jdbc') + $perl_package_name = pick($perl_package_name, 'databases/p5-DBD-Pg') + $plperl_package_name = undef + $python_package_name = pick($python_package_name, 'py-psycopg2') + + $service_name = pick($service_name, 'postgresql') + $bindir = pick($bindir, '/usr/local/bin') + $datadir = pick($datadir, '/var/postgresql/data') + $confdir = pick($confdir, $datadir) + $service_status = pick($service_status, "/etc/rc.d/${service_name} check") + $service_reload = "/etc/rc.d/${service_name} reload" + $psql_path = pick($psql_path, "${bindir}/psql") + + $needs_initdb = pick($needs_initdb, true) + } - if ($custom_datadir) { - $datadir = $custom_datadir + 'Suse': { + $link_pg_config = true + $user = pick($user, 'postgres') + $group = pick($group, 'postgres') + + $client_package_name = pick($client_package_name, "postgresql${version}") + $server_package_name = pick($server_package_name, "postgresql${version}-server") + $contrib_package_name = pick($contrib_package_name, "postgresql${version}-contrib") + $devel_package_name = pick($devel_package_name, "postgresql${version}-devel") + $java_package_name = pick($java_package_name, "postgresql${version}-jdbc") + $perl_package_name = pick($plperl_package_name, 'perl-DBD-Pg') + $plperl_package_name = pick($plperl_package_name, "postgresql${version}-plperl") + $python_package_name = pick($python_package_name, 'python-psycopg2') + + $service_name = pick($service_name, 'postgresql') + $bindir = pick($bindir, "/usr/lib/postgresql${version}/bin") + $datadir = pick($datadir, '/var/lib/pgsql/data') + $confdir = pick($confdir, $datadir) + if $::operatingsystem == 'SLES' and versioncmp($::operatingsystemrelease, '11.4') <= 0 { + $service_status = pick($service_status, "/etc/init.d/${service_name} status") + $service_reload = "/etc/init.d/${service_name} reload" } else { - fail("${err_msg_prefix}custom_datadir") + $service_status = pick($service_status, "systemctl status ${service_name}") + $service_reload = "systemctl reload ${service_name}" } + $psql_path = pick($psql_path, "${bindir}/psql") - if ($custom_confdir) { - $confdir = $custom_confdir - } else { - fail("${err_msg_prefix}custom_confdir") - } + $needs_initdb = pick($needs_initdb, true) + } - $service_status = undef + default: { + $link_pg_config = true + $psql_path = pick($psql_path, "${bindir}/psql") + + # Since we can't determine defaults on our own, we rely on users setting + # parameters with the postgresql::globals class. Here we are checking + # that the mandatory minimum is set for the module to operate. + $err_prefix = "Module ${module_name} does not provide defaults for osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}; please specify a value for ${module_name}::globals::" + if ($needs_initdb == undef) { fail("${err_prefix}needs_initdb") } + if ($service_name == undef) { fail("${err_prefix}service_name") } + if ($client_package_name == undef) { fail("${err_prefix}client_package_name") } + if ($server_package_name == undef) { fail("${err_prefix}server_package_name") } + if ($bindir == undef) { fail("${err_prefix}bindir") } + if ($datadir == undef) { fail("${err_prefix}datadir") } + if ($confdir == undef) { fail("${err_prefix}confdir") } } } - $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" - + $validcon_script_path = pick($validcon_script_path, '/usr/local/bin/validate_postgresql_connection.sh') + $initdb_path = pick($initdb_path, "${bindir}/initdb") + $pg_hba_conf_path = pick($pg_hba_conf_path, "${confdir}/pg_hba.conf") + $pg_hba_conf_defaults = pick($pg_hba_conf_defaults, true) + $pg_ident_conf_path = pick($pg_ident_conf_path, "${confdir}/pg_ident.conf") + $postgresql_conf_path = pick($postgresql_conf_path, "${confdir}/postgresql.conf") + $recovery_conf_path = pick($recovery_conf_path, "${datadir}/recovery.conf") + $default_database = pick($default_database, 'postgres') }