From 711967ae9639095ce41500bb0e6f80c8b80fab95 Mon Sep 17 00:00:00 2001 From: Stuart Mackie Date: Tue, 25 Jul 2017 10:37:57 -0700 Subject: Contrail charms Change-Id: I2d259d03f63fce38348b8384e26ac23e3fce44a8 Signed-off-by: Stuart Mackie --- .../hooks/contrail_keystone_auth_hooks.py | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100755 contrail-keystone-auth/hooks/contrail_keystone_auth_hooks.py (limited to 'contrail-keystone-auth/hooks/contrail_keystone_auth_hooks.py') diff --git a/contrail-keystone-auth/hooks/contrail_keystone_auth_hooks.py b/contrail-keystone-auth/hooks/contrail_keystone_auth_hooks.py new file mode 100755 index 0000000..e5cacb6 --- /dev/null +++ b/contrail-keystone-auth/hooks/contrail_keystone_auth_hooks.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +import json +import sys + +from charmhelpers.core.hookenv import ( + Hooks, + UnregisteredHookError, + config, + log, + is_leader, + relation_get, + relation_ids, + relation_set, + relation_id, + related_units, + status_set, +) + +hooks = Hooks() +config = config() + + +def update_relations(rid=None): + settings = { + "auth-info": config.get("auth_info") + } + for rid in ([rid] if rid else relation_ids("contrail-auth")): + relation_set(relation_id=rid, relation_settings=settings) + + +@hooks.hook("config-changed") +def config_changed(): + if is_leader(): + update_relations() + update_status() + + +@hooks.hook("contrail-auth-relation-joined") +def contrail_auth_joined(): + if is_leader(): + update_relations(rid=relation_id()) + update_status() + + +@hooks.hook("identity-admin-relation-changed") +def identity_admin_changed(): + ip = relation_get("service_hostname") + if ip: + api_version = int(relation_get("api_version")) + api_suffix = 'v2.0' if api_version == 2 else 'v3' + api_tokens = 'v2.0/tokens' if api_version == 2 else 'v3/auth/tokens' + auth_info = { + "keystone_protocol": relation_get("service_protocol"), + "keystone_ip": ip, + "keystone_public_port": relation_get("service_port"), + "keystone_admin_user": relation_get("service_username"), + "keystone_admin_password": relation_get("service_password"), + "keystone_admin_tenant": relation_get("service_tenant_name"), + "keystone_region": relation_get("service_region"), + "keystone_api_version": api_version, + "keystone_api_suffix": api_suffix, + "keystone_api_tokens": api_tokens, + # next three field are only for api_version = 3 + "keystone_user_domain_name": + relation_get("service_user_domain_name"), + "keystone_project_domain_name": + relation_get("service_project_domain_name"), + "keystone_project_name": relation_get("service_project_name"), + } + auth_info = json.dumps(auth_info) + config["auth_info"] = auth_info + else: + config.pop("auth_info", None) + + if is_leader(): + update_relations() + update_status() + + +@hooks.hook("identity-admin-relation-departed") +def identity_admin_departed(): + count = 0 + for rid in relation_ids("identity-admin"): + count += len(related_units(rid)) + if count > 0: + return + config.pop("auth_info", None) + + if is_leader(): + update_relations() + update_status() + + +@hooks.hook("update-status") +def update_status(): + auth_info = config.get("auth_info") + if not auth_info: + status_set('blocked', 'Missing relations: identity') + else: + status_set("active", "Unit is ready") + + +def main(): + try: + hooks.execute(sys.argv) + except UnregisteredHookError as e: + log("Unknown hook {} - skipping.".format(e)) + + +if __name__ == "__main__": + main() -- cgit 1.2.3-korg