X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fpostgresql%2Fmanifests%2Fparams.pp;fp=3rdparty%2Fmodules%2Fpostgresql%2Fmanifests%2Fparams.pp;h=7ace592f6725f14910cfd9931b2ba41c118baae7;hb=a29c0d1b4d2420aeb3ef6acf66feb00709dd2652;hp=0000000000000000000000000000000000000000;hpb=d98d8ae49a60547132c555f3669f3b9ae6a666bd;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/postgresql/manifests/params.pp b/3rdparty/modules/postgresql/manifests/params.pp new file mode 100644 index 000000000..7ace592f6 --- /dev/null +++ b/3rdparty/modules/postgresql/manifests/params.pp @@ -0,0 +1,244 @@ +# 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 + } + } + + # 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) + } 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) + } + + $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" + $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 + } 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" + +}