126 lines
3.5 KiB
Python
126 lines
3.5 KiB
Python
postgresql_version = node.metadata['postgresql']['version']
|
|
|
|
pkg_apt = {
|
|
'postgresql-common': {},
|
|
'postgresql-client-common': {},
|
|
'postgresql-{}'.format(postgresql_version): {},
|
|
'postgresql-client-{}'.format(postgresql_version): {},
|
|
}
|
|
|
|
if node.metadata.get('postgresql/install_dev', False):
|
|
pkg_apt['postgresql-server-dev-{}'.format(postgresql_version)] = {}
|
|
|
|
if node.has_bundle('zfs'):
|
|
for pkgname, pkgconfig in pkg_apt.items():
|
|
pkg_apt[pkgname]['needs'] = {
|
|
'zfs_dataset:tank/postgresql',
|
|
}
|
|
|
|
|
|
directories = {
|
|
'/etc/postgresql': {
|
|
'owner': None,
|
|
'group': None,
|
|
'mode': None,
|
|
# Keeping old configs messes with cluster-auto-detection.
|
|
'purge': True,
|
|
},
|
|
# This is needed so the above purge does not remove the version
|
|
# currently installed.
|
|
'/etc/postgresql/{}/main'.format(postgresql_version): {
|
|
'owner': 'postgres',
|
|
'group': 'postgres',
|
|
'mode': '0755',
|
|
'needs': {f'pkg_apt:{i}' for i in pkg_apt.keys()},
|
|
},
|
|
}
|
|
|
|
files = {
|
|
"/etc/postgresql/{}/main/pg_hba.conf".format(postgresql_version): {
|
|
'content_type': 'mako',
|
|
'owner': 'postgres',
|
|
'group': 'postgres',
|
|
'triggers': {
|
|
'svc_systemd:postgresql:restart',
|
|
},
|
|
},
|
|
"/etc/postgresql/{}/main/postgresql.conf".format(postgresql_version): {
|
|
'content_type': 'mako',
|
|
'context': {
|
|
'version_list': [int(i) for i in node.metadata['postgresql']['version'].split('.')],
|
|
**node.metadata['postgresql'],
|
|
},
|
|
'owner': 'postgres',
|
|
'group': 'postgres',
|
|
'needs': {
|
|
# postgresql won't start if the configured locale isn't available
|
|
'action:locale-gen',
|
|
} if node.has_bundle('basic') else set(),
|
|
'triggers': {
|
|
'svc_systemd:postgresql:restart',
|
|
},
|
|
},
|
|
}
|
|
|
|
if node.has_bundle('backup-client') and not node.has_bundle('zfs'):
|
|
files['/etc/backup-pre-hooks.d/90-postgresql-dump-all'] = {
|
|
'source': 'backup-pre-hook',
|
|
'content_type': 'mako',
|
|
'context': {
|
|
'databases': node.metadata.get('postgresql/databases', {}).keys(),
|
|
},
|
|
'mode': '0700',
|
|
}
|
|
directories['/var/tmp/postgresdumps'] = {}
|
|
else:
|
|
files['/var/tmp/postgresdumps'] = {
|
|
'delete': True,
|
|
}
|
|
|
|
postgres_roles = {
|
|
'root': {
|
|
'password': repo.vault.password_for('{} postgresql root'.format(node.name)),
|
|
'superuser': True,
|
|
'needs': {
|
|
'svc_systemd:postgresql',
|
|
},
|
|
},
|
|
}
|
|
|
|
restart_deps = {
|
|
f'file:/etc/postgresql/{postgresql_version}/main/pg_hba.conf',
|
|
f'file:/etc/postgresql/{postgresql_version}/main/postgresql.conf',
|
|
*{f'pkg_apt:{i}' for i in pkg_apt.keys()},
|
|
}
|
|
|
|
svc_systemd = {
|
|
'postgresql': {
|
|
'needs': restart_deps,
|
|
'triggers': {
|
|
'action:postgresql_wait_after_restart',
|
|
},
|
|
},
|
|
}
|
|
|
|
actions = {
|
|
'postgresql_wait_after_restart': {
|
|
# postgresql doesn't accept connections immediately after restarting
|
|
'command': 'sleep 10',
|
|
'triggered': True,
|
|
'before': {
|
|
'postgres_role:',
|
|
'postgres_db:',
|
|
},
|
|
},
|
|
}
|
|
|
|
for user, config in node.metadata.get('postgresql/roles', {}).items():
|
|
postgres_roles[user] = {
|
|
'password': config['password'],
|
|
'needs': {
|
|
'svc_systemd:postgresql',
|
|
},
|
|
}
|
|
|
|
for database, config in node.metadata.get('postgresql/databases', {}).items():
|
|
postgres_dbs[database] = config
|