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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#!/usr/bin/env python
import sys
from apt_pkg import version_compare
import json
from charmhelpers.core.hookenv import (
Hooks,
UnregisteredHookError,
config,
log,
relation_get,
relation_set
)
from charmhelpers.core.host import (
restart_on_change,
service_restart
)
from charmhelpers.fetch import (
apt_install,
apt_upgrade,
configure_sources
)
from neutron_api_contrail_utils import (
CONTRAIL_VERSION,
OPENSTACK_VERSION,
write_plugin_config
)
PACKAGES = [ "neutron-plugin-contrail", "contrail-config-openstack" ]
hooks = Hooks()
config = config()
@hooks.hook("config-changed")
def config_changed():
pass
@hooks.hook("contrail-api-relation-changed")
def contrail_api_changed():
if not relation_get("port"):
log("Relation not ready")
return
contrail_api_relation()
@hooks.hook("contrail-api-relation-departed")
@hooks.hook("contrail-api-relation-broken")
@restart_on_change({"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
def contrail_api_relation():
write_plugin_config()
@hooks.hook("identity-admin-relation-changed")
def identity_admin_changed():
if not relation_get("service_hostname"):
log("Relation not ready")
return
identity_admin_relation()
@hooks.hook("identity-admin-relation-departed")
@hooks.hook("identity-admin-relation-broken")
@restart_on_change({"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
def identity_admin_relation():
write_plugin_config()
@hooks.hook()
def install():
configure_sources(True, "install-sources", "install-keys")
apt_upgrade(fatal=True, dist=True)
apt_install(PACKAGES, fatal=True)
def main():
try:
hooks.execute(sys.argv)
except UnregisteredHookError as e:
log("Unknown hook {} - skipping.".format(e))
@hooks.hook("neutron-plugin-api-subordinate-relation-joined")
def neutron_plugin_joined():
# create plugin config
plugin = "neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2" \
if version_compare(CONTRAIL_VERSION, "1.20~") >= 0 \
else "neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_core.NeutronPluginContrailCoreV2"
service_plugins = "neutron_plugin_contrail.plugins.opencontrail.loadbalancer.v2.plugin.LoadBalancerPluginV2" \
if version_compare(CONTRAIL_VERSION, "3.0.2.0-34") >= 0 \
and version_compare(OPENSTACK_VERSION, "2:7.0.0") >= 0 \
else " "
extensions = [ "/usr/lib/python2.7/dist-packages/neutron_plugin_contrail/extensions" ]
if version_compare(CONTRAIL_VERSION, "3.0.2.0-34") >= 0 \
and version_compare(OPENSTACK_VERSION, "2:7.0.0") >= 0:
extensions.append("/usr/lib/python2.7/dist-packages/neutron_lbaas/extensions")
conf = {
"neutron-api": {
"/etc/neutron/neutron.conf": {
"sections": {
"DEFAULT": [
("api_extensions_path", ":".join(extensions))
]
}
}
}
}
settings = { "neutron-plugin": "contrail",
"core-plugin": plugin,
"neutron-plugin-config": "/etc/neutron/plugins/opencontrail/ContrailPlugin.ini",
"service-plugins": service_plugins,
"quota-driver": "neutron_plugin_contrail.plugins.opencontrail.quota.driver.QuotaDriver",
"subordinate_configuration": json.dumps(conf) }
relation_set(relation_settings=settings)
@hooks.hook("upgrade-charm")
def upgrade_charm():
write_plugin_config()
service_restart("neutron-server")
if __name__ == "__main__":
main()
|