~robert-ayres/charms/trusty/contrail-configuration/trunk

« back to all changes in this revision

Viewing changes to hooks/contrail_configuration_hooks.py

  • Committer: Robert Ayres
  • Date: 2014-09-10 14:03:02 UTC
  • Revision ID: robert.ayres@canonical.com-20140910140302-bqu0wb61an4nhgfa
Initial charm

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
import platform
 
4
import sys
 
5
 
 
6
import json
 
7
 
 
8
from charmhelpers.contrib.openstack.utils import configure_installation_source
 
9
 
 
10
from charmhelpers.core.hookenv import (
 
11
    CRITICAL,
 
12
    Hooks,
 
13
    UnregisteredHookError,
 
14
    config,
 
15
    local_unit,
 
16
    log,
 
17
    relation_get,
 
18
    relation_set,
 
19
    remote_unit
 
20
)
 
21
 
 
22
from charmhelpers.core.host import (
 
23
    pwgen,
 
24
    restart_on_change,
 
25
    service_restart
 
26
)
 
27
 
 
28
from charmhelpers.fetch import (
 
29
    apt_install,
 
30
    apt_upgrade,
 
31
    configure_sources
 
32
)
 
33
 
 
34
from contrail_configuration_utils import (
 
35
    fix_permissions,
 
36
    write_contrail_api_config,
 
37
    write_contrail_schema_config,
 
38
    write_discovery_config,
 
39
    write_ifmap_config,
 
40
    write_vnc_api_config
 
41
)
 
42
 
 
43
PACKAGES = [ "ifmap-server", "contrail-config", "contrail-config-openstack",
 
44
             "neutron-common" ]
 
45
 
 
46
hooks = Hooks()
 
47
 
 
48
@hooks.hook("amqp-relation-changed")
 
49
def amqp_changed():
 
50
    if not relation_get("password"):
 
51
        log("Relation not ready")
 
52
        return
 
53
    amqp_relation()
 
54
 
 
55
@hooks.hook("amqp-relation-departed")
 
56
@hooks.hook("amqp-relation-broken")
 
57
@restart_on_change({"/etc/contrail/contrail-api.conf": ["contrail-api"]})
 
58
def amqp_relation():
 
59
    write_contrail_api_config()
 
60
 
 
61
@hooks.hook("amqp-relation-joined")
 
62
def amqp_joined():
 
63
    relation_set(username="contrail", vhost="contrail")
 
64
 
 
65
@hooks.hook("cassandra-relation-changed")
 
66
def cassandra_changed():
 
67
    if not relation_get("port"):
 
68
        log("Relation not ready")
 
69
        return
 
70
    cassandra_relation()
 
71
 
 
72
@hooks.hook("cassandra-relation-departed")
 
73
@hooks.hook("cassandra-relation-broken")
 
74
@restart_on_change({"/etc/contrail/contrail-api.conf": ["contrail-api"],
 
75
                    "/etc/contrail/contrail-schema.conf": ["contrail-schema"],
 
76
                    "/etc/contrail/discovery.conf": ["contrail-discovery"]})
 
77
def cassandra_relation():
 
78
    write_contrail_api_config()
 
79
    write_contrail_schema_config()
 
80
    write_discovery_config()
 
81
 
 
82
@hooks.hook("config-changed")
 
83
def config_changed():
 
84
    pass
 
85
 
 
86
@hooks.hook("contrail-api-relation-joined")
 
87
def contrail_api_joined():
 
88
    relation_set(port=8082)
 
89
 
 
90
@hooks.hook("contrail-ifmap-relation-broken")
 
91
@restart_on_change({"/etc/ifmap-server/basicauthusers.properties": ["ifmap-server"]})
 
92
def contrail_ifmap_broken():
 
93
    write_ifmap_config()
 
94
 
 
95
@hooks.hook("contrail-ifmap-relation-departed")
 
96
def contrail_ifmap_departed():
 
97
    creds = relation_get("creds", local_unit())
 
98
    creds = json.loads(creds) if creds else {}
 
99
    unit = remote_unit()
 
100
    if unit not in creds:
 
101
        return
 
102
    del creds[unit]
 
103
    relation_set(creds=json.dumps(creds))
 
104
    write_ifmap_config()
 
105
    service_restart("ifmap-server")
 
106
 
 
107
@hooks.hook("contrail-ifmap-relation-joined")
 
108
def contrail_ifmap_joined():
 
109
    creds = relation_get("creds", local_unit())
 
110
    creds = json.loads(creds) if creds else {}
 
111
    unit = remote_unit()
 
112
    if unit in creds:
 
113
        return
 
114
    creds[unit] = { "username": unit, "password": pwgen() }
 
115
    relation_set(creds=json.dumps(creds))
 
116
    write_ifmap_config()
 
117
    service_restart("ifmap-server")
 
118
 
 
119
@hooks.hook("identity-admin-relation-changed")
 
120
def identity_admin_changed():
 
121
    if not relation_get("service_hostname"):
 
122
        log("Relation not ready")
 
123
        return
 
124
    identity_admin_relation()
 
125
 
 
126
@hooks.hook("identity-admin-relation-departed")
 
127
@hooks.hook("identity-admin-relation-broken")
 
128
@restart_on_change({"/etc/contrail/contrail-api.conf": ["contrail-api"],
 
129
                    "/etc/contrail/contrail-schema.conf": ["contrail-schema"],
 
130
                    "/etc/contrail/vnc_api_lib.ini": []})
 
131
def identity_admin_relation():
 
132
    write_contrail_api_config()
 
133
    write_contrail_schema_config()
 
134
    write_vnc_api_config()
 
135
 
 
136
@hooks.hook()
 
137
def install():
 
138
    if platform.linux_distribution()[2] != "precise":
 
139
        log("Charm only supports Precise currently", CRITICAL)
 
140
        sys.exit(1)
 
141
    configure_installation_source(config("openstack-origin"))
 
142
    configure_sources(True, "install-sources")
 
143
    apt_upgrade(fatal=True, dist=True)
 
144
    apt_install(PACKAGES, fatal=True)
 
145
    fix_permissions()
 
146
 
 
147
def main():
 
148
    try:
 
149
        hooks.execute(sys.argv)
 
150
    except UnregisteredHookError as e:
 
151
        log("Unknown hook {} - skipping.".format(e))
 
152
 
 
153
@hooks.hook("upgrade-charm")
 
154
def upgrade_charm():
 
155
    write_ifmap_config()
 
156
    write_contrail_api_config()
 
157
    write_contrail_schema_config()
 
158
    write_discovery_config()
 
159
    for service in [ "ifmap-server", "contrail-api", "contrail-schema",
 
160
                     "contrail-discovery" ]:
 
161
        service_restart(service)
 
162
 
 
163
@hooks.hook("zookeeper-relation-changed")
 
164
def zookeeper_changed():
 
165
    if not relation_get("port"):
 
166
        log("Relation not ready")
 
167
        return
 
168
    zookeeper_relation()
 
169
 
 
170
@hooks.hook("zookeeper-relation-departed")
 
171
@hooks.hook("zookeeper-relation-broken")
 
172
@restart_on_change({"/etc/contrail/contrail-api.conf": ["contrail-api"],
 
173
                    "/etc/contrail/contrail-schema.conf": ["contrail-schema"],
 
174
                    "/etc/contrail/discovery.conf": ["contrail-discovery"]})
 
175
def zookeeper_relation():
 
176
    write_contrail_api_config()
 
177
    write_contrail_schema_config()
 
178
    write_discovery_config()
 
179
 
 
180
if __name__ == "__main__":
 
181
    main()