Merge lp:~aluria/charms/trusty/collectd/charm-collectd-allinone into lp:~canonical-bootstack/charms/trusty/collectd/pre-layer

Proposed by Alvaro Uria
Status: Merged
Merged at revision: 27
Proposed branch: lp:~aluria/charms/trusty/collectd/charm-collectd-allinone
Merge into: lp:~canonical-bootstack/charms/trusty/collectd/pre-layer
Diff against target: 656 lines (+340/-80)
10 files modified
config.yaml (+0/-24)
hooks/collectd_contexts.py (+94/-2)
hooks/collectd_hooks.py (+32/-42)
hooks/collectd_utils.py (+59/-2)
templates/default.tmpl (+10/-0)
templates/openstack.conf.tmpl (+62/-0)
templates/write_http.conf.tmpl (+8/-0)
unit_tests/test_collectd_contexts.py (+61/-4)
unit_tests/test_collectd_hooks.py (+5/-4)
unit_tests/test_collectd_utils.py (+9/-2)
To merge this branch: bzr merge lp:~aluria/charms/trusty/collectd/charm-collectd-allinone
Reviewer Review Type Date Requested Status
Legacy - Canonical WTFB Pending
Review via email: mp+281401@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'config.yaml'
--- config.yaml 2015-12-10 15:09:45 +0000
+++ config.yaml 2015-12-29 16:06:20 +0000
@@ -42,30 +42,6 @@
42 type: string42 type: string
43 default: '/metrics'43 default: '/metrics'
44 description: "Path under which to expose Prometheus metrics"44 description: "Path under which to expose Prometheus metrics"
45 openstack-enable-keystone:
46 type: boolean
47 default: true
48 description: "load keystone plugin"
49 openstack-keystone-vip:
50 type: string
51 default: '172.20.168.103'
52 description: "keystone entrypoint"
53 openstack-keystone-port:
54 type: int
55 default: 5000
56 description: "port where keystone is listening"
57 openstack-username:
58 type: string
59 default: 'admin'
60 description: "keystone admin user"
61 openstack-password:
62 type: string
63 default: 'xe5iej2AiSaed5Tu'
64 description: "keystone admin password"
65 openstack-tenant-name:
66 type: string
67 default: 'admin'
68 description: "keystone admin tenant"
69 openstack-keystone-verbose:45 openstack-keystone-verbose:
70 type: string46 type: string
71 default: 'False'47 default: 'False'
7248
=== modified file 'hooks/collectd_contexts.py'
--- hooks/collectd_contexts.py 2015-12-10 17:25:19 +0000
+++ hooks/collectd_contexts.py 2015-12-29 16:06:20 +0000
@@ -4,18 +4,110 @@
4#from charmhelpers.fetch import apt_install, filter_installed_packages4#from charmhelpers.fetch import apt_install, filter_installed_packages
5from charmhelpers.core.hookenv import (5from charmhelpers.core.hookenv import (
6 config,6 config,
7 log,
8 related_units,
9 relation_get,
10 relation_ids,
7)11)
812
9from socket import gethostname13from socket import gethostname
1014
1115
12class CollectdContext(object):16class CollectdContext(object):
13 interfaces = ['target']
1417
15 def __call__(self):18 def __call__(self):
19 conf = config()
16 ctxt = {20 ctxt = {
17 'hostname': gethostname(),21 'hostname': gethostname(),
18 'interval': config('interval'),22 'interval': conf['interval'],
23 }
24
25 return ctxt
26
27
28class CollectdExporterContext(object):
29 interfaces = ['target']
30
31 def __call__(self):
32 conf = config()
33 ctxt = {
34 'host': conf['host'],
35 'port': conf['port'],
36 'push_path': conf['push-path'],
37 'format': conf['format'],
38 'store_rates': conf['store-rates']
39 }
40
41 return ctxt
42
43
44class CollectdExporterDefaultContext(object):
45 interfaces = ['target']
46
47 def __call__(self):
48 conf = config()
49 ctxt = {
50 'host': conf['host'],
51 'port': conf['port'],
52 'push_path': conf['push-path'],
53 'telemetry_path': conf['telemetry-path']
54 }
55
56 return ctxt
57
58
59class CollectdOpenstackContext(object):
60 interfaces = ['identity-admin']
61
62 def keystone_values(self):
63 """{u'service_region': u'RegionOne', u'service_password': u'XXXXXXXX',
64 u'service_port': u'5000', u'private-address': u'10.XX.XX.XXX',
65 u'service_hostname': u'10.XX.XX.XXX', u'service_username': u'admin',
66 u'service_tenant_name': u'Admin'}
67 """
68 r_id = relation_ids('identity-admin')
69 if len(r_id) != 1:
70 log('keystone:identity-admin changed but not rel-id found')
71 return None
72
73 r_unit = related_units(r_id[0])
74 if r_unit:
75 settings = relation_get(unit=r_unit[0], rid=r_id[0])
76 log('settings(rid={})=> {}'.format(str(r_id[0]), settings))
77 if 'service_password' in settings:
78 hostname = settings.get('service_hostname', None)
79 port = settings.get('service_port', None)
80 username = settings.get('service_username', None)
81 passwd = settings.get('service_password', None)
82 tenantname = settings.get('service_tenant_name', None)
83 else:
84 return None
85
86 if hostname and port and username and passwd and tenantname:
87 return (hostname, port, username, passwd, tenantname)
88 else:
89 return None
90
91 def __call__(self):
92 conf = config()
93 ks_vals = self.keystone_values()
94 if ks_vals and len(filter(lambda x: x, ks_vals)) == len(ks_vals):
95 enable_ks = True
96 else:
97 enable_ks = False
98 ks_vals = (None, None, None, None, None)
99
100 ctxt = {
101 'enable_keystone': enable_ks,
102 'keystone_vip': ks_vals[0],
103 'keystone_port': ks_vals[1],
104 'username': ks_vals[2],
105 'password': ks_vals[3],
106 'tenant_name': ks_vals[4],
107 'keystone_verbose': conf['openstack-keystone-verbose'],
108 'debug': conf['openstack-debug'],
109 'allocation_ratio_cores': conf['openstack-allocation-ratio-cores'],
110 'allocation_ratio_ram': conf['openstack-allocation-ratio-ram']
19 }111 }
20112
21 return ctxt113 return ctxt
22114
=== modified file 'hooks/collectd_hooks.py'
--- hooks/collectd_hooks.py 2015-12-11 17:29:48 +0000
+++ hooks/collectd_hooks.py 2015-12-29 16:06:20 +0000
@@ -9,9 +9,9 @@
9 #INFO,9 #INFO,
10 #ERROR,10 #ERROR,
11 #local_unit,11 #local_unit,
12 relation_ids,12 #relation_ids,
13 relation_get,13 #relation_get,
14 related_units,14 #related_units,
15 relation_set,15 relation_set,
16 #service_name,16 #service_name,
17 unit_get,17 unit_get,
@@ -26,7 +26,7 @@
26)26)
2727
28from charmhelpers.fetch import (28from charmhelpers.fetch import (
29 #add_source,29 add_source,
30 apt_install,30 apt_install,
31 #apt_purge,31 #apt_purge,
32 apt_update,32 apt_update,
@@ -38,31 +38,33 @@
3838
39from collectd_utils import (39from collectd_utils import (
40 determine_packages,40 determine_packages,
41 determine_exporter_packages,
42 determine_openstack_packages,
41 juju_log,43 juju_log,
42 register_configs,44 register_configs,
43 restart_map,45 restart_map,
44)46)
4547
46#from socket import gethostname
47
48hooks = Hooks()48hooks = Hooks()
49#CONFIGS = register_configs()
5049
5150
52@hooks.hook()51@hooks.hook()
53def install():52def install():
54 execd_preinstall()53 execd_preinstall()
54 if config('source'):
55 for s in config('source').split(';'):
56 add_source(s)
55 apt_update()57 apt_update()
56 apt_install(determine_packages(), fatal=True)58 apt_install(determine_packages(), fatal=True)
5759
5860
59@hooks.hook('start')61@hooks.hook('start')
60def start():62def start():
63 if is_relation_made('target'):
64 service_start('collectd-exporter-prometheus')
65
61 service_start('collectd')66 service_start('collectd')
6267
63 if is_relation_made('target'):
64 service_start('collectd-exporter-prometheus')
65
6668
67@hooks.hook('stop')69@hooks.hook('stop')
68def stop():70def stop():
@@ -72,7 +74,7 @@
72 service_stop('collectd-exporter-prometheus')74 service_stop('collectd-exporter-prometheus')
7375
7476
75@hooks.hook('config-changed')77@hooks.hook('config-changed', 'upgrade-charm')
76@restart_on_change(restart_map())78@restart_on_change(restart_map())
77def config_changed():79def config_changed():
78 register_configs()80 register_configs()
@@ -83,24 +85,36 @@
83 if is_relation_made('target'):85 if is_relation_made('target'):
84 juju_log('config-changed for collectd-exporter-prometheus')86 juju_log('config-changed for collectd-exporter-prometheus')
8587
86 if is_relation_made('identity-service'):88 if is_relation_made('identity-admin'):
87 juju_log('config-changed for collectd-openstack')89 juju_log('config-changed for collectd-openstack')
8890
8991
90@hooks.hook('upgrade-charm')
91def upgrade_charm():
92 pass
93
94
95# prometheus <-> collectd92# prometheus <-> collectd
96# collectd-exporter IP:port93# collectd-exporter IP:port
97@hooks.hook('target-relation-changed', 'target-relation-joined')94@hooks.hook('target-relation-changed')
98def target_relation():95def target_relation():
99 if is_relation_made('target'):96 if is_relation_made('target'):
100 host = unit_get('public-address')97 host = unit_get('public-address')
101 conf = config()98 conf = config()
102 if conf['exporter-host'] != '127.0.0.1':99 if conf['exporter-host'] != '127.0.0.1':
103 relation_set(host=str(host), port=conf['exporter-port'])100 relation_set(host=str(host), port=conf['exporter-port'])
101 register_configs()
102
103
104@hooks.hook('target-relation-joined')
105def target_joined():
106 if is_relation_made('target'):
107 apt_install(determine_exporter_packages(), fatal=True)
108 target_relation()
109
110
111@hooks.hook('identity-admin-relation-joined')
112def keystone_joined():
113 if is_relation_made('identity-admin'):
114 apt_install(determine_openstack_packages(), fatal=True)
115 register_configs()
116 juju_log('collectd-openstack module should be loaded with the '
117 'info provided by keystone:identity-admin')
104118
105119
106# collectd <-> keystone120# collectd <-> keystone
@@ -108,33 +122,9 @@
108@hooks.hook('identity-admin-relation-changed')122@hooks.hook('identity-admin-relation-changed')
109@restart_on_change(restart_map())123@restart_on_change(restart_map())
110def identity_admin_relation_changed():124def identity_admin_relation_changed():
111 #CONFIGS.write_all()
112 keystone_joined()125 keystone_joined()
113126
114127
115@hooks.hook('identity-admin-relation-joined')
116def keystone_joined():
117 """
118 service_hostname
119 service_port
120 service_username
121 service_tenant_name
122 service_region
123 service_password
124 """
125 r_id = relation_ids('identity-admin')
126 if len(r_id) != 1:
127 juju_log('keystone:identity-admin changed by not rel-id found')
128 return
129
130 for r_unit in related_units(r_id[0]):
131 settings = relation_get(unit=r_unit, rid=r_id[0])
132 juju_log('settings(rid={})=> {}'.format(str(r_id[0]), settings))
133
134 juju_log('collectd-openstack module should be loaded with the '
135 'info provided by keystone:identity-admin')
136
137
138def main():128def main():
139 try:129 try:
140 hooks.execute(sys.argv)130 hooks.execute(sys.argv)
141131
=== modified file 'hooks/collectd_utils.py'
--- hooks/collectd_utils.py 2015-12-10 17:25:19 +0000
+++ hooks/collectd_utils.py 2015-12-29 16:06:20 +0000
@@ -24,6 +24,7 @@
24from charmhelpers.core.hookenv import (24from charmhelpers.core.hookenv import (
25 #charm_dir,25 #charm_dir,
26 #config,26 #config,
27 is_relation_made,
27 log,28 log,
28 #related_units,29 #related_units,
29 #relation_ids,30 #relation_ids,
@@ -37,6 +38,9 @@
3738
38from collectd_contexts import (39from collectd_contexts import (
39 CollectdContext,40 CollectdContext,
41 CollectdExporterContext,
42 CollectdExporterDefaultContext,
43 CollectdOpenstackContext,
40)44)
4145
42TEMPLATES = 'templates/'46TEMPLATES = 'templates/'
@@ -45,9 +49,23 @@
45 'collectd-core',49 'collectd-core',
46]50]
4751
52COLLECTD_EXPORTER_PACKAGES = [
53 'canonical-bootstack-collectd-exporter',
54]
55
56COLLECTD_OPENSTACK_PACKAGES = [
57 'canonical-bootstack-collectd-openstack',
58]
59
48COLLECTD_CONF_DIR = "/etc/collectd"60COLLECTD_CONF_DIR = "/etc/collectd"
49COLLECTD_CONF = '%s/collectd.conf' % COLLECTD_CONF_DIR61COLLECTD_CONF = '%s/collectd.conf' % COLLECTD_CONF_DIR
5062COLLECTD_CONF_INC = '%s/collectd.d' % COLLECTD_CONF_DIR
63
64
65COLLECTD_EXPORTER_CONF = '%s/write_http.conf' % COLLECTD_CONF_INC
66COLLECTD_EXPORTER_DEFAULT = '/etc/default/collectd-exporter-prometheus'
67
68COLLECTD_OPENSTACK_CONF = '%s/openstack.conf' % COLLECTD_CONF_INC
5169
52BASE_RESOURCE_MAP = {70BASE_RESOURCE_MAP = {
53 COLLECTD_CONF: {71 COLLECTD_CONF: {
@@ -56,6 +74,26 @@
56 },74 },
57}75}
5876
77EXPORTER_RESOURCE_MAP = {
78 COLLECTD_EXPORTER_CONF: {
79 'services': ['collectd'],
80 'templates': ['write_http.conf.tmpl'],
81 'contexts': [CollectdExporterContext()],
82 },
83 COLLECTD_EXPORTER_DEFAULT: {
84 'services': ['collectd-exporter-prometheus'],
85 'templates': ['default.tmpl'],
86 'contexts': [CollectdExporterDefaultContext()],
87 },
88}
89
90OPENSTACK_RESOURCE_MAP = {
91 COLLECTD_OPENSTACK_CONF: {
92 'services': ['collectd'],
93 'contexts': [CollectdOpenstackContext()],
94 },
95}
96
5997
60def juju_log(msg):98def juju_log(msg):
61 log('[collectd] {}'.format(msg))99 log('[collectd] {}'.format(msg))
@@ -66,7 +104,16 @@
66 Dynamically generate a map of resources that will be managed for a single104 Dynamically generate a map of resources that will be managed for a single
67 hook execution.105 hook execution.
68 '''106 '''
69 resource_map = deepcopy(BASE_RESOURCE_MAP)107 d_resource = {}
108 d_resource.update(BASE_RESOURCE_MAP)
109
110 if is_relation_made('target'):
111 d_resource.update(EXPORTER_RESOURCE_MAP)
112
113 if is_relation_made('identity-admin'):
114 d_resource.update(OPENSTACK_RESOURCE_MAP)
115
116 resource_map = deepcopy(d_resource)
70117
71 return resource_map118 return resource_map
72119
@@ -103,3 +150,13 @@
103 packages = [] + BASE_PACKAGES150 packages = [] + BASE_PACKAGES
104151
105 return packages152 return packages
153
154
155def determine_exporter_packages():
156 packages = [] + COLLECTD_EXPORTER_PACKAGES
157 return packages
158
159
160def determine_openstack_packages():
161 packages = [] + COLLECTD_OPENSTACK_PACKAGES
162 return packages
106163
=== added file 'templates/default.tmpl'
--- templates/default.tmpl 1970-01-01 00:00:00 +0000
+++ templates/default.tmpl 2015-12-29 16:06:20 +0000
@@ -0,0 +1,10 @@
1# Defaults for canonical-bootstack-collectd-exporter initscript
2#
3
4# Path under which to accept POST requests from collectd.
5PUSH_PATH='{{ push_path }}'
6# Address on which to expose metrics and web interface.
7LISTEN_ADDR='{{ host }}:{{ port }}'
8# Path under which to expose Prometheus metrics.
9TELEMETRY_PATH='{{ telemetry_path }}'
10
011
=== added file 'templates/openstack.conf.tmpl'
--- templates/openstack.conf.tmpl 1970-01-01 00:00:00 +0000
+++ templates/openstack.conf.tmpl 2015-12-29 16:06:20 +0000
@@ -0,0 +1,62 @@
1TypesDB "/usr/share/collectd/types.db"
2TypesDB "/usr/share/collectd/ostypes.db"
3<LoadPlugin "python">
4 Globals true
5</LoadPlugin>
6
7<Plugin "python">
8 ModulePath "/usr/lib/collectd/plugins/openstack"
9
10 Import "keystone_plugin"
11 <Module "keystone_plugin">
12 Username "{{ username }}"
13 Password "{{ password }}"
14 TenantName "{{ tenant_name }}"
15 AuthURL "http://{{ keystone_vip }}:{{ keystone_port }}/v2.0"
16 Verbose "{{ keystone_verbose }}"
17 Debug "{{ debug }}"
18 </Module>
19 Import "cinder_plugin"
20 <Module "cinder_plugin">
21 Username "{{ username }}"
22 Password "{{ password }}"
23 TenantName "{{ tenant_name }}"
24 AuthURL "http://{{ keystone_vip }}:{{ keystone_port }}/v2.0"
25 Verbose "{{ keystone_verbose }}"
26 Debug "{{ debug }}"
27 </Module>
28 Import "glance_plugin"
29 <Module "glance_plugin">
30 Username "{{ username }}"
31 Password "{{ password }}"
32 TenantName "{{ tenant_name }}"
33 AuthURL "http://{{ keystone_vip }}:{{ keystone_port }}/v2.0"
34 Verbose "{{ keystone_verbose }}"
35 Debug "{{ debug }}"
36 </Module>
37 Import "neutron_plugin"
38 <Module "neutron_plugin">
39 Username "{{ username }}"
40 Password "{{ password }}"
41 TenantName "{{ tenant_name }}"
42 AuthURL "http://{{ keystone_vip }}:{{ keystone_port }}/v2.0"
43 Verbose "{{ keystone_verbose }}"
44 Debug "{{ debug }}"
45 </Module>
46 Import "nova_plugin"
47 <Module "nova_plugin">
48 Username "{{ username }}"
49 Password "{{ password }}"
50 TenantName "{{ tenant_name }}"
51 AuthURL "http://{{ keystone_vip }}:{{ keystone_port }}/v2.0"
52 Verbose "{{ keystone_verbose }}"
53 Debug "{{ debug }}"
54 AllocationRatioCores "{{ allocation_ratio_cores }}"
55 AllocationRatioRam "{{ allocation_ratio_ram }}"
56 ReservedNodeCores "0"
57 ReservedNodeRamMB "0"
58 ReservedCores "0"
59 ReservedRamMB "0"
60 </Module>
61</Plugin>
62#
063
=== added file 'templates/write_http.conf.tmpl'
--- templates/write_http.conf.tmpl 1970-01-01 00:00:00 +0000
+++ templates/write_http.conf.tmpl 2015-12-29 16:06:20 +0000
@@ -0,0 +1,8 @@
1LoadPlugin write_http
2<Plugin write_http>
3 <URL "http://127.0.0.1:{{ port }}{{ push_path }}">
4 Format "{{ format }}"
5 StoreRates {{ store_rates }}
6 </URL>
7</Plugin>
8#
09
=== modified file 'unit_tests/test_collectd_contexts.py'
--- unit_tests/test_collectd_contexts.py 2015-12-10 17:25:19 +0000
+++ unit_tests/test_collectd_contexts.py 2015-12-29 16:06:20 +0000
@@ -1,5 +1,6 @@
1import collectd_contexts as contexts1import collectd_contexts as contexts
2import os2import os
3from collections import defaultdict
34
4os.environ['JUJU_UNIT_NAME'] = 'collectd'5os.environ['JUJU_UNIT_NAME'] = 'collectd'
5#import collectd_utils as utils6#import collectd_utils as utils
@@ -13,6 +14,9 @@
13TO_PATCH = [14TO_PATCH = [
14 'gethostname',15 'gethostname',
15 'config',16 'config',
17 'related_units',
18 'relation_get',
19 'relation_ids',
16]20]
1721
1822
@@ -22,11 +26,64 @@
22 super(TestCollectdContext, self).setUp(contexts, TO_PATCH)26 super(TestCollectdContext, self).setUp(contexts, TO_PATCH)
2327
24 def test_collectd_context(self):28 def test_collectd_context(self):
25 #self.relation_ids.return_value = ['target:0']
26 self.gethostname.return_value = '1'29 self.gethostname.return_value = '1'
27 self.config.return_value = '1'30 self.config.return_value = defaultdict(lambda: '1')
28 #service = 'mycollectd'
29 #self.service_name.return_value = service
30 self.assertEquals(contexts.CollectdContext()(),31 self.assertEquals(contexts.CollectdContext()(),
31 {'hostname': '1',32 {'hostname': '1',
32 'interval': '1'})33 'interval': '1'})
34
35 def test_collectd_exporter_context(self):
36 self.config.return_value = defaultdict(lambda: '1')
37 self.assertEquals(contexts.CollectdExporterContext()(),
38 {'host': '1',
39 'port': '1',
40 'push_path': '1',
41 'format': '1',
42 'store_rates': '1'})
43
44 def test_collectd_exporter_default_context(self):
45 self.gethostname.return_value = '1'
46 self.config.return_value = defaultdict(lambda: '1')
47 self.assertEquals(contexts.CollectdExporterDefaultContext()(),
48 {'host': '1',
49 'port': '1',
50 'push_path': '1',
51 'telemetry_path': '1'})
52
53 def test_collectd_openstack_context(self):
54 self.relation_ids.return_value = ['identity-admin:0']
55 self.related_units.return_value = ['collectd/0']
56 self.relation_get.return_value = {'service_hostname': '1',
57 'service_port': '1',
58 'service_username': '1',
59 'service_password': '1',
60 'service_tenant_name': '1'}
61 self.config.return_value = defaultdict(lambda: '1')
62 self.assertEquals(contexts.CollectdOpenstackContext()(),
63 {'enable_keystone': True,
64 'keystone_vip': '1',
65 'keystone_port': '1',
66 'username': '1',
67 'password': '1',
68 'tenant_name': '1',
69 'keystone_verbose': '1',
70 'debug': '1',
71 'allocation_ratio_cores': '1',
72 'allocation_ratio_ram': '1'})
73
74 def test_collectd_openstack_context_nodata(self):
75 self.relation_ids.return_value = ['identity-admin:0']
76 self.related_units.return_value = ['collectd/0']
77 self.relation_get.return_value = {}
78 self.config.return_value = defaultdict(lambda: '1')
79 self.assertEquals(contexts.CollectdOpenstackContext()(),
80 {'enable_keystone': False,
81 'keystone_vip': None,
82 'keystone_port': None,
83 'username': None,
84 'password': None,
85 'tenant_name': None,
86 'keystone_verbose': '1',
87 'debug': '1',
88 'allocation_ratio_cores': '1',
89 'allocation_ratio_ram': '1'})
3390
=== modified file 'unit_tests/test_collectd_hooks.py'
--- unit_tests/test_collectd_hooks.py 2015-12-10 17:25:19 +0000
+++ unit_tests/test_collectd_hooks.py 2015-12-29 16:06:20 +0000
@@ -34,12 +34,12 @@
34 'register_configs',34 'register_configs',
35 'restart_map',35 'restart_map',
36 # charmhelpers.core.hookenv36 # charmhelpers.core.hookenv
37 #'config',37 'config',
38 'is_relation_made',38 'is_relation_made',
39 'relation_get',39 #'relation_get',
40 'relation_ids',40 #'relation_ids',
41 'relation_set',41 'relation_set',
42 'related_units',42 #'related_units',
43 'unit_get',43 'unit_get',
44 # charmhelpers.core.host44 # charmhelpers.core.host
45 'apt_install',45 'apt_install',
@@ -57,5 +57,6 @@
57 def test_correct_install_packages(self):57 def test_correct_install_packages(self):
58 'It installs the correct packages based on what is determined'58 'It installs the correct packages based on what is determined'
59 self.determine_packages.return_value = ['collectd']59 self.determine_packages.return_value = ['collectd']
60 self.config.return_value = ''
60 hooks.hooks.execute(['hooks/install'])61 hooks.hooks.execute(['hooks/install'])
61 self.apt_install.assert_called_with(['collectd'], fatal=True)62 self.apt_install.assert_called_with(['collectd'], fatal=True)
6263
=== modified file 'unit_tests/test_collectd_utils.py'
--- unit_tests/test_collectd_utils.py 2015-12-10 17:25:19 +0000
+++ unit_tests/test_collectd_utils.py 2015-12-29 16:06:20 +0000
@@ -14,6 +14,7 @@
14 # helpers.core.hookenv14 # helpers.core.hookenv
15 #'config',15 #'config',
16 'log',16 'log',
17 'is_relation_made',
17 # fetch18 # fetch
18 #'add_source',19 #'add_source',
19 #'apt_update',20 #'apt_update',
@@ -38,12 +39,18 @@
3839
39 def test_creates_restart_map_all_enabled(self):40 def test_creates_restart_map_all_enabled(self):
40 'It creates correct restart map when all services enabled'41 'It creates correct restart map when all services enabled'
42 self.is_relation_made.return_value = True
41 ex_map = OrderedDict([43 ex_map = OrderedDict([
42 ('/etc/collectd/collectd.conf', ['collectd']),44 ('/etc/collectd/collectd.conf', ['collectd']),
45 ('/etc/collectd/collectd.d/write_http.conf', ['collectd']),
46 ('/etc/default/collectd-exporter-prometheus',
47 ['collectd-exporter-prometheus']),
48 ('/etc/collectd/collectd.d/openstack.conf', ['collectd']),
43 ])49 ])
44 self.assertEquals(collectd_utils.restart_map(), ex_map)50 self.assertEquals(collectd_utils.restart_map(), ex_map)
4551
46 def test_list_services(self):52 def test_list_services(self):
47 'It returns a list of services associate with this charm'53 'It returns a list of services associate with this charm'
48 ex_list = ['collectd']54 self.is_relation_made.return_value = True
49 self.assertEquals(collectd_utils.services(), ex_list)55 ex_list = ['collectd', 'collectd-exporter-prometheus']
56 self.assertEquals(sorted(collectd_utils.services()), sorted(ex_list))

Subscribers

People subscribed via source and target branches