%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/states/ |
Current File : //usr/lib/python2.7/site-packages/salt/states/mysql_database.py |
# -*- coding: utf-8 -*- ''' Management of MySQL databases (schemas) ======================================= :depends: - MySQLdb Python module :configuration: See :py:mod:`salt.modules.mysql` for setup instructions. The mysql_database module is used to create and manage MySQL databases. Databases can be set as either absent or present. .. code-block:: yaml frank: mysql_database.present ''' from __future__ import absolute_import, print_function, unicode_literals import sys import logging log = logging.getLogger(__name__) def __virtual__(): ''' Only load if the mysql module is available in __salt__ ''' return 'mysql.db_exists' in __salt__ def _get_mysql_error(): ''' Look in module context for a MySQL error. Eventually we should make a less ugly way of doing this. ''' return sys.modules[ __salt__['test.ping'].__module__ ].__context__.pop('mysql.error', None) def present(name, character_set=None, collate=None, **connection_args): ''' Ensure that the named database is present with the specified properties name The name of the database to manage ''' ret = {'name': name, 'changes': {}, 'result': True, 'comment': 'Database {0} is already present'.format(name)} # check if database exists existing = __salt__['mysql.db_get'](name, **connection_args) if existing: alter = False if character_set and character_set != existing.get('character_set'): log.debug('character set differes from %s : %s', character_set, existing.get('character_set')) alter = True if collate and collate != existing.get('collate'): log.debug('collate set differs from %s : %s', collate, existing.get('collate')) alter = True if alter: __salt__['mysql.alter_db']( name, character_set=character_set, collate=collate, **connection_args) current = __salt__['mysql.db_get'](name, **connection_args) if existing.get('collate', None) != current.get('collate', None): ret['changes'].update({'collate': { 'before': existing.get('collate', None), 'now': current.get('collate', None)}}) if existing.get('character_set', None) != current.get('character_set', None): ret['changes'].update({'character_set': { 'before': existing.get('character_set', None), 'now': current.get('character_set', None)}}) return ret else: err = _get_mysql_error() if err is not None: ret['comment'] = err ret['result'] = False return ret if __opts__['test']: ret['result'] = None ret['comment'] = ('Database {0} is not present and needs to be created' ).format(name) return ret # The database is not present, make it! if __salt__['mysql.db_create']( name, character_set=character_set, collate=collate, **connection_args): ret['comment'] = 'The database {0} has been created'.format(name) ret['changes'][name] = 'Present' else: ret['comment'] = 'Failed to create database {0}'.format(name) err = _get_mysql_error() if err is not None: ret['comment'] += ' ({0})'.format(err) ret['result'] = False return ret def absent(name, **connection_args): ''' Ensure that the named database is absent name The name of the database to remove ''' ret = {'name': name, 'changes': {}, 'result': True, 'comment': ''} #check if db exists and remove it if __salt__['mysql.db_exists'](name, **connection_args): if __opts__['test']: ret['result'] = None ret['comment'] = \ 'Database {0} is present and needs to be removed'.format(name) return ret if __salt__['mysql.db_remove'](name, **connection_args): ret['comment'] = 'Database {0} has been removed'.format(name) ret['changes'][name] = 'Absent' return ret else: err = _get_mysql_error() if err is not None: ret['comment'] = 'Unable to remove database {0} ' \ '({1})'.format(name, err) ret['result'] = False return ret else: err = _get_mysql_error() if err is not None: ret['comment'] = err ret['result'] = False return ret # fallback ret['comment'] = ('Database {0} is not present, so it cannot be removed' ).format(name) return ret