1 # Manage a postgresql.conf entry. See README.md for more details.
2 define postgresql::server::config_entry (
7 $postgresql_conf_path = $postgresql::server::postgresql_conf_path
10 false => $postgresql_conf_path,
14 # Those are the variables that are marked as "(change requires restart)"
15 # on postgresql.conf. Items are ordered as on postgresql.conf.
17 # XXX: This resource supports setting other variables without knowing
18 # their names. Do not add them here.
19 $requires_restart_until = {
20 'data_directory' => undef,
22 'ident_file' => undef,
23 'external_pid_file' => undef,
24 'listen_addresses' => undef,
26 'max_connections' => undef,
27 'superuser_reserved_connections' => undef,
28 'unix_socket_directory' => '9.3', # Turned into "unix_socket_directories"
29 'unix_socket_directories' => undef,
30 'unix_socket_group' => undef,
31 'unix_socket_permissions' => undef,
33 'bonjour_name' => undef,
35 'ssl_ciphers' => '10',
36 'ssl_prefer_server_ciphers' => '10', # New on 9.4
37 'ssl_ecdh_curve' => '10', # New on 9.4
38 'ssl_cert_file' => '10', # New on 9.2
39 'ssl_key_file' => '10', # New on 9.2
40 'ssl_ca_file' => '10', # New on 9.2
41 'ssl_crl_file' => '10', # New on 9.2
42 'shared_buffers' => undef,
43 'huge_pages' => undef, # New on 9.4
44 'max_prepared_transactions' => undef,
45 'max_files_per_process' => undef,
46 'shared_preload_libraries' => undef,
47 'max_worker_processes' => undef, # New on 9.4
48 'old_snapshot_threshold' => undef, # New on 9.6
50 'wal_log_hints' => undef, # New on 9.4
51 'wal_buffers' => undef,
52 'archive_mode' => undef,
53 'max_wal_senders' => undef,
54 'max_replication_slots' => undef, # New on 9.4
55 'track_commit_timestamp' => undef, # New on 9.5
56 'hot_standby' => undef,
57 'logging_collector' => undef,
58 'cluster_name' => undef, # New on 9.5
59 'silent_mode' => '9.2', # Removed
60 'track_activity_query_size' => undef,
61 'autovacuum_max_workers' => undef,
62 'autovacuum_freeze_max_age' => undef,
63 'autovacuum_multixact_freeze_max_age' => undef, # New on 9.5
64 'max_locks_per_transaction' => undef,
65 'max_pred_locks_per_transaction' => undef,
69 logoutput => 'on_failure',
72 if ! ($name in $requires_restart_until and (
73 ! $requires_restart_until[$name] or
74 versioncmp($postgresql::server::_version, $requires_restart_until[$name]) < 0
77 notify => Class['postgresql::server::reload'],
79 } elsif $postgresql::server::service_restart_on_change {
81 notify => Class['postgresql::server::service'],
85 before => Class['postgresql::server::service'],
89 # We have to handle ports and the data directory in a weird and
90 # special way. On early Debian and Ubuntu and RHEL we have to ensure
91 # we stop the service completely. On RHEL 7 we either have to create
92 # a systemd override for the port or update the sysconfig file, but this
93 # is managed for us in postgresql::server::config.
94 if $::operatingsystem == 'Debian' or $::operatingsystem == 'Ubuntu' {
95 if $name == 'port' and ( $::operatingsystemrelease =~ /^6/ or $::operatingsystemrelease =~ /^10\.04/ ) {
96 exec { "postgresql_stop_${name}":
97 command => "service ${::postgresql::server::service_name} stop",
98 onlyif => "service ${::postgresql::server::service_name} status",
99 unless => "grep 'port = ${value}' ${::postgresql::server::postgresql_conf_path}",
100 path => '/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/bin',
101 before => Postgresql_conf[$name],
104 elsif $name == 'data_directory' {
105 exec { "postgresql_stop_${name}":
106 command => "service ${::postgresql::server::service_name} stop",
107 onlyif => "service ${::postgresql::server::service_name} status",
108 unless => "grep \"data_directory = '${value}'\" ${::postgresql::server::postgresql_conf_path}",
109 path => '/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/bin',
110 before => Postgresql_conf[$name],
114 if $::osfamily == 'RedHat' {
115 if ! ($::operatingsystemrelease =~ /^7/ or $::operatingsystem == 'Fedora') {
117 # We need to force postgresql to stop before updating the port
118 # because puppet becomes confused and is unable to manage the
119 # service appropriately.
120 exec { "postgresql_stop_${name}":
121 command => "service ${::postgresql::server::service_name} stop",
122 onlyif => "service ${::postgresql::server::service_name} status",
123 unless => "grep 'PGPORT=${value}' /etc/sysconfig/pgsql/postgresql",
124 path => '/sbin:/bin:/usr/bin:/usr/local/bin',
125 require => File['/etc/sysconfig/pgsql/postgresql'],
127 -> augeas { 'override PGPORT in /etc/sysconfig/pgsql/postgresql':
128 lens => 'Shellvars.lns',
129 incl => '/etc/sysconfig/pgsql/*',
130 context => '/files/etc/sysconfig/pgsql/postgresql',
131 changes => "set PGPORT ${value}",
132 require => File['/etc/sysconfig/pgsql/postgresql'],
133 notify => Class['postgresql::server::service'],
134 before => Class['postgresql::server::reload'],
136 } elsif $name == 'data_directory' {
137 # We need to force postgresql to stop before updating the data directory
138 # otherwise init script breaks
139 exec { "postgresql_${name}":
140 command => "service ${::postgresql::server::service_name} stop",
141 onlyif => "service ${::postgresql::server::service_name} status",
142 unless => "grep 'PGDATA=${value}' /etc/sysconfig/pgsql/postgresql",
143 path => '/sbin:/bin:/usr/bin:/usr/local/bin',
144 require => File['/etc/sysconfig/pgsql/postgresql'],
146 -> augeas { 'override PGDATA in /etc/sysconfig/pgsql/postgresql':
147 lens => 'Shellvars.lns',
148 incl => '/etc/sysconfig/pgsql/*',
149 context => '/files/etc/sysconfig/pgsql/postgresql',
150 changes => "set PGDATA ${value}",
151 require => File['/etc/sysconfig/pgsql/postgresql'],
152 notify => Class['postgresql::server::service'],
153 before => Class['postgresql::server::reload'],
161 postgresql_conf { $name:
165 require => Class['postgresql::server::initdb'],
170 fail("Unknown value for ensure '${ensure}'.")