renamed postgres.db to postgres.maintenance_db and all postgres module function arguments from db to maintenance_db

made default maintenance_db "postgres" and also made default postgres/psql runas local-server only
This commit is contained in:
Grischa Meyer 2013-03-27 11:03:56 +11:00
parent f2c7a4ccce
commit 54f7055a38
2 changed files with 112 additions and 93 deletions

View file

@ -19143,16 +19143,19 @@ postgres.host: \(aqlocalhost\(aq
postgres.port: \(aq5432\(aq
postgres.user: \(aqpostgres\(aq
postgres.pass: \(aq\(aq
postgres.db: \(aqpostgres\(aq
postgres.maintenance_db: \(aqpostgres\(aq
.ft P
.fi
.sp
The default for the maintenance_db is 'postgres' and in most cases it can
be left at the default setting.
.sp
This data can also be passed into pillar. Options passed into opts will
overwrite options passed into pillar
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.db_create(name, user=None, host=None, port=None, db=None, password=None, tablespace=None, encoding=None, locale=None, lc_collate=None, lc_ctype=None, owner=None, template=None, runas=None)
.B salt.modules.postgres.db_create(name, user=None, host=None, port=None, maintenance_db=None, password=None, tablespace=None, encoding=None, locale=None, lc_collate=None, lc_ctype=None, owner=None, template=None, runas=None)
Adds a databases to the Postgres server.
.sp
CLI Example:
@ -19167,7 +19170,7 @@ salt \(aq*\(aq postgres.db_create \(aqdbname\(aq template=template_postgis
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.db_exists(name, user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.db_exists(name, user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Checks if a database exists on the Postgres server.
.sp
CLI Example:
@ -19180,7 +19183,7 @@ salt \(aq*\(aq postgres.db_exists \(aqdbname\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.db_list(user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.db_list(user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Return a list of databases of a Postgres server using the output
from the \fBpsql \-l\fP query.
.sp
@ -19194,7 +19197,7 @@ salt \(aq*\(aq postgres.db_list
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.db_remove(name, user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.db_remove(name, user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Removes a databases from the Postgres server.
.sp
CLI Example:
@ -19207,7 +19210,7 @@ salt \(aq*\(aq postgres.db_remove \(aqdbname\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.group_create(groupname, user=None, host=None, port=None, db=None, password=None, createdb=False, createuser=False, encrypted=False, superuser=False, replication=False, rolepassword=None, groups=None, runas=None)
.B salt.modules.postgres.group_create(groupname, user=None, host=None, port=None, maintenance_db=None, password=None, createdb=False, createuser=False, encrypted=False, superuser=False, replication=False, rolepassword=None, groups=None, runas=None)
Creates a Postgres group. A group is postgres is similar to a user, but
cannot login.
.sp
@ -19221,7 +19224,7 @@ salt \(aq*\(aq postgres.group_create \(aqgroupname\(aq user=\(aquser\(aq host=\(
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.group_remove(groupname, user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.group_remove(groupname, user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Removes a group from the Postgres server.
.sp
CLI Example:
@ -19234,7 +19237,7 @@ salt \(aq*\(aq postgres.group_remove \(aqgroupname\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.group_update(groupname, user=None, host=None, port=None, db=None, password=None, createdb=False, createuser=False, encrypted=False, replication=False, rolepassword=None, groups=None, runas=None)
.B salt.modules.postgres.group_update(groupname, user=None, host=None, port=None, maintenance_db=None, password=None, createdb=False, createuser=False, encrypted=False, replication=False, rolepassword=None, groups=None, runas=None)
Updated a postgres group
.sp
CLI Examples:
@ -19247,7 +19250,7 @@ salt \(aq*\(aq postgres.group_update \(aqusername\(aq user=\(aquser\(aq host=\(a
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.user_create(username, user=None, host=None, port=None, db=None, password=None, createdb=False, createuser=False, encrypted=False, superuser=False, replication=False, rolepassword=None, groups=None, runas=None)
.B salt.modules.postgres.user_create(username, user=None, host=None, port=None, maintenance_db=None, password=None, createdb=False, createuser=False, encrypted=False, superuser=False, replication=False, rolepassword=None, groups=None, runas=None)
Creates a Postgres user.
.sp
CLI Examples:
@ -19260,7 +19263,7 @@ salt \(aq*\(aq postgres.user_create \(aqusername\(aq user=\(aquser\(aq host=\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.user_exists(name, user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.user_exists(name, user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Checks if a user exists on the Postgres server.
.sp
CLI Example:
@ -19273,7 +19276,7 @@ salt \(aq*\(aq postgres.user_exists \(aqusername\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.user_list(user=None, host=None, port=None, db=None, password=password, runas=None)
.B salt.modules.postgres.user_list(user=None, host=None, port=None, maintenance_db=None, password=password, runas=None)
Return a list of users of a Postgres server.
.sp
CLI Example:
@ -19286,7 +19289,7 @@ salt \(aq*\(aq postgres.user_list
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.user_remove(username, user=None, host=None, port=None, db=None, password=None, runas=None)
.B salt.modules.postgres.user_remove(username, user=None, host=None, port=None, maintenance_db=None, password=None, runas=None)
Removes a user from the Postgres server.
.sp
CLI Example:
@ -19299,7 +19302,7 @@ salt \(aq*\(aq postgres.user_remove \(aqusername\(aq
.UNINDENT
.INDENT 0.0
.TP
.B salt.modules.postgres.user_update(username, user=None, host=None, port=None, db=None, password=None, createdb=False, createuser=False, encrypted=False, replication=False, rolepassword=None, groups=None, runas=None)
.B salt.modules.postgres.user_update(username, user=None, host=None, port=None, maintenance_db=None, password=None, createdb=False, createuser=False, encrypted=False, replication=False, rolepassword=None, groups=None, runas=None)
Creates a Postgres user.
.sp
CLI Examples:

View file

@ -9,8 +9,10 @@ Module to provide Postgres compatibility to salt.
postgres.port: '5432'
postgres.user: 'postgres'
postgres.pass: ''
postgres.db: 'postgres'
postgres.maintenance_db: 'postgres'
The default for the maintenance_db is 'postgres' and in most cases it can
be left at the default setting.
This data can also be passed into pillar. Options passed into opts will
overwrite options passed into pillar
'''
@ -22,7 +24,6 @@ import logging
# Import salt libs
import salt.utils
from salt.exceptions import CommandNotFoundError
log = logging.getLogger(__name__)
@ -36,25 +37,28 @@ def __virtual__():
return False
def _get_runas(runas=None):
'''
Returns the default runas user for this platform
'''
if runas is not None:
return runas
if 'FreeBSD' in __grains__['os_family']:
return 'pgsql'
else:
return 'postgres'
def _run_psql(cmd, runas=None, password=None, run_cmd="cmd.run_all"):
def _run_psql(cmd, runas=None, password=None, host=None,
run_cmd="cmd.run_all"):
'''
Helper function to call psql, because the password requirement
makes this too much code to be repeated in each function below
'''
kwargs = {"runas": _get_runas(runas)}
kwargs = {}
if runas is None:
if not host:
host = __salt__['config.option']('postgres.host')
if host is None or \
host == '' or \
host == 'localhost' or \
host[0] == '/' or \
host == '127.0.0.1':
if 'FreeBSD' in __grains__['os_family']:
runas = 'pgsql'
else:
runas = 'postgres'
if runas is not None:
kwargs["runas"] = runas
if not password:
password = __salt__['config.option']('postgres.pass')
@ -69,8 +73,8 @@ def _run_psql(cmd, runas=None, password=None, run_cmd="cmd.run_all"):
return __salt__[run_cmd](cmd, **kwargs)
def version(user=None, host=None, port=None, db=None, password=None,
runas=None):
def version(user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Return the version of a Postgres server.
@ -80,15 +84,16 @@ def version(user=None, host=None, port=None, db=None, password=None,
'''
query = 'SELECT setting FROM pg_catalog.pg_settings ' \
'WHERE name = \'server_version\''
cmd = _psql_cmd('-c', query, '-t',
host=host, user=user, port=port, db=db, password=password)
ret = _run_psql(cmd, runas=runas, password=password)
cmd = _psql_cmd('-c', query, '-t', host=host, user=user,
port=port, maintenance_db=maintenance_db,
password=password)
ret = _run_psql(cmd, runas=runas, password=password, host=host)
for line in ret['stdout'].splitlines():
return line
def _connection_defaults(user=None, host=None, port=None, db=None,
def _connection_defaults(user=None, host=None, port=None, maintenance_db=None,
password=None):
'''
Returns a tuple of (user, host, port, db) with config, pillar, or default
@ -100,12 +105,12 @@ def _connection_defaults(user=None, host=None, port=None, db=None,
host = __salt__['config.option']('postgres.host')
if not port:
port = __salt__['config.option']('postgres.port')
if not db:
db = __salt__['config.option']('postgres.db')
if not maintenance_db:
maintenance_db = __salt__['config.option']('postgres.maintenance_db')
if not password:
password = __salt__['config.option']('postgres.pass')
return (user, host, port, db, password)
return (user, host, port, maintenance_db, password)
def _psql_cmd(*args, **kwargs):
@ -115,11 +120,11 @@ def _psql_cmd(*args, **kwargs):
Accept optional keyword arguments: user, host and port as well as any
number or positional arguments to be added to the end of command.
'''
(user, host, port, db, password) = _connection_defaults(
(user, host, port, maintenance_db, password) = _connection_defaults(
kwargs.get('user'),
kwargs.get('host'),
kwargs.get('port'),
kwargs.get('db'),
kwargs.get('maintenance_db'),
kwargs.get('password'))
cmd = [salt.utils.which('psql'),
@ -133,8 +138,9 @@ def _psql_cmd(*args, **kwargs):
cmd += ['--host', host]
if port:
cmd += ['--port', port]
if db:
cmd += ['--dbname', db]
if maintenance_db is None:
maintenance_db = "postgres"
cmd += ['--dbname', maintenance_db]
cmd += args
cmdstr = ' '.join(map(pipes.quote, cmd))
return cmdstr
@ -142,7 +148,7 @@ def _psql_cmd(*args, **kwargs):
# Database related actions
def db_list(user=None, host=None, port=None, db=None,
def db_list(user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Return dictionary with information about databases of a Postgres server.
@ -166,10 +172,10 @@ def db_list(user=None, host=None, port=None, db=None,
'datacl as "Access privileges" FROM pg_database pgd, ' \
'pg_roles pga WHERE pga.oid = pgd.datdba'
cmd = _psql_cmd('-c', query, '-t',
host=host, user=user, port=port, db=db, password=password)
cmd = _psql_cmd('-c', query, '-t', host=host, user=user, port=port,
maintenance_db=maintenance_db, password=password)
cmdret = _run_psql(cmd, runas=runas, password=password)
cmdret = _run_psql(cmd, runas=runas, password=password, host=host)
if cmdret['retcode'] > 0:
return ret
@ -184,8 +190,8 @@ def db_list(user=None, host=None, port=None, db=None,
return ret
def db_exists(name, user=None, host=None, port=None, db=None, password=None,
runas=None):
def db_exists(name, user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Checks if a database exists on the Postgres server.
@ -194,7 +200,8 @@ def db_exists(name, user=None, host=None, port=None, db=None, password=None,
salt '*' postgres.db_exists 'dbname'
'''
databases = db_list(user=user, host=host, port=port, db=db,
databases = db_list(user=user, host=host, port=port,
maintenance_db=maintenance_db,
password=password, runas=runas)
return name in databases
@ -203,7 +210,7 @@ def db_create(name,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
tablespace=None,
encoding=None,
@ -248,14 +255,15 @@ def db_create(name,
query += ' '.join(with_chunks)
# Execute the command
cmd = _psql_cmd('-c', query, user=user, host=host, port=port, db=db,
cmd = _psql_cmd('-c', query, user=user, host=host, port=port,
maintenance_db=maintenance_db,
password=password)
ret = _run_psql(cmd, runas=runas, password=password)
ret = _run_psql(cmd, runas=runas, password=password, host=host)
return ret['retcode'] == 0
def db_remove(name, user=None, host=None, port=None, db=None,
def db_remove(name, user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Removes a databases from the Postgres server.
@ -267,15 +275,15 @@ def db_remove(name, user=None, host=None, port=None, db=None,
# db doesnt exist, proceed
query = 'DROP DATABASE {0}'.format(name)
cmd = _psql_cmd('-c', query, user=user, host=host, port=port, db=db,
password=password)
ret = _run_psql(cmd, runas=runas, password=password)
cmd = _psql_cmd('-c', query, user=user, host=host, port=port,
maintenance_db=maintenance_db, password=password)
ret = _run_psql(cmd, runas=runas, password=password, host=host)
return ret['retcode'] == 0
# User related actions
def user_list(user=None, host=None, port=None, db=None,
def user_list(user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Return a dict with information about users of a Postgres server.
@ -301,7 +309,7 @@ def user_list(user=None, host=None, port=None, db=None,
ver = version(user=user,
host=host,
port=port,
db=db,
maintenance_db=maintenance_db,
password=password,
runas=runas).split('.')
if len(ver) >= 2 and int(ver[0]) >= 9 and int(ver[1]) >= 1:
@ -318,10 +326,10 @@ def user_list(user=None, host=None, port=None, db=None,
'rolconnlimit, rolvaliduntil::timestamp(0), rolconfig '
'FROM pg_roles'
)
cmd = _psql_cmd('-c', query, '-t',
host=host, user=user, port=port, db=db, password=password)
cmd = _psql_cmd('-c', query, '-t', host=host, user=user, port=port,
maintenace_db=maintenance_db, password=password)
cmdret = _run_psql(cmd, runas=runas, password=password)
cmdret = _run_psql(cmd, runas=runas, password=password, host=host)
if cmdret['retcode'] > 0:
return ret
@ -350,7 +358,7 @@ def user_list(user=None, host=None, port=None, db=None,
return ret
def user_exists(name, user=None, host=None, port=None, db=None,
def user_exists(name, user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Checks if a user exists on the Postgres server.
@ -363,7 +371,7 @@ def user_exists(name, user=None, host=None, port=None, db=None,
return name in user_list(user=user,
host=host,
port=port,
db=db,
maintenance_db=maintenance_db,
password=password,
runas=runas)
@ -373,7 +381,7 @@ def _role_create(name,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -394,7 +402,8 @@ def _role_create(name,
create_type = 'ROLE'
# check if role exists
if user_exists(name, user, host, port, db, password=password, runas=runas):
if user_exists(name, user, host, port, maintenance_db,
password=password, runas=runas):
log.info('{0} \'{1}\' already exists'.format(create_type, name,))
return False
@ -418,16 +427,17 @@ def _role_create(name,
if sub_cmd.endswith('WITH'):
sub_cmd = sub_cmd.replace(' WITH', '')
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port, db=db,
password=password)
return _run_psql(cmd, runas=runas, password=password, run_cmd="cmd.run")
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port,
maintenance_db=maintenance_db, password=password)
return _run_psql(cmd, runas=runas, password=password, host=host,
run_cmd="cmd.run")
def user_create(username,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -449,7 +459,7 @@ def user_create(username,
user,
host,
port,
db,
maintenance_db,
password,
createdb,
createuser,
@ -465,7 +475,7 @@ def _role_update(name,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -479,7 +489,8 @@ def _role_update(name,
'''
# check if user exists
if not user_exists(name, user, host, port, db, password, runas=runas):
if not user_exists(name, user, host, port, maintenance_db, password,
runas=runas):
log.info('User \'{0}\' does not exist'.format(name,))
return False
@ -502,16 +513,17 @@ def _role_update(name,
for group in groups.split(','):
sub_cmd = '{0}; GRANT {1} TO {2}'.format(sub_cmd, group, name)
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port, db=db,
password=password)
return _run_psql(cmd, runas=runas, password=password, run_cmd="cmd.run")
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port,
maintenance_db=maintenance_db, password=password)
return _run_psql(cmd, runas=runas, password=password, host=host,
run_cmd="cmd.run")
def user_update(username,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -531,7 +543,7 @@ def user_update(username,
user,
host,
port,
db,
maintenance_db,
password,
createdb,
createuser,
@ -542,24 +554,26 @@ def user_update(username,
runas)
def _role_remove(name, user=None, host=None, port=None, db=None,
def _role_remove(name, user=None, host=None, port=None, maintenance_db=None,
password=None, runas=None):
'''
Removes a role from the Postgres Server
'''
# check if user exists
if not user_exists(name, user, host, port, db, password=password,
runas=runas):
if not user_exists(name, user, host, port, maintenance_db,
password=password, runas=runas):
log.info('User \'{0}\' does not exist'.format(name,))
return False
# user exists, proceed
sub_cmd = 'DROP ROLE {0}'.format(name)
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port, db=db,
password=password)
_run_psql(cmd, runas=runas, password=password, run_cmd="cmd.run")
if not user_exists(name, user, host, port, db, password=password, runas=runas):
cmd = _psql_cmd('-c', sub_cmd, host=host, user=user, port=port,
maintenance_db=maintenance_db, password=password)
_run_psql(cmd, runas=runas, password=password, host=host,
run_cmd="cmd.run")
if not user_exists(name, user, host, port, maintenance_db,
password=password, runas=runas):
return True
else:
log.info('Failed to delete user \'{0}\'.'.format(name, ))
@ -569,7 +583,7 @@ def user_remove(username,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
runas=None):
'''
@ -579,7 +593,8 @@ def user_remove(username,
salt '*' postgres.user_remove 'username'
'''
return _role_remove(username, user, host, port, db, password, runas)
return _role_remove(username, user, host, port, maintenance_db,
password, runas)
# Group related actions
@ -588,7 +603,7 @@ def group_create(groupname,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -611,7 +626,7 @@ def group_create(groupname,
user,
host,
port,
db,
maintenance_db,
password,
createdb,
createuser,
@ -627,7 +642,7 @@ def group_update(groupname,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
createdb=False,
createuser=False,
@ -647,7 +662,7 @@ def group_update(groupname,
user,
host,
port,
db,
maintenance_db,
password,
createdb,
createuser,
@ -662,7 +677,7 @@ def group_remove(groupname,
user=None,
host=None,
port=None,
db=None,
maintenance_db=None,
password=None,
runas=None):
'''
@ -672,4 +687,5 @@ def group_remove(groupname,
salt '*' postgres.group_remove 'groupname'
'''
return _role_remove(groupname, user, host, port, db, password, runas)
return _role_remove(groupname, user, host, port, maintenance_db,
password, runas)