newer pg module
[mirror/dsa-puppet.git] / 3rdparty / modules / postgresql / manifests / server / service.pp
diff --git a/3rdparty/modules/postgresql/manifests/server/service.pp b/3rdparty/modules/postgresql/manifests/server/service.pp
new file mode 100644 (file)
index 0000000..2a4f500
--- /dev/null
@@ -0,0 +1,48 @@
+# PRIVATE CLASS: do not call directly
+class postgresql::server::service {
+  $service_ensure   = $postgresql::server::service_ensure
+  $service_enable   = $postgresql::server::service_enable
+  $service_manage   = $postgresql::server::service_manage
+  $service_name     = $postgresql::server::service_name
+  $service_provider = $postgresql::server::service_provider
+  $service_status   = $postgresql::server::service_status
+  $user             = $postgresql::server::user
+  $port             = $postgresql::server::port
+  $default_database = $postgresql::server::default_database
+  $psql_path        = $postgresql::params::psql_path
+
+  anchor { 'postgresql::server::service::begin': }
+
+  if $service_manage {
+
+    service { 'postgresqld':
+      ensure    => $service_ensure,
+      enable    => $service_enable,
+      name      => $service_name,
+      provider  => $service_provider,
+      hasstatus => true,
+      status    => $service_status,
+    }
+
+    if $service_ensure == 'running' {
+      # This blocks the class before continuing if chained correctly, making
+      # sure the service really is 'up' before continuing.
+      #
+      # Without it, we may continue doing more work before the database is
+      # prepared leading to a nasty race condition.
+      postgresql_conn_validator{ 'validate_service_is_running':
+        run_as    => $user,
+        db_name   => $default_database,
+        port      => $port,
+        sleep     => 1,
+        tries     => 60,
+        psql_path => $psql_path,
+        require   => Service['postgresqld'],
+        before    => Anchor['postgresql::server::service::end']
+      }
+      Postgresql::Server::Database <| title == $default_database |> -> Postgresql_conn_validator['validate_service_is_running']
+    }
+  }
+
+  anchor { 'postgresql::server::service::end': }
+}