newer pg module
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / params.pp
index 7ace592..51c45ef 100644 (file)
-# 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')
 }