From 232e02f37d3c65d8882e89c0e4d212297ed0e948 Mon Sep 17 00:00:00 2001 From: David Ames Date: Fri, 5 May 2017 09:49:17 -0700 Subject: [PATCH] Network space aware address for cluster relation Use the get_relation_ip function for selecting addresses for the cluster relationship. Including overrides for the admin, internal, and public config settings or extra bindings. Partial-Bug: #1687439 Change-Id: I3e651e32a970a427597cc485b8549d51442919cd --- hooks/ceilometer_hooks.py | 23 ++++++++++++++--------- unit_tests/test_ceilometer_hooks.py | 28 ++++++++++------------------ 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/hooks/ceilometer_hooks.py b/hooks/ceilometer_hooks.py index cfc20d7..4619343 100755 --- a/hooks/ceilometer_hooks.py +++ b/hooks/ceilometer_hooks.py @@ -41,6 +41,7 @@ from charmhelpers.core.host import ( mkdir, init_is_systemd, ) +from charmhelpers.contrib.openstack.context import ADDRESS_TYPES from charmhelpers.contrib.openstack.utils import ( configure_installation_source, os_release, @@ -79,7 +80,7 @@ from charmhelpers.contrib.charmsupport import nrpe from charmhelpers.contrib.network.ip import ( get_iface_for_address, get_netmask_for_address, - get_address_in_network + get_relation_ip, ) from charmhelpers.contrib.hahelpers.cluster import ( get_hacluster_config, @@ -259,15 +260,19 @@ def cluster_joined(relation_id=None): peer_store('shared_secret', get_shared_secret()) CONFIGS.write_all() - for addr_type in [ADMIN, PUBLIC, INTERNAL]: - address = get_address_in_network( - config('os-{}-network'.format(addr_type)) - ) + + settings = {} + + for addr_type in ADDRESS_TYPES: + address = get_relation_ip( + addr_type, + cidr_network=config('os-{}-network'.format(addr_type))) if address: - relation_set( - relation_id=relation_id, - relation_settings={'{}-address'.format(addr_type): address} - ) + settings['{}-address'.format(addr_type)] = address + + settings['private-address'] = get_relation_ip('cluster') + + relation_set(relation_id=relation_id, relation_settings=settings) @hooks.hook('cluster-relation-changed', diff --git a/unit_tests/test_ceilometer_hooks.py b/unit_tests/test_ceilometer_hooks.py index 9956722..a2c818d 100644 --- a/unit_tests/test_ceilometer_hooks.py +++ b/unit_tests/test_ceilometer_hooks.py @@ -42,6 +42,7 @@ from test_utils import CharmTestCase TO_PATCH = [ 'relation_get', 'relation_set', + 'related_units', 'configure_installation_source', 'openstack_upgrade_available', 'do_openstack_upgrade', @@ -68,6 +69,7 @@ TO_PATCH = [ 'mkdir', 'init_is_systemd', 'os_release', + 'get_relation_ip', ] @@ -272,7 +274,7 @@ class CeilometerHooksTest(CharmTestCase): mock_leader.return_value = False hooks.hooks.execute(['hooks/cluster-relation-joined']) - self.assertFalse(self.relation_set.called) + self.assertTrue(self.relation_set.called) self.assertTrue(self.CONFIGS.write_all.called) @patch('charmhelpers.core.hookenv.config') @@ -290,30 +292,20 @@ class CeilometerHooksTest(CharmTestCase): self.assertTrue(self.CONFIGS.write_all.called) @patch('charmhelpers.core.hookenv.config') - @patch.object(hooks, 'get_address_in_network') @patch.object(hooks, 'install_ceilometer_ocf') @patch.object(hooks, 'is_elected_leader') - def test_cluster_joined_os_networks(self, mock_leader, mock_install_ocf, - get_addr, mock_config): + def test_cluster_joined(self, mock_leader, mock_install_ocf, mock_config): mock_leader.return_value = False - get_addr.return_value = '10.0.0.100' - rel_settings = {'int-address': '10.0.0.100'} + self.get_relation_ip.side_effect = [ + '10.0.0.100', '10.0.1.100', '10.0.2.100', '10.0.3.100'] + rel_settings = {'private-address': '10.0.3.100', + 'public-address': '10.0.2.100', + 'internal-address': '10.0.1.100', + 'admin-address': '10.0.0.100'} hooks.hooks.execute(['hooks/cluster-relation-joined']) self.relation_set.assert_called_with(relation_id=None, relation_settings=rel_settings) - @patch('charmhelpers.core.hookenv.config') - @patch.object(hooks, 'get_address_in_network') - @patch.object(hooks, 'install_ceilometer_ocf') - @patch.object(hooks, 'is_elected_leader') - def test_cluster_joined_no_os_networks(self, mock_leader, - mock_install_ocf, - get_addr, mock_config): - mock_leader.return_value = False - get_addr.return_value = None - hooks.hooks.execute(['hooks/cluster-relation-joined']) - self.assertEquals(self.relation_set.call_count, 0) - @patch('charmhelpers.core.hookenv.config') @patch.object(hooks, 'set_shared_secret') def test_cluster_changed(self, shared_secret, mock_config):