%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/modules/ |
Current File : //usr/lib/python2.7/site-packages/salt/modules/deb_postgres.py |
# -*- coding: utf-8 -*- ''' Module to provide Postgres compatibility to salt for debian family specific tools. ''' # Import python libs from __future__ import absolute_import, print_function, unicode_literals import logging import pipes # Import salt libs import salt.utils.path from salt.ext import six # Import 3rd-party libs log = logging.getLogger(__name__) __virtualname__ = 'postgres' def __virtual__(): ''' Only load this module if the pg_createcluster bin exists ''' if salt.utils.path.which('pg_createcluster'): return __virtualname__ return (False, 'postgres execution module not loaded: pg_createcluste command not found.') def cluster_create(version, name='main', port=None, locale=None, encoding=None, datadir=None): ''' Adds a cluster to the Postgres server. .. warning: Only works for debian family distros so far. CLI Example: .. code-block:: bash salt '*' postgres.cluster_create '9.3' salt '*' postgres.cluster_create '9.3' 'main' salt '*' postgres.cluster_create '9.3' locale='fr_FR' ''' cmd = [salt.utils.path.which('pg_createcluster')] if port: cmd += ['--port', six.text_type(port)] if locale: cmd += ['--locale', locale] if encoding: cmd += ['--encoding', encoding] if datadir: cmd += ['--datadir', datadir] cmd += [version, name] cmdstr = ' '.join([pipes.quote(c) for c in cmd]) ret = __salt__['cmd.run_all'](cmdstr, python_shell=False) if ret.get('retcode', 0) != 0: log.error('Error creating a Postgresql' ' cluster {0}/{1}'.format(version, name)) return False return ret def cluster_list(verbose=False): ''' Return a list of cluster of Postgres server (tuples of version and name). CLI Example: .. code-block:: bash salt '*' postgres.cluster_list salt '*' postgres.cluster_list verbose=True ''' cmd = [salt.utils.path.which('pg_lsclusters'), '--no-header'] ret = __salt__['cmd.run_all'](' '.join([pipes.quote(c) for c in cmd])) if ret.get('retcode', 0) != 0: log.error('Error listing clusters') cluster_dict = _parse_pg_lscluster(ret['stdout']) if verbose: return cluster_dict return cluster_dict.keys() def cluster_exists(version, name='main'): ''' Checks if a given version and name of a cluster exists. CLI Example: .. code-block:: bash salt '*' postgres.cluster_exists '9.3' salt '*' postgres.cluster_exists '9.3' 'main' ''' return '{0}/{1}'.format(version, name) in cluster_list() def cluster_remove(version, name='main', stop=False): ''' Remove a cluster on a Postgres server. By default it doesn't try to stop the cluster. CLI Example: .. code-block:: bash salt '*' postgres.cluster_remove '9.3' salt '*' postgres.cluster_remove '9.3' 'main' salt '*' postgres.cluster_remove '9.3' 'main' stop=True ''' cmd = [salt.utils.path.which('pg_dropcluster')] if stop: cmd += ['--stop'] cmd += [version, name] cmdstr = ' '.join([pipes.quote(c) for c in cmd]) ret = __salt__['cmd.run_all'](cmdstr, python_shell=False) # FIXME - return Boolean ? if ret.get('retcode', 0) != 0: log.error('Error removing a Postgresql' ' cluster {0}/{1}'.format(version, name)) else: ret['changes'] = ('Successfully removed' ' cluster {0}/{1}').format(version, name) return ret def _parse_pg_lscluster(output): ''' Helper function to parse the output of pg_lscluster ''' cluster_dict = {} for line in output.splitlines(): version, name, port, status, user, datadir, log = ( line.split()) cluster_dict['{0}/{1}'.format(version, name)] = { 'port': int(port), 'status': status, 'user': user, 'datadir': datadir, 'log': log} return cluster_dict