2013-08-27 22:43:47 +02:00
|
|
|
# PRIVATE CLASS: do not call directly
|
|
|
|
class postgresql::server::initdb {
|
|
|
|
$needs_initdb = $postgresql::server::needs_initdb
|
|
|
|
$initdb_path = $postgresql::server::initdb_path
|
|
|
|
$datadir = $postgresql::server::datadir
|
2013-09-25 19:00:24 +02:00
|
|
|
$xlogdir = $postgresql::server::xlogdir
|
2014-12-09 23:48:45 +01:00
|
|
|
$logdir = $postgresql::server::logdir
|
2013-08-27 22:43:47 +02:00
|
|
|
$encoding = $postgresql::server::encoding
|
|
|
|
$locale = $postgresql::server::locale
|
|
|
|
$group = $postgresql::server::group
|
|
|
|
$user = $postgresql::server::user
|
2015-03-16 21:27:57 +01:00
|
|
|
$psql_path = $postgresql::server::psql_path
|
|
|
|
$port = $postgresql::server::port
|
|
|
|
|
|
|
|
# Set the defaults for the postgresql_psql resource
|
|
|
|
Postgresql_psql {
|
|
|
|
psql_user => $user,
|
|
|
|
psql_group => $group,
|
|
|
|
psql_path => $psql_path,
|
|
|
|
port => $port,
|
|
|
|
}
|
2013-08-27 22:43:47 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
# Make sure the data directory exists, and has the correct permissions.
|
|
|
|
file { $datadir:
|
|
|
|
ensure => directory,
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
|
|
|
mode => '0700',
|
|
|
|
}
|
|
|
|
|
|
|
|
if($xlogdir) {
|
|
|
|
# Make sure the xlog directory exists, and has the correct permissions.
|
|
|
|
file { $xlogdir:
|
2013-09-14 07:33:46 +02:00
|
|
|
ensure => directory,
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
2013-09-21 19:45:35 +02:00
|
|
|
mode => '0700',
|
2013-09-14 07:33:46 +02:00
|
|
|
}
|
2014-07-02 16:45:07 +02:00
|
|
|
}
|
2013-09-14 07:33:46 +02:00
|
|
|
|
2014-12-09 23:48:45 +01:00
|
|
|
if($logdir) {
|
|
|
|
# Make sure the log directory exists, and has the correct permissions.
|
|
|
|
file { $logdir:
|
|
|
|
ensure => directory,
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
if($needs_initdb) {
|
|
|
|
# Build up the initdb command.
|
|
|
|
#
|
|
|
|
# We optionally add the locale switch if specified. Older versions of the
|
|
|
|
# initdb command don't accept this switch. So if the user didn't pass the
|
|
|
|
# parameter, lets not pass the switch at all.
|
|
|
|
$ic_base = "${initdb_path} --encoding '${encoding}' --pgdata '${datadir}'"
|
|
|
|
$ic_xlog = $xlogdir ? {
|
|
|
|
undef => $ic_base,
|
|
|
|
default => "${ic_base} --xlogdir '${xlogdir}'"
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
2014-08-19 09:38:05 +02:00
|
|
|
|
|
|
|
# The xlogdir need to be present before initdb runs.
|
|
|
|
# If xlogdir is default it's created by package installer
|
|
|
|
if($xlogdir) {
|
|
|
|
$require_before_initdb = [$datadir, $xlogdir]
|
|
|
|
} else {
|
|
|
|
$require_before_initdb = [$datadir]
|
|
|
|
}
|
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
$initdb_command = $locale ? {
|
|
|
|
undef => $ic_xlog,
|
|
|
|
default => "${ic_xlog} --locale '${locale}'"
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
2013-09-25 19:00:24 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
# This runs the initdb command, we use the existance of the PG_VERSION
|
|
|
|
# file to ensure we don't keep running this command.
|
|
|
|
exec { 'postgresql_initdb':
|
|
|
|
command => $initdb_command,
|
|
|
|
creates => "${datadir}/PG_VERSION",
|
|
|
|
user => $user,
|
|
|
|
group => $group,
|
|
|
|
logoutput => on_failure,
|
2014-08-19 09:38:05 +02:00
|
|
|
require => File[$require_before_initdb],
|
2013-09-25 19:00:24 +02:00
|
|
|
}
|
2014-10-31 23:27:34 +01:00
|
|
|
# The package will take care of this for us the first time, but if we
|
2015-05-26 14:57:34 +02:00
|
|
|
# ever need to init a new db we need to copy these files explicitly
|
2014-10-31 23:27:34 +01:00
|
|
|
if $::operatingsystem == 'Debian' or $::operatingsystem == 'Ubuntu' {
|
|
|
|
if $::operatingsystemrelease =~ /^6/ or $::operatingsystemrelease =~ /^7/ or $::operatingsystemrelease =~ /^10\.04/ or $::operatingsystemrelease =~ /^12\.04/ {
|
|
|
|
file { 'server.crt':
|
2015-05-26 14:57:34 +02:00
|
|
|
ensure => file,
|
2015-01-11 05:27:57 +01:00
|
|
|
path => "${datadir}/server.crt",
|
2015-05-26 14:57:34 +02:00
|
|
|
source => 'file:///etc/ssl/certs/ssl-cert-snakeoil.pem',
|
|
|
|
owner => $::postgresql::server::user,
|
|
|
|
group => $::postgresql::server::group,
|
|
|
|
mode => '0644',
|
2015-01-11 05:27:57 +01:00
|
|
|
require => Exec['postgresql_initdb'],
|
2014-10-31 23:27:34 +01:00
|
|
|
}
|
|
|
|
file { 'server.key':
|
2015-05-26 14:57:34 +02:00
|
|
|
ensure => file,
|
2015-01-11 05:27:57 +01:00
|
|
|
path => "${datadir}/server.key",
|
2015-05-26 14:57:34 +02:00
|
|
|
source => 'file:///etc/ssl/private/ssl-cert-snakeoil.key',
|
|
|
|
owner => $::postgresql::server::user,
|
|
|
|
group => $::postgresql::server::group,
|
|
|
|
mode => '0600',
|
2015-01-11 05:27:57 +01:00
|
|
|
require => Exec['postgresql_initdb'],
|
2014-10-31 23:27:34 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-12-05 10:24:32 +01:00
|
|
|
} elsif $encoding != undef {
|
|
|
|
# [workaround]
|
|
|
|
# by default pg_createcluster encoding derived from locale
|
|
|
|
# but it do does not work by installing postgresql via puppet because puppet
|
|
|
|
# always override LANG to 'C'
|
|
|
|
postgresql_psql { "Set template1 encoding to ${encoding}":
|
|
|
|
command => "UPDATE pg_database
|
|
|
|
SET datistemplate = FALSE
|
|
|
|
WHERE datname = 'template1'
|
|
|
|
;
|
|
|
|
UPDATE pg_database
|
|
|
|
SET encoding = pg_char_to_encoding('${encoding}'), datistemplate = TRUE
|
|
|
|
WHERE datname = 'template1'",
|
|
|
|
unless => "SELECT datname FROM pg_database WHERE
|
2015-03-10 09:58:33 +01:00
|
|
|
datname = 'template1' AND encoding = pg_char_to_encoding('${encoding}')",
|
2014-12-05 10:24:32 +01:00
|
|
|
}
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
|
|
|
}
|