3
from charmhelpers import fetch
4
from charmhelpers.core import host, hookenv
5
from charmhelpers.core.templating import render
6
from charms.reactive import (
7
when, when_not, set_state, remove_state
9
from charms.reactive.helpers import any_file_changed, data_changed
12
SVCNAME = 'prometheus-snmp-exporter'
13
PKGNAMES = ['prometheus-snmp-exporter']
15
SNMP_EXPORTER_YML = '/etc/prometheus/snmp.yaml'
16
SNMP_EXPORTER_YML_TMPL = 'snmp.yaml.j2'
19
def templates_changed(tmpl_list):
20
return any_file_changed(['templates/{}'.format(x) for x in tmpl_list])
23
@when('snmp-exporter.do-install')
24
def install_packages():
25
fetch.configure_sources()
27
fetch.apt_install(PKGNAMES)
28
remove_state('snmp-exporter.do-install')
31
def validate_config():
32
return yaml.safe_load(open(SNMP_EXPORTER_YML))
35
@when('alertmanager.do-reconfig-yaml')
36
def write_alertmanager_config_yaml():
37
config = hookenv.config()
38
render(source=SNMP_EXPORTER_YML_TMPL,
39
target=SNMP_EXPORTER_YML,
40
context={'config': config}
43
hookenv.open_port(PORT_DEF)
44
set_state('snmp-exporter.do-restart')
45
remove_state('snmp-exporter.do-reconfig-yaml')
48
@when_not('snmp-exporter.started')
49
def setup_alertmanager():
50
hookenv.status_set('maintenance', 'Installing software')
52
set_state('snmp-exporter.do-check-reconfig')
55
@when('snmp-exporter.started')
57
set_state('snmp-exporter.do-check-reconfig')
60
@when('snmp-exporter.do-check-reconfig')
61
def check_reconfig_alertmanager():
62
config = hookenv.config()
63
install_opts = ('install_sources', 'install_keys')
64
if any(config.changed(opt) for opt in install_opts):
65
set_state('snmp-exporter.do-install')
67
if data_changed('snmp-exporter.config', config):
68
set_state('alertmanager.do-reconfig-yaml')
70
if templates_changed([SNMP_EXPORTER_YML_TMPL]):
71
set_state('snmp-exporter.do-reconfig-yaml')
73
remove_state('snmp-exporter.do-check-reconfig')
76
@when('snmp-exporter.do-restart')
77
def restart_alertmanager():
78
if not host.service_running(SVCNAME):
79
hookenv.log('Starting {}...'.format(SVCNAME))
80
host.service_start(SVCNAME)
82
hookenv.log('Restarting {}, config file changed...'.format(SVCNAME))
83
host.service_restart(SVCNAME)
84
hookenv.status_set('active', 'Ready')
85
set_state('snmp-exporter.started')
86
remove_state('snmp-exporter.do-restart')
90
@when('snmp-exporter.started')
91
@when('target.available')
92
def configure_snmp_exporter_relation(target):
93
target.configure(PORT_DEF)