%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/modules/ |
Current File : //usr/lib/python2.7/site-packages/salt/modules/kapacitor.py |
# -*- coding: utf-8 -*- ''' Kapacitor execution module. :configuration: This module accepts connection configuration details either as parameters or as configuration settings in /etc/salt/minion on the relevant minions:: kapacitor.host: 'localhost' kapacitor.port: 9092 .. versionadded:: 2016.11.0 Also protocol and SSL settings could be configured:: kapacitor.unsafe_ssl: 'false' kapacitor.protocol: 'http' .. versionadded:: 2019.2.0 This data can also be passed into pillar. Options passed into opts will overwrite options passed into pillar. ''' # Import Python libs from __future__ import absolute_import, print_function, unicode_literals # Import Salt lobs from salt.ext import six import salt.utils.http import salt.utils.json import salt.utils.path from salt.utils.decorators import memoize import logging as logger # Setup the logger log = logger.getLogger(__name__) def __virtual__(): return 'kapacitor' if salt.utils.path.which('kapacitor') else False @memoize def version(): ''' Get the kapacitor version. ''' version = __salt__['pkg.version']('kapacitor') if not version: version = six.string_types(__salt__['config.option']('kapacitor.version', 'latest')) return version def _get_url(): ''' Get the kapacitor URL. ''' protocol = __salt__['config.option']('kapacitor.protocol', 'http') host = __salt__['config.option']('kapacitor.host', 'localhost') port = __salt__['config.option']('kapacitor.port', 9092) return '{0}://{1}:{2}'.format(protocol, host, port) def get_task(name): ''' Get a dict of data on a task. name Name of the task to get information about. CLI Example: .. code-block:: bash salt '*' kapacitor.get_task cpu ''' url = _get_url() if version() < '0.13': task_url = '{0}/task?name={1}'.format(url, name) else: task_url = '{0}/kapacitor/v1/tasks/{1}?skip-format=true'.format(url, name) response = salt.utils.http.query(task_url, status=True) if response['status'] == 404: return None data = salt.utils.json.loads(response['body']) if version() < '0.13': return { 'script': data['TICKscript'], 'type': data['Type'], 'dbrps': data['DBRPs'], 'enabled': data['Enabled'], } return { 'script': data['script'], 'type': data['type'], 'dbrps': data['dbrps'], 'enabled': data['status'] == 'enabled', } def _run_cmd(cmd): ''' Run a Kapacitor task and return a dictionary of info. ''' ret = {} env_vars = { 'KAPACITOR_URL': _get_url(), 'KAPACITOR_UNSAFE_SSL': __salt__['config.option']('kapacitor.unsafe_ssl', 'false'), } result = __salt__['cmd.run_all'](cmd, env=env_vars) if result.get('stdout'): ret['stdout'] = result['stdout'] if result.get('stderr'): ret['stderr'] = result['stderr'] ret['success'] = result['retcode'] == 0 return ret def define_task(name, tick_script, task_type='stream', database=None, retention_policy='default', dbrps=None): ''' Define a task. Serves as both create/update. name Name of the task. tick_script Path to the TICK script for the task. Can be a salt:// source. task_type Task type. Defaults to 'stream' dbrps A list of databases and retention policies in "dbname"."rpname" format to fetch data from. For backward compatibility, the value of 'database' and 'retention_policy' will be merged as part of dbrps. .. versionadded:: 2019.2.0 database Which database to fetch data from. retention_policy Which retention policy to fetch data from. Defaults to 'default'. CLI Example: .. code-block:: bash salt '*' kapacitor.define_task cpu salt://kapacitor/cpu.tick database=telegraf ''' if not database and not dbrps: log.error("Providing database name or dbrps is mandatory.") return False if version() < '0.13': cmd = 'kapacitor define -name {0}'.format(name) else: cmd = 'kapacitor define {0}'.format(name) if tick_script.startswith('salt://'): tick_script = __salt__['cp.cache_file'](tick_script, __env__) cmd += ' -tick {0}'.format(tick_script) if task_type: cmd += ' -type {0}'.format(task_type) if not dbrps: dbrps = [] if database and retention_policy: dbrp = '{0}.{1}'.format(database, retention_policy) dbrps.append(dbrp) if dbrps: for dbrp in dbrps: cmd += ' -dbrp {0}'.format(dbrp) return _run_cmd(cmd) def delete_task(name): ''' Delete a kapacitor task. name Name of the task to delete. CLI Example: .. code-block:: bash salt '*' kapacitor.delete_task cpu ''' return _run_cmd('kapacitor delete tasks {0}'.format(name)) def enable_task(name): ''' Enable a kapacitor task. name Name of the task to enable. CLI Example: .. code-block:: bash salt '*' kapacitor.enable_task cpu ''' return _run_cmd('kapacitor enable {0}'.format(name)) def disable_task(name): ''' Disable a kapacitor task. name Name of the task to disable. CLI Example: .. code-block:: bash salt '*' kapacitor.disable_task cpu ''' return _run_cmd('kapacitor disable {0}'.format(name))