1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
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
|