48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'modules/postgresql/manifests/master.pp', line 48
class postgresql::master(
Wmflib::Ensure $ensure = 'present',
Stdlib::Host $master_server = $facts['networking']['fqdn'],
Integer $max_wal_senders = 5,
Integer $checkpoint_segments = 64,
Integer $wal_keep_segments = 128,
Stdlib::Unixpath $root_dir = '/var/lib/postgresql',
Boolean $use_ssl = false,
String $locale = 'en_US.UTF-8',
Integer $sync_count = 1,
String $sync_mode = 'on',
String $log_line_prefix = '%t ',
Array[String] $includes = [],
Array[String[1]] $replication_slots = [],
Optional[Stdlib::Unixpath] $ssldir = undef,
Optional[Array[String]] $sync_replicas = undef,
Optional[Integer[250]] $log_min_duration_statement = undef,
Optional[Integer] $log_autovacuum_min_duration = undef,
Optional[Numeric] $pgversion = undef,
) {
$_pgversion = $pgversion ? {
undef => debian::codename() ? {
'buster' => 11,
'bullseye' => 13,
'bookworm' => 15,
default => fail("${title} not supported by: ${debian::codename()})")
},
default => $pgversion,
}
$data_dir = "${root_dir}/${_pgversion}/main"
class { 'postgresql::server':
ensure => $ensure,
pgversion => $_pgversion,
includes => $includes + ['master.conf'],
root_dir => $root_dir,
use_ssl => $use_ssl,
ssldir => $ssldir,
log_line_prefix => $log_line_prefix,
log_min_duration_statement => $log_min_duration_statement,
log_autovacuum_min_duration => $log_autovacuum_min_duration,
}
file { "/etc/postgresql/${_pgversion}/main/master.conf":
ensure => $ensure,
owner => 'root',
group => 'root',
mode => '0444',
content => template('postgresql/master.conf.erb'),
before => Service[$postgresql::server::service_name],
}
if $ensure == 'present' {
exec { 'pg-initdb':
command => "/usr/lib/postgresql/${_pgversion}/bin/initdb --locale ${locale} -D ${data_dir}",
user => 'postgres',
unless => "/usr/bin/test -f ${data_dir}/PG_VERSION",
before => Service[$postgresql::server::service_name],
require => Package["postgresql-${_pgversion}"],
}
}
$psql_cmd = "/usr/bin/psql --tuples-only --no-align --command \"%s\""
$replication_slots.each |$slot| {
$create_sql = "SELECT pg_create_physical_replication_slot('${slot}')"
$unless_sql = "SELECT 1 FROM pg_replication_slots WHERE slot_name = '${slot}'"
exec { "create slot ${title}_${slot}":
user => 'postgres',
command => $psql_cmd.sprintf($create_sql),
unless => "${psql_cmd.sprintf($unless_sql)} | grep 1",
}
}
}
|