aboutsummaryrefslogtreecommitdiffstats
path: root/charms/trusty/contrail-control/hooks/contrail_control_hooks.py
diff options
context:
space:
mode:
Diffstat (limited to 'charms/trusty/contrail-control/hooks/contrail_control_hooks.py')
-rwxr-xr-xcharms/trusty/contrail-control/hooks/contrail_control_hooks.py174
1 files changed, 174 insertions, 0 deletions
diff --git a/charms/trusty/contrail-control/hooks/contrail_control_hooks.py b/charms/trusty/contrail-control/hooks/contrail_control_hooks.py
new file mode 100755
index 0000000..0c47ec2
--- /dev/null
+++ b/charms/trusty/contrail-control/hooks/contrail_control_hooks.py
@@ -0,0 +1,174 @@
+#!/usr/bin/env python
+
+import sys
+
+import json
+
+from charmhelpers.contrib.openstack.utils import configure_installation_source
+
+from charmhelpers.core.hookenv import (
+ Hooks,
+ UnregisteredHookError,
+ config,
+ local_unit,
+ log,
+ relation_get
+)
+
+from charmhelpers.core.host import (
+ restart_on_change,
+ service_restart
+)
+
+from charmhelpers.fetch import (
+ apt_install,
+ apt_upgrade,
+ configure_sources
+)
+
+from contrail_control_utils import (
+ fix_nodemgr,
+ fix_permissions,
+ provision_control,
+ units,
+ unprovision_control,
+ write_control_config,
+ write_nodemgr_config,
+ write_vnc_api_config
+)
+
+PACKAGES = [ "contrail-control", "contrail-utils", "contrail-nodemgr" ]
+
+hooks = Hooks()
+config = config()
+
+def add_control():
+ # check relation dependencies
+ if not config_get("control-provisioned") \
+ and config_get("contrail-api-ready") \
+ and config_get("contrail-discovery-ready") \
+ and config_get("contrail-ifmap-ready") \
+ and config_get("identity-admin-ready"):
+ provision_control()
+ config["control-provisioned"] = True
+
+@hooks.hook("config-changed")
+def config_changed():
+ pass
+
+def config_get(key):
+ try:
+ return config[key]
+ except KeyError:
+ return None
+
+@hooks.hook("contrail-api-relation-changed")
+def contrail_api_changed():
+ if not relation_get("port"):
+ log("Relation not ready")
+ return
+ write_vnc_api_config()
+ config["contrail-api-ready"] = True
+ add_control()
+
+@hooks.hook("contrail-api-relation-departed")
+@hooks.hook("contrail-api-relation-broken")
+def contrail_api_departed():
+ if not units("contrail-api"):
+ remove_control()
+ config["contrail-api-ready"] = False
+ write_vnc_api_config()
+
+@hooks.hook("contrail-discovery-relation-changed")
+def contrail_discovery_changed():
+ if not relation_get("port"):
+ log("Relation not ready")
+ return
+ contrail_discovery_relation()
+ config["contrail-discovery-ready"] = True
+ add_control()
+
+@hooks.hook("contrail-discovery-relation-departed")
+@hooks.hook("contrail-discovery-relation-broken")
+def contrail_discovery_departed():
+ if not units("contrail-discovery"):
+ remove_control()
+ config["contrail-discovery-ready"] = False
+ contrail_discovery_relation()
+
+@restart_on_change({"/etc/contrail/contrail-control.conf": ["contrail-control"],
+ "/etc/contrail/control-node.conf": ["contrail-control"],
+ "/etc/contrail/contrail-control-nodemgr.conf": ["contrail-control-nodemgr"]})
+def contrail_discovery_relation():
+ write_control_config()
+ write_nodemgr_config()
+
+@hooks.hook("contrail-ifmap-relation-changed")
+def contrail_ifmap_changed():
+ creds = relation_get("creds")
+ creds = json.loads(creds) if creds else {}
+ if local_unit() not in creds:
+ log("Relation not ready")
+ return
+ contrail_ifmap_relation()
+ config["contrail-ifmap-ready"] = True
+ add_control()
+
+@hooks.hook("contrail-ifmap-relation-departed")
+@hooks.hook("contrail-ifmap-relation-broken")
+def contrail_ifmap_departed():
+ if not units("contrail-ifmap"):
+ remove_control()
+ config["contrail-ifmap-ready"] = False
+ contrail_ifmap_relation()
+
+@restart_on_change({"/etc/contrail/contrail-control.conf": ["contrail-control"],
+ "/etc/contrail/control-node.conf": ["contrail-control"]})
+def contrail_ifmap_relation():
+ write_control_config()
+
+@hooks.hook("identity-admin-relation-changed")
+def identity_admin_changed():
+ if not relation_get("service_hostname"):
+ log("Relation not ready")
+ return
+ write_vnc_api_config()
+ config["identity-admin-ready"] = True
+ add_control()
+
+@hooks.hook("identity-admin-relation-departed")
+@hooks.hook("identity-admin-relation-broken")
+def identity_admin_departed():
+ if not units("identity-admin"):
+ remove_control()
+ config["identity-admin-ready"] = False
+ write_vnc_api_config()
+
+@hooks.hook()
+def install():
+ configure_installation_source(config["openstack-origin"])
+ configure_sources(True, "install-sources", "install-keys")
+ apt_upgrade(fatal=True, dist=True)
+ apt_install(PACKAGES, fatal=True)
+ fix_permissions()
+ fix_nodemgr()
+
+def main():
+ try:
+ hooks.execute(sys.argv)
+ except UnregisteredHookError as e:
+ log("Unknown hook {} - skipping.".format(e))
+
+def remove_control():
+ if config_get("control-provisioned"):
+ unprovision_control()
+ config["control-provisioned"] = False
+
+@hooks.hook("upgrade-charm")
+def upgrade_charm():
+ write_control_config()
+ write_nodemgr_config()
+ service_restart("supervisor-control")
+
+if __name__ == "__main__":
+ main()