From 5a1fd1fecd5309076570b3f353a1d48ddce64c30 Mon Sep 17 00:00:00 2001 From: Liam Young Date: Mon, 7 Dec 2015 15:17:39 +0000 Subject: [PATCH] Support requesting keystone endpoint information and differentiaite between old and new ssl info --- requires.py | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/requires.py b/requires.py index 4107ee7..fef4b7b 100644 --- a/requires.py +++ b/requires.py @@ -15,7 +15,6 @@ from charms.reactive import RelationBase from charms.reactive import hook from charms.reactive import scopes - class KeystoneRequires(RelationBase): scope = scopes.GLOBAL @@ -34,6 +33,7 @@ class KeystoneRequires(RelationBase): @hook('{requires:keystone}-relation-joined') def joined(self): self.set_state('{relation_name}.connected') + self.update_state() def update_state(self): if self.base_data_complete(): @@ -42,9 +42,19 @@ class KeystoneRequires(RelationBase): self.set_state('{relation_name}.available.ssl') else: self.remove_state('{relation_name}.available.ssl') + if self.ssl_data_complete_legacy(): + self.set_state('{relation_name}.available.ssl_legacy') + else: + self.remove_state('{relation_name}.available.ssl_legacy') + if self.auth_data_complete(): + self.set_state('{relation_name}.available.auth') + else: + self.remove_state('{relation_name}.available.auth') else: self.remove_state('{relation_name}.available') self.remove_state('{relation_name}.available.ssl') + self.remove_state('{relation_name}.available.ssl_legacy') + self.remove_state('{relation_name}.available.auth') @hook('{requires:keystone}-relation-changed') def changed(self): @@ -60,14 +70,20 @@ class KeystoneRequires(RelationBase): 'service_host': self.service_host(), 'service_protocol': self.service_protocol(), 'service_port': self.service_port(), + 'auth_host': self.auth_host(), + 'auth_protocol': self.auth_protocol(), + 'auth_port': self.auth_port(), + } + if all(data.values()): + return True + return False + + def auth_data_complete(self): + data = { 'service_tenant': self.service_tenant(), 'service_username': self.service_username(), 'service_password': self.service_password(), 'service_tenant_id': self.service_tenant_id(), - 'auth_host': self.auth_host(), - 'auth_protocol': self.auth_protocol(), - 'auth_port': self.auth_port(), - 'admin_token': self.admin_token(), } if all(data.values()): return True @@ -75,8 +91,6 @@ class KeystoneRequires(RelationBase): def ssl_data_complete(self): data = { - 'ssl_key': self.ssl_key(), - 'ssl_cert': self.ssl_cert(), 'ssl_cert_admin': self.ssl_cert_admin(), 'ssl_cert_internal': self.ssl_cert_internal(), 'ssl_cert_public': self.ssl_cert_public(), @@ -84,7 +98,17 @@ class KeystoneRequires(RelationBase): 'ssl_key_internal': self.ssl_key_internal(), 'ssl_key_public': self.ssl_key_public(), 'ca_cert': self.ca_cert(), - 'https_keystone': self.https_keystone(), + } + for value in data.values(): + if not value or value == '__null__': + return False + return True + + def ssl_data_complete_legacy(self): + data = { + 'ssl_key': self.ssl_key(), + 'ssl_cert': self.ssl_cert(), + 'ca_cert': self.ca_cert(), } for value in data.values(): if not value or value == '__null__': @@ -105,3 +129,6 @@ class KeystoneRequires(RelationBase): } self.set_local(**relation_info) self.set_remote(**relation_info) + + def request_keystone_endpoint_information(self): + self.register_endpoints('None', 'None', 'None', 'None', 'None')