aboutsummaryrefslogtreecommitdiffstats
path: root/charms/trusty/neutron-api-contrail/hooks/neutron_api_contrail_hooks.py
blob: 77a438ac3789bd4cc5644cd95dad6bc758cf0ae7 (plain)
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()