Add actual postgresl module from puppetlabs
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / params.pp
diff --git a/3rdparty/modules/postgresql/manifests/params.pp b/3rdparty/modules/postgresql/manifests/params.pp
new file mode 100644 (file)
index 0000000..7ace592
--- /dev/null
@@ -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"
+
+}