%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/states/ |
Current File : //usr/lib/python2.7/site-packages/salt/states/logadm.py |
# -*- coding: utf-8 -*- ''' Management of logs using Solaris logadm. :maintainer: Jorge Schrauwen <sjorge@blackdot.be> :maturity: new :depends: salt.modulus.logadm :platform: Oracle Solaris, Sun Solaris, illumos .. versionadded:: nitrogen .. code-block:: yaml .. note:: TODO ''' # Import Python libs from __future__ import absolute_import, print_function, unicode_literals import logging # Import salt libs import salt.utils.args import salt.utils.data log = logging.getLogger(__name__) # Define the state's virtual name __virtualname__ = 'logadm' def __virtual__(): ''' Provides logadm state if we have the module ''' if 'logadm.list_conf' in __salt__: return True else: return ( False, '{0} state module can only if the logadm execution module is present'.format( __virtualname__ ) ) def rotate(name, **kwargs): ''' Add a log to the logadm configuration name : string alias for entryname kwargs : boolean|string|int optional additional flags and parameters ''' ret = {'name': name, 'changes': {}, 'result': None, 'comment': ''} # cleanup kwargs kwargs = salt.utils.args.clean_kwargs(**kwargs) # inject name as entryname if 'entryname' not in kwargs: kwargs['entryname'] = name # figure out log_file and entryname if 'log_file' not in kwargs or not kwargs['log_file']: if 'entryname' in kwargs and kwargs['entryname']: if kwargs['entryname'].startswith('/'): kwargs['log_file'] = kwargs['entryname'] # check for log_file if 'log_file' not in kwargs or not kwargs['log_file']: ret['result'] = False ret['comment'] = 'Missing log_file attribute!' else: # lookup old configuration old_config = __salt__['logadm.list_conf']() # remove existing entry if kwargs['log_file'] in old_config: res = __salt__['logadm.remove'](kwargs['entryname'] if 'entryname' in kwargs else kwargs['log_file']) ret['result'] = 'Error' not in res if not ret['result']: ret['comment'] = res['Error'] ret['changes'] = {} # add new entry res = __salt__['logadm.rotate'](name, **kwargs) ret['result'] = 'Error' not in res if ret['result']: new_config = __salt__['logadm.list_conf']() ret['comment'] = 'Log configuration {}'.format('updated' if kwargs['log_file'] in old_config else 'added') if kwargs['log_file'] in old_config: for key, val in salt.utils.data.compare_dicts(old_config[kwargs['log_file']], new_config[kwargs['log_file']]).items(): ret['changes'][key] = val['new'] else: ret['changes'] = new_config[kwargs['log_file']] log.debug(ret['changes']) else: ret['comment'] = res['Error'] # NOTE: we need to remove the log file first # potentially the log configuraiton can get lost :s if kwargs['log_file'] in old_config: ret['changes'] = {kwargs['log_file']: None} else: ret['changes'] = {} return ret def remove(name, log_file=None): ''' Remove a log from the logadm configuration name : string entryname log_file : string (optional) log file path .. note:: If log_file is specified it will be used instead of the entry name. ''' ret = {'name': name, 'changes': {}, 'result': None, 'comment': ''} # retrieve all log configuration config = __salt__['logadm.list_conf']() # figure out log_file and name if not log_file: if name.startswith('/'): log_file = name name = None else: for log in config: if 'entryname' in config[log] and config[log]['entryname'] == name: log_file = config[log]['log_file'] break if not name: for log in config: if 'log_file' in config[log] and config[log]['log_file'] == log_file: if 'entryname' in config[log]: name = config[log]['entryname'] break # remove log if needed if log_file in config: res = __salt__['logadm.remove'](name if name else log_file) ret['result'] = 'Error' not in res if ret['result']: ret['comment'] = 'Configuration for {} removed.'.format(log_file) ret['changes'][log_file] = None else: ret['comment'] = res['Error'] else: ret['result'] = True ret['comment'] = 'No configuration for {} present.'.format(log_file) return ret # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4