From 66b6407429a37672e5773b3f08f0958922715e9b Mon Sep 17 00:00:00 2001 From: Aymen Frikha Date: Mon, 14 Jan 2019 15:31:08 +0000 Subject: [PATCH] Notify Middleware with keystone release version This patch add a new key/value parameter to the middleware relation to notify subordinate middleware charm with actual keystone release version Change-Id: Ie53355946e895cefe813c9e539fc904949f9df0c Closes-Bug: #1808597 --- hooks/keystone_hooks.py | 15 +++++++++++++-- unit_tests/test_keystone_hooks.py | 27 ++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/hooks/keystone_hooks.py b/hooks/keystone_hooks.py index f922248f..2eb8e2eb 100755 --- a/hooks/keystone_hooks.py +++ b/hooks/keystone_hooks.py @@ -275,6 +275,8 @@ def config_changed_postupgrade(): for r_id in relation_ids('ha'): ha_joined(relation_id=r_id) + notify_middleware_with_release_version() + @hooks.hook('shared-db-relation-joined') def db_joined(): @@ -789,8 +791,17 @@ def certs_changed(relation_id=None, unit=None): update_all_domain_backends() -@hooks.hook('keystone-middleware-relation-joined', - 'keystone-middleware-relation-changed', +def notify_middleware_with_release_version(): + for rid in relation_ids('keystone-middleware'): + relation_set(relation_id=rid, release=os_release('keystone')) + + +@hooks.hook('keystone-middleware-relation-joined') +def keystone_middleware_joined(): + notify_middleware_with_release_version() + + +@hooks.hook('keystone-middleware-relation-changed', 'keystone-middleware-relation-broken', 'keystone-middleware-relation-departed') @restart_on_change(restart_map()) diff --git a/unit_tests/test_keystone_hooks.py b/unit_tests/test_keystone_hooks.py index b238bc86..856129ab 100644 --- a/unit_tests/test_keystone_hooks.py +++ b/unit_tests/test_keystone_hooks.py @@ -209,6 +209,7 @@ class KeystoneRelationTests(CharmTestCase): configs.write.call_args_list) self.assertTrue(leader_init.called) + @patch.object(hooks, 'notify_middleware_with_release_version') @patch.object(hooks, 'update_all_domain_backends') @patch.object(hooks, 'update_all_identity_relation_units') @patch.object(hooks, 'run_in_apache') @@ -228,7 +229,8 @@ class KeystoneRelationTests(CharmTestCase): mock_is_db_initialised, mock_run_in_apache, update, - mock_update_domains): + mock_update_domains, + mock_notify_middleware): def fake_relation_ids(relation): rids = {'cluster': ['cluster:1'], 'identity-service': ['identity-service:0']} @@ -254,6 +256,7 @@ class KeystoneRelationTests(CharmTestCase): self.assertTrue(mock_cluster_joined.called) self.assertTrue(update.called) self.assertTrue(mock_update_domains.called) + self.assertTrue(mock_notify_middleware.called_once) @patch.object(hooks, 'is_db_initialised') @patch.object(hooks, 'update_all_domain_backends') @@ -922,3 +925,25 @@ class KeystoneRelationTests(CharmTestCase): is_db_initialised.return_value = False hooks.certs_changed() self.assertFalse(ensure_initial_admin.called) + + @patch.object(hooks, 'relation_set') + @patch.object(hooks, 'os_release') + def test_keystone_middleware_notify_release( + self, + os_release, + relation_set): + self.relation_ids.return_value = ['keystone-middleware:0'] + os_release.return_value = 'Pike' + hooks.keystone_middleware_joined() + relation_set.assert_called_once_with( + relation_id='keystone-middleware:0', release='Pike') + + @patch.object(hooks, 'notify_middleware_with_release_version') + @patch.object(hooks, 'CONFIGS') + def test_keystone_middleware_config_changed( + self, + configs, + notify_middleware_with_release_version): + hooks.keystone_middleware_changed() + self.assertTrue(configs.write.called) + self.assertFalse(notify_middleware_with_release_version.called)