from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os from functools import partial from ansible import errors from ansible.module_utils.common.text import formatters def resolve_grafana_url(url, config): try: protocol = config.get('protocol', 'http') addr = config.get('http_addr', '127.0.0.1') port = config.get('http_port', '3000') serve_from_sub_path = config.get('serve_from_sub_path', False) if not serve_from_sub_path: return "%s://%s:%s" % (protocol, addr, port) return url.replace('%(protocol)s', str(protocol)).replace('%(domain)s', str(addr)).replace('%(http_port)s', str(port)) except Exception as e: raise errors.AnsibleFilterError("resolve_grafana_url(): %s" % str(e)) def grafana_dashboard_subdirs(dashboards): try: dirs = [] for dashboard in dashboards: if 'file' in dashboard: if '/' in dashboard['file']: dirs.append(os.path.dirname(dashboard['file'])) else: if '/' in dashboard['name']: dirs.append(os.path.dirname(dashboard['name'])) return dirs except Exception as e: raise errors.AnsibleFilterError("grafana_dashboard_subdirs(): %s" % str(e)) def grafana_dashboard_dest(dashboard): try: key = 'name' if 'file' in dashboard: key = 'file' if '/' in dashboard[key]: return "%s/%s_%s" % (os.path.dirname(dashboard[key]), dashboard['datasource'], os.path.basename(dashboard[key])) return "%s_%s" % (dashboard['datasource'], dashboard[key]) except Exception as e: raise errors.AnsibleFilterError("grafana_dashboard_dest(): %s" % str(e)) class FilterModule(object): filter_map = { 'resolve_grafana_url': resolve_grafana_url, 'grafana_dashboard_subdirs': grafana_dashboard_subdirs, 'grafana_dashboard_dest': grafana_dashboard_dest, } def filters(self): return self.filter_map