From a240c520a520ca92f338efa3717b2a09f4a7281d Mon Sep 17 00:00:00 2001 From: David Ames Date: Mon, 9 Apr 2018 14:37:29 -0700 Subject: [PATCH] Run identity client relations when db is complete When keystone is deployed with multiple units but without hacluster one off scenarios occur where one non-leader unit will fail to update its client relations. This change runs all identity client relations when the database relation is complete thus guaranteeing all keystone units update there identity relation data with clients. Small timing fix to amulet tests. Closes-Bug: #1761562 Change-Id: I338e500dbc155b75c75b9261a9b5b471bd73088a --- hooks/keystone_hooks.py | 1 + tests/basic_deployment.py | 1 + unit_tests/test_keystone_hooks.py | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hooks/keystone_hooks.py b/hooks/keystone_hooks.py index 0bf6ea43..ca56c1ec 100755 --- a/hooks/keystone_hooks.py +++ b/hooks/keystone_hooks.py @@ -422,6 +422,7 @@ def db_changed(): if CompareOpenStackReleases( os_release('keystone-common')) >= 'liberty': CONFIGS.write(POLICY_JSON) + update_all_identity_relation_units() @hooks.hook('identity-service-relation-changed') diff --git a/tests/basic_deployment.py b/tests/basic_deployment.py index 2f01247f..192c11ff 100644 --- a/tests/basic_deployment.py +++ b/tests/basic_deployment.py @@ -905,6 +905,7 @@ class KeystoneBasicDeployment(OpenStackAmuletDeployment): amulet.raise_status(amulet.FAIL, msg=msg) self.d.configure(juju_service, set_default) + self._auto_wait_for_status(exclude_services=self.exclude_services) u.log.debug('OK') diff --git a/unit_tests/test_keystone_hooks.py b/unit_tests/test_keystone_hooks.py index 6d45c961..b3c8c8d8 100644 --- a/unit_tests/test_keystone_hooks.py +++ b/unit_tests/test_keystone_hooks.py @@ -210,7 +210,8 @@ class KeystoneRelationTests(CharmTestCase): 'shared-db relation incomplete. Peer not ready?' ) - def _shared_db_test(self, configs, unit_name): + @patch.object(hooks, 'update_all_identity_relation_units') + def _shared_db_test(self, configs, unit_name, mock_update_all): self.relation_get.return_value = 'keystone/0 keystone/3' self.local_unit.return_value = unit_name configs.complete_contexts = MagicMock()