2013-08-27 22:43:47 +02:00
|
|
|
# PRIVATE CLASS: do not call directly
|
|
|
|
class postgresql::server::config {
|
|
|
|
$ip_mask_deny_postgres_user = $postgresql::server::ip_mask_deny_postgres_user
|
|
|
|
$ip_mask_allow_all_users = $postgresql::server::ip_mask_allow_all_users
|
|
|
|
$listen_addresses = $postgresql::server::listen_addresses
|
2014-04-17 21:09:07 +02:00
|
|
|
$port = $postgresql::server::port
|
2013-08-27 22:43:47 +02:00
|
|
|
$ipv4acls = $postgresql::server::ipv4acls
|
|
|
|
$ipv6acls = $postgresql::server::ipv6acls
|
|
|
|
$pg_hba_conf_path = $postgresql::server::pg_hba_conf_path
|
2014-07-24 22:04:02 +02:00
|
|
|
$pg_ident_conf_path = $postgresql::server::pg_ident_conf_path
|
2013-08-27 22:43:47 +02:00
|
|
|
$postgresql_conf_path = $postgresql::server::postgresql_conf_path
|
2015-02-07 07:28:54 +01:00
|
|
|
$recovery_conf_path = $postgresql::server::recovery_conf_path
|
2013-08-27 22:43:47 +02:00
|
|
|
$pg_hba_conf_defaults = $postgresql::server::pg_hba_conf_defaults
|
|
|
|
$user = $postgresql::server::user
|
|
|
|
$group = $postgresql::server::group
|
2014-08-18 11:26:06 +02:00
|
|
|
$version = $postgresql::server::_version
|
2013-10-02 14:43:21 +02:00
|
|
|
$manage_pg_hba_conf = $postgresql::server::manage_pg_hba_conf
|
2014-08-01 23:27:16 +02:00
|
|
|
$manage_pg_ident_conf = $postgresql::server::manage_pg_ident_conf
|
2015-02-07 07:28:54 +01:00
|
|
|
$manage_recovery_conf = $postgresql::server::manage_recovery_conf
|
2014-10-21 12:59:07 +02:00
|
|
|
$datadir = $postgresql::server::datadir
|
2014-12-09 23:48:45 +01:00
|
|
|
$logdir = $postgresql::server::logdir
|
2013-08-27 22:43:47 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
if ($manage_pg_hba_conf == true) {
|
|
|
|
# Prepare the main pg_hba file
|
|
|
|
concat { $pg_hba_conf_path:
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
|
|
|
mode => '0640',
|
|
|
|
warn => true,
|
|
|
|
notify => Class['postgresql::server::reload'],
|
|
|
|
}
|
2013-08-27 22:43:47 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
if $pg_hba_conf_defaults {
|
|
|
|
Postgresql::Server::Pg_hba_rule {
|
|
|
|
database => 'all',
|
|
|
|
user => 'all',
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
# Lets setup the base rules
|
|
|
|
$local_auth_option = $version ? {
|
|
|
|
'8.1' => 'sameuser',
|
|
|
|
default => undef,
|
|
|
|
}
|
|
|
|
postgresql::server::pg_hba_rule { 'local access as postgres user':
|
|
|
|
type => 'local',
|
|
|
|
user => $user,
|
|
|
|
auth_method => 'ident',
|
|
|
|
auth_option => $local_auth_option,
|
|
|
|
order => '001',
|
|
|
|
}
|
|
|
|
postgresql::server::pg_hba_rule { 'local access to database with same name':
|
|
|
|
type => 'local',
|
|
|
|
auth_method => 'ident',
|
|
|
|
auth_option => $local_auth_option,
|
|
|
|
order => '002',
|
|
|
|
}
|
|
|
|
postgresql::server::pg_hba_rule { 'allow localhost TCP access to postgresql user':
|
|
|
|
type => 'host',
|
|
|
|
user => $user,
|
|
|
|
address => '127.0.0.1/32',
|
|
|
|
auth_method => 'md5',
|
|
|
|
order => '003',
|
|
|
|
}
|
|
|
|
postgresql::server::pg_hba_rule { 'deny access to postgresql user':
|
|
|
|
type => 'host',
|
|
|
|
user => $user,
|
|
|
|
address => $ip_mask_deny_postgres_user,
|
|
|
|
auth_method => 'reject',
|
|
|
|
order => '004',
|
|
|
|
}
|
2013-08-27 22:43:47 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
postgresql::server::pg_hba_rule { 'allow access to all users':
|
|
|
|
type => 'host',
|
|
|
|
address => $ip_mask_allow_all_users,
|
|
|
|
auth_method => 'md5',
|
|
|
|
order => '100',
|
|
|
|
}
|
|
|
|
postgresql::server::pg_hba_rule { 'allow access to ipv6 localhost':
|
|
|
|
type => 'host',
|
|
|
|
address => '::1/128',
|
|
|
|
auth_method => 'md5',
|
|
|
|
order => '101',
|
2013-10-02 14:43:21 +02:00
|
|
|
}
|
2014-04-17 21:09:07 +02:00
|
|
|
}
|
2015-05-28 15:37:02 +02:00
|
|
|
|
|
|
|
# ipv4acls are passed as an array of rule strings, here we transform
|
|
|
|
# them into a resources hash, and pass the result to create_resources
|
|
|
|
$ipv4acl_resources = postgresql_acls_to_resources_hash($ipv4acls,
|
|
|
|
'ipv4acls', 10)
|
|
|
|
create_resources('postgresql::server::pg_hba_rule', $ipv4acl_resources)
|
|
|
|
|
|
|
|
|
|
|
|
# ipv6acls are passed as an array of rule strings, here we transform
|
|
|
|
# them into a resources hash, and pass the result to create_resources
|
|
|
|
$ipv6acl_resources = postgresql_acls_to_resources_hash($ipv6acls,
|
|
|
|
'ipv6acls', 102)
|
|
|
|
create_resources('postgresql::server::pg_hba_rule', $ipv6acl_resources)
|
2014-07-02 16:45:07 +02:00
|
|
|
}
|
2014-04-17 21:09:07 +02:00
|
|
|
|
2014-07-02 16:45:07 +02:00
|
|
|
# We must set a "listen_addresses" line in the postgresql.conf if we
|
|
|
|
# want to allow any connections from remote hosts.
|
|
|
|
postgresql::server::config_entry { 'listen_addresses':
|
|
|
|
value => $listen_addresses,
|
|
|
|
}
|
|
|
|
postgresql::server::config_entry { 'port':
|
|
|
|
value => $port,
|
|
|
|
}
|
2014-10-21 12:59:07 +02:00
|
|
|
postgresql::server::config_entry { 'data_directory':
|
|
|
|
value => $datadir,
|
|
|
|
}
|
2014-12-09 23:48:45 +01:00
|
|
|
if $logdir {
|
|
|
|
postgresql::server::config_entry { 'log_directory':
|
|
|
|
value => $logdir,
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2014-07-02 16:45:07 +02:00
|
|
|
|
|
|
|
# RedHat-based systems hardcode some PG* variables in the init script, and need to be overriden
|
|
|
|
# in /etc/sysconfig/pgsql/postgresql. Create a blank file so we can manage it with augeas later.
|
2014-07-08 14:58:28 +02:00
|
|
|
if ($::osfamily == 'RedHat') and ($::operatingsystemrelease !~ /^7/) and ($::operatingsystem != 'Fedora') {
|
2014-07-02 16:45:07 +02:00
|
|
|
file { '/etc/sysconfig/pgsql/postgresql':
|
|
|
|
ensure => present,
|
|
|
|
replace => false,
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
2014-10-23 10:48:53 +02:00
|
|
|
|
|
|
|
# The init script from the packages of the postgresql.org repository
|
|
|
|
# sources an alternate sysconfig file.
|
|
|
|
# I. e. /etc/sysconfig/pgsql/postgresql-9.3 for PostgreSQL 9.3
|
|
|
|
# Link to the sysconfig file set by this puppet module
|
|
|
|
file { "/etc/sysconfig/pgsql/postgresql-${version}":
|
|
|
|
ensure => link,
|
|
|
|
target => '/etc/sysconfig/pgsql/postgresql',
|
|
|
|
require => File[ '/etc/sysconfig/pgsql/postgresql' ],
|
|
|
|
}
|
|
|
|
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|
2014-07-24 22:04:02 +02:00
|
|
|
|
2014-10-23 10:48:53 +02:00
|
|
|
|
2014-07-24 22:04:02 +02:00
|
|
|
if ($manage_pg_ident_conf == true) {
|
|
|
|
concat { $pg_ident_conf_path:
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
2014-09-03 22:17:19 +02:00
|
|
|
force => true, # do not crash if there is no pg_ident_rules
|
2014-07-24 22:04:02 +02:00
|
|
|
mode => '0640',
|
|
|
|
warn => true,
|
|
|
|
notify => Class['postgresql::server::reload'],
|
|
|
|
}
|
|
|
|
}
|
2014-10-31 23:27:34 +01:00
|
|
|
|
2015-02-07 07:28:54 +01:00
|
|
|
if ($manage_recovery_conf == true) {
|
|
|
|
concat { $recovery_conf_path:
|
|
|
|
owner => $user,
|
|
|
|
group => $group,
|
|
|
|
force => true, # do not crash if there is no recovery conf file
|
|
|
|
mode => '0640',
|
|
|
|
warn => true,
|
|
|
|
notify => Class['postgresql::server::reload'],
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-31 23:27:34 +01:00
|
|
|
if $::osfamily == 'RedHat' {
|
|
|
|
if $::operatingsystemrelease =~ /^7/ or $::operatingsystem == 'Fedora' {
|
|
|
|
file { 'systemd-override':
|
|
|
|
ensure => present,
|
2015-06-12 16:29:50 +02:00
|
|
|
path => "/etc/systemd/system/${postgresql::params::service_name}.service",
|
2014-10-31 23:27:34 +01:00
|
|
|
owner => root,
|
|
|
|
group => root,
|
|
|
|
content => template('postgresql/systemd-override.erb'),
|
|
|
|
notify => [ Exec['restart-systemd'], Class['postgresql::server::service'] ],
|
|
|
|
before => Class['postgresql::server::reload'],
|
|
|
|
}
|
2015-01-11 05:27:57 +01:00
|
|
|
exec { 'restart-systemd':
|
2014-10-31 23:27:34 +01:00
|
|
|
command => 'systemctl daemon-reload',
|
|
|
|
refreshonly => true,
|
|
|
|
path => '/bin:/usr/bin:/usr/local/bin'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-08-27 22:43:47 +02:00
|
|
|
}
|