%PDF- %PDF-
Direktori : /usr/lib/python2.7/site-packages/salt/states/ |
Current File : //usr/lib/python2.7/site-packages/salt/states/influxdb_retention_policy.py |
# -*- coding: utf-8 -*- ''' Management of Influxdb retention policies ========================================= .. versionadded:: 2017.7.0 (compatible with InfluxDB version 0.9+) ''' # Import Python libs from __future__ import absolute_import, print_function, unicode_literals def __virtual__(): ''' Only load if the influxdb module is available ''' if 'influxdb.db_exists' in __salt__: return 'influxdb_retention_policy' return False def convert_duration(duration): ''' Convert the a duration string into XXhYYmZZs format duration Duration to convert Returns: duration_string String representation of duration in XXhYYmZZs format ''' # durations must be specified in days, weeks or hours if duration.endswith('h'): hours = int(duration.split('h')) elif duration.endswith('d'): days = duration.split('d') hours = int(days[0]) * 24 elif duration.endswith('w'): weeks = duration.split('w') hours = int(weeks[0]) * 24 * 7 duration_string = str(hours)+'h0m0s' return duration_string def present(name, database, duration="7d", replication=1, default=False, **client_args): ''' Ensure that given retention policy is present. name Name of the retention policy to create. database Database to create retention policy on. ''' ret = {'name': name, 'changes': {}, 'result': True, 'comment': 'retention policy {0} is already present'.format(name)} if not __salt__['influxdb.retention_policy_exists'](name=name, database=database, **client_args): if __opts__['test']: ret['result'] = None ret['comment'] = ' {0} is absent and will be created'\ .format(name) return ret if __salt__['influxdb.create_retention_policy']( database, name, duration, replication, default, **client_args ): ret['comment'] = 'retention policy {0} has been created'\ .format(name) ret['changes'][name] = 'Present' return ret else: ret['comment'] = 'Failed to create retention policy {0}'\ .format(name) ret['result'] = False return ret else: current_policy = __salt__['influxdb.get_retention_policy'](database=database, name=name, **client_args) update_policy = False if current_policy['duration'] != convert_duration(duration): update_policy = True ret['changes']['duration'] = "Retention changed from {0} to {1}.".format(current_policy['duration'], duration) if current_policy['replicaN'] != replication: update_policy = True ret['changes']['replication'] = "Replication changed from {0} to {1}.".format(current_policy['replicaN'], replication) if current_policy['default'] != default: update_policy = True ret['changes']['default'] = "Default changed from {0} to {1}.".format(current_policy['default'], default) if update_policy: if __opts__['test']: ret['result'] = None ret['comment'] = ' {0} is present and set to be changed'\ .format(name) return ret else: if __salt__['influxdb.alter_retention_policy']( database, name, duration, replication, default, **client_args ): ret['comment'] = 'retention policy {0} has been changed'\ .format(name) return ret else: ret['comment'] = 'Failed to update retention policy {0}'\ .format(name) ret['result'] = False return ret return ret def absent(name, database, **client_args): ''' Ensure that given retention policy is absent. name Name of the retention policy to remove. database Name of the database that the retention policy was defined on. ''' ret = {'name': name, 'changes': {}, 'result': True, 'comment': 'retention policy {0} is not present'.format(name)} if __salt__['influxdb.retention_policy_exists'](database, name, **client_args): if __opts__['test']: ret['result'] = None ret['comment'] = ( 'retention policy {0} is present and needs to be removed' ).format(name) return ret if __salt__['influxdb.drop_retention_policy'](database, name, **client_args): ret['comment'] = 'retention policy {0} has been removed'\ .format(name) ret['changes'][name] = 'Absent' return ret else: ret['comment'] = 'Failed to remove retention policy {0}'\ .format(name) ret['result'] = False return ret return ret