Add recursive database owner change to postgres module/state

Add recursive owner change to postgres.db_alter and expose it via
postgres_database.present parameter.

`owner_recurse` defaults to false to avoid breaking compatibility, but
could arguably be a sane default.
This commit is contained in:
Luca Corti 2015-04-05 09:31:53 +02:00
parent 6ae9fe6dff
commit 3aa4b3bfe6
3 changed files with 32 additions and 19 deletions

View file

@ -89874,7 +89874,7 @@ salt \(aq*\(aq postgres.create_metadata adminpack
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.db_alter(name, user=None, host=None, port=None, maintenance_db=None, password=None, tablespace=None, owner=None, runas=None)
.B salt.modules.postgres.db_alter(name, user=None, host=None, port=None, maintenance_db=None, password=None, tablespace=None, owner=None, owner_recurse=False, runas=None)
Change tablespace or/and owner of database.
.sp
CLI Example:

View file

@ -400,7 +400,7 @@ def db_create(name,
def db_alter(name, user=None, host=None, port=None, maintenance_db=None,
password=None, tablespace=None, owner=None,
password=None, tablespace=None, owner=None, owner_recurse=False,
runas=None):
'''
Change tablespace or/and owner of database.
@ -414,22 +414,31 @@ def db_alter(name, user=None, host=None, port=None, maintenance_db=None,
if not any((tablespace, owner)):
return True # Nothing todo?
queries = []
if owner:
queries.append('ALTER DATABASE "{0}" OWNER TO "{1}"'.format(
name, owner
))
if tablespace:
queries.append('ALTER DATABASE "{0}" SET TABLESPACE "{1}"'.format(
name, tablespace
))
for query in queries:
ret = _psql_prepare_and_run(['-c', query],
user=user, host=host, port=port,
maintenance_db=maintenance_db,
password=password, runas=runas)
if ret['retcode'] != 0:
return False
if owner and owner_recurse:
ret = owner_to(name, owner,
user=user,
host=host,
port=port,
password=password,
runas=runas)
else:
queries = []
if owner:
queries.append('ALTER DATABASE "{0}" OWNER TO "{1}"'.format(
name, owner
))
if tablespace:
queries.append('ALTER DATABASE "{0}" SET TABLESPACE "{1}"'.format(
name, tablespace
))
for query in queries:
ret = _psql_prepare_and_run(['-c', query],
user=user, host=host, port=port,
maintenance_db=maintenance_db,
password=password, runas=runas)
if ret['retcode'] != 0:
return False
return True

View file

@ -27,6 +27,7 @@ def present(name,
lc_collate=None,
lc_ctype=None,
owner=None,
owner_recurse=False,
template=None,
user=None,
maintenance_db=None,
@ -56,6 +57,9 @@ def present(name,
owner
The username of the database owner
owner_recurse
Recurse owner change to all relations in the database
template
The template database from which to build this database
@ -139,7 +143,7 @@ def present(name,
name in dbs and __salt__['postgres.db_alter'](
name,
tablespace=tablespace,
owner=owner, **db_args)
owner=owner, owner_recurse=owner_recurse, **db_args)
):
ret['comment'] = ('Parameters for database {0} have been changed'
).format(name)