~openstack-charmers/charms/precise/ceilometer-agent/old-1410

« back to all changes in this revision

Viewing changes to hooks/ceilometer_hooks.py

  • Committer: James Page
  • Date: 2013-10-14 16:10:30 UTC
  • Revision ID: james.page@canonical.com-20131014161030-x89xxf581s07ayzy
Rebase on charmhelpers for havana

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/python
2
2
 
3
3
import sys
4
 
import time
5
4
import os
6
 
import utils
7
5
import ceilometer_utils
8
 
 
9
 
 
 
6
import socket.gethostname as get_host_name
 
7
 
 
8
from charmhelpers.fetch import (
 
9
    apt_install, filter_installed_packages,
 
10
    apt_update
 
11
)
 
12
 
 
13
from charmhelpers.core.hookenv import (
 
14
    config,
 
15
    relation_ids,
 
16
    related_units,
 
17
    relation_get,
 
18
    Hooks, UnregisteredHookError,
 
19
    log
 
20
)
 
21
from charmhelpers.core.host import (
 
22
    service_restart
 
23
)
 
24
 
 
25
from charmhelpers.contrib.openstack.utils import configure_installation_source
 
26
 
 
27
hooks = Hooks()
 
28
 
 
29
 
 
30
@hooks.hook()
10
31
def install():
11
 
    utils.configure_source()
12
 
    utils.install(*ceilometer_utils.CEILOMETER_AGENT_PACKAGES)
13
 
    ceilometer_utils.modify_config_file(ceilometer_utils.NOVA_CONF, 
14
 
        ceilometer_utils.NOVA_SETTINGS)
 
32
    configure_installation_source(config('openstack-origin'))
 
33
    apt_update(fatal=True)
 
34
    apt_install(filter_installed_packages(ceilometer_utils.CEILOMETER_AGENT_PACKAGES),
 
35
                fatal=True)
15
36
 
16
 
    port = ceilometer_utils.CEILOMETER_PORT
17
 
    utils.expose(port)
 
37
    # TODO(jamespage): Locally scoped relation for nova and others
 
38
    #ceilometer_utils.modify_config_file(ceilometer_utils.NOVA_CONF, 
 
39
    #    ceilometer_utils.NOVA_SETTINGS)
18
40
 
19
41
 
20
42
def get_conf():
21
 
    for relid in utils.relation_ids('ceilometer-service'):
22
 
        for unit in utils.relation_list(relid):
 
43
    for relid in relation_ids('ceilometer-service'):
 
44
        for unit in related_units(relid):
23
45
            conf = {
24
 
                "rabbit_host": utils.relation_get('rabbit_host', unit, relid),
 
46
                "rabbit_host": relation_get('rabbit_host', unit, relid),
25
47
                "rabbit_virtual_host": ceilometer_utils.RABBIT_VHOST,
26
48
                "rabbit_userid": ceilometer_utils.RABBIT_USER,
27
 
                "rabbit_password": utils.relation_get('rabbit_password', unit, relid),
28
 
                "keystone_os_username": utils.relation_get('keystone_os_username', unit, relid),
29
 
                "keystone_os_password": utils.relation_get('keystone_os_password', unit, relid),
30
 
                "keystone_os_tenant": utils.relation_get('keystone_os_tenant', unit, relid),
31
 
                "keystone_host": utils.relation_get('keystone_host', unit, relid),
32
 
                "keystone_port": utils.relation_get('keystone_port', unit, relid),
33
 
                "metering_secret": utils.relation_get('metering_secret', unit, relid)
 
49
                "rabbit_password": relation_get('rabbit_password',
 
50
                                                unit, relid),
 
51
                "keystone_os_username": relation_get('keystone_os_username',
 
52
                                                     unit, relid),
 
53
                "keystone_os_password": relation_get('keystone_os_password',
 
54
                                                     unit, relid),
 
55
                "keystone_os_tenant": relation_get('keystone_os_tenant',
 
56
                                                   unit, relid),
 
57
                "keystone_host": relation_get('keystone_host', unit, relid),
 
58
                "keystone_port": relation_get('keystone_port', unit, relid),
 
59
                "metering_secret": relation_get('metering_secret', unit, relid)
34
60
            }
35
61
            if None not in conf.itervalues():
36
62
                return conf
37
63
    return None
38
64
 
 
65
 
39
66
def render_ceilometer_conf(context):
40
67
    if (context and os.path.exists(ceilometer_utils.CEILOMETER_CONF)):
41
 
        # merge contexts
42
68
        context['service_port'] = ceilometer_utils.CEILOMETER_PORT
43
 
        context['ceilometer_host'] = utils.get_unit_hostname()
 
69
        context['ceilometer_host'] = get_host_name()
44
70
 
45
71
        with open(ceilometer_utils.CEILOMETER_CONF, "w") as conf:
46
 
            conf.write(utils.render_template(
 
72
            conf.write(ceilometer_utils.render_template(
47
73
                os.path.basename(ceilometer_utils.CEILOMETER_CONF), context))
48
74
 
49
 
        utils.restart(*ceilometer_utils.CEILOMETER_COMPUTE_SERVICES)
 
75
        for svc in ceilometer_utils.CEILOMETER_COMPUTE_SERVICES:
 
76
            service_restart(svc)
50
77
        return True
51
78
    return False
52
79
 
53
80
 
 
81
@hooks.hook("ceilometer-service-relation-changed")
54
82
def ceilometer_changed():
55
83
    # check if we have rabbit and keystone already set
56
84
    context = get_conf()
57
85
    if context:
58
 
            render_ceilometer_conf(context)
 
86
        render_ceilometer_conf(context)
59
87
    else:
60
88
        # still waiting
61
 
        utils.juju_log("INFO", "ceilometer: rabbit and keystone " +
 
89
        log("ceilometer: rabbit and keystone "
62
90
            "credentials not yet received from peer.")
63
91
 
64
92
 
65
 
utils.do_hooks({
66
 
    "install": install,
67
 
    "ceilometer-service-relation-changed": ceilometer_changed
68
 
})
69
 
sys.exit(0)
 
93
if __name__ == '__main__':
 
94
    try:
 
95
        hooks.execute(sys.argv)
 
96
    except UnregisteredHookError as e:
 
97
        log('Unknown hook {} - skipping.'.format(e))