from __future__ import (absolute_import, division, print_function) __metaclass__ = type from functools import partial from ansible import errors _multitarget_id_map_ = { "blackbox/probe": (lambda vars, config: "%s-%s" % (config['svc_kind'], config['svc_instance'])), "ssl/probe": (lambda vars, config: "%s-%s-%s" % (config['module'], config['sslcert_instance'], vars['inventory_hostname'])), "ipmi/remote": (lambda vars, config: vars['inventory_hostname']), "nut/ups": (lambda vars, config: config['ups']), "snmp/probe": (lambda vars, config: config['snmp_instance']), "modbus/probe": (lambda vars, config: config['modbus_instance']), "whawty-nginx-sso": (lambda vars, config: "%s-%s" % (config['app_instance'], vars['inventory_hostname'])), } def prometheus_job_targets(jobs, vars): try: result = [] for job in jobs: multitarget_config_varname = 'prometheus_job_multitarget_' + job.replace('-', '_').replace('/', '__') if multitarget_config_varname in vars: for exporter_hostname, configs in vars[multitarget_config_varname].items(): for config in configs: id = _multitarget_id_map_[job](vars, config) result.append({'_id': id, 'job': job, 'instance': vars['inventory_hostname'], 'enabled': True, 'exporter_hostname': exporter_hostname, 'config': config}) else: enabled = job in vars['prometheus_exporters_default'] or job in vars['prometheus_exporters_extra'] result.append({'_id': vars['inventory_hostname'], 'job': job, 'instance': vars['inventory_hostname'], 'enabled': enabled}) return result except Exception as e: raise errors.AnsibleFilterError("prometheus_job_targets(): %s" % repr(e)) class FilterModule(object): ''' prometheus filters ''' filter_map = { 'prometheus_job_targets': prometheus_job_targets, } def filters(self): return self.filter_map