diff --git a/hooks/ceilometer_hooks.py b/hooks/ceilometer_hooks.py index c375a3f..e85ef97 100755 --- a/hooks/ceilometer_hooks.py +++ b/hooks/ceilometer_hooks.py @@ -34,6 +34,7 @@ from charmhelpers.core.hookenv import ( log, status_set, WARNING, + DEBUG, ) from charmhelpers.core.host import ( service_restart, @@ -84,6 +85,7 @@ from charmhelpers.contrib.network.ip import ( ) from charmhelpers.contrib.hahelpers.cluster import ( get_hacluster_config, + is_clustered, is_elected_leader ) from charmhelpers.contrib.peerstorage import ( @@ -350,6 +352,10 @@ def ha_changed(): @hooks.hook("identity-service-relation-joined") def keystone_joined(relid=None): + if config('vip') and not is_clustered(): + log('Defering registration until clustered', level=DEBUG) + return + public_url = "{}:{}".format( canonical_url(CONFIGS, PUBLIC), CEILOMETER_PORT diff --git a/unit_tests/test_ceilometer_hooks.py b/unit_tests/test_ceilometer_hooks.py index 5c8ca4b..b2d8440 100644 --- a/unit_tests/test_ceilometer_hooks.py +++ b/unit_tests/test_ceilometer_hooks.py @@ -68,6 +68,7 @@ TO_PATCH = [ 'mkdir', 'init_is_systemd', 'get_relation_ip', + 'is_clustered', ] @@ -264,6 +265,12 @@ class CeilometerHooksTest(CharmTestCase): requested_roles=hooks.CEILOMETER_ROLE, region='myregion', relation_id=None) + def test_keystone_joined_partial_cluster(self): + self.is_clustered.return_value = False + self.test_config.set('vip', '10.0.0.10') + hooks.keystone_joined() + self.assertFalse(self.relation_set.called) + @patch('charmhelpers.core.hookenv.config') def test_ceilometer_joined(self, mock_config): self.relation_ids.return_value = ['ceilometer:0']