Add actual postgresl module from puppetlabs
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / db.pp
diff --git a/3rdparty/modules/postgresql/manifests/db.pp b/3rdparty/modules/postgresql/manifests/db.pp
new file mode 100644 (file)
index 0000000..0ea3c6d
--- /dev/null
@@ -0,0 +1,76 @@
+# Define: postgresql::db
+#
+# This module creates database instances, a user, and grants that user
+# privileges to the database.
+#
+# Since it requires class postgresql::server, we assume to run all commands as the
+# postgresql user against the local postgresql server.
+#
+# TODO: support an array of privileges for "grant"; currently only supports a single
+#  privilege, which is pretty useless unless that privilege is "ALL"
+#
+# Parameters:
+#   [*title*]       - postgresql database name.
+#   [*user*]        - username to create and grant access.
+#   [*password*]    - user's password.  may be md5-encoded, in the format returned by the "postgresql_password"
+#                            function in this module
+#   [*charset*]     - database charset. defaults to 'utf8'
+#   [*grant*]       - privilege to grant user. defaults to 'all'.
+#   [*tablespace*]  - database tablespace. default to use the template database's tablespace.
+#   [*locale*]      - locale for database. defaults to 'undef' (effectively 'C').
+#
+# Actions:
+#
+# Requires:
+#
+#   class postgresql::server
+#
+# Sample Usage:
+#
+#  postgresql::db { 'mydb':
+#    user     => 'my_user',
+#    password => 'password',
+#    grant    => 'all'
+#  }
+#
+define postgresql::db (
+  $user,
+  $password,
+  $charset    = $postgresql::params::charset,
+  $locale     = $postgresql::params::locale,
+  $grant      = 'ALL',
+  $tablespace = undef,
+  $istemplate = false
+) {
+  include postgresql::params
+
+  postgresql::database { $name:
+    # TODO: ensure is not yet supported
+    #ensure    => present,
+    charset    => $charset,
+    tablespace => $tablespace,
+    #provider  => 'postgresql',
+    require    => Class['postgresql::server'],
+    locale     => $locale,
+    istemplate => $istemplate,
+  }
+
+  if ! defined(Postgresql::Database_user[$user]) {
+    postgresql::database_user { $user:
+      # TODO: ensure is not yet supported
+      #ensure         => present,
+      password_hash   => $password,
+      #provider       => 'postgresql',
+      require         => Postgresql::Database[$name],
+    }
+  }
+
+  postgresql::database_grant { "GRANT ${user} - ${grant} - ${name}":
+    privilege       => $grant,
+    db              => $name,
+    role            => $user,
+    #provider       => 'postgresql',
+    require         => [Postgresql::Database[$name], Postgresql::Database_user[$user]],
+  }
+
+}