From 33fd6a52b5db48f641e591f98f2218852e0163ad Mon Sep 17 00:00:00 2001 From: Tytus Kurek Date: Thu, 10 May 2018 17:08:33 +0200 Subject: [PATCH] Set "VirtualHost" to reflect bindings This patchset fixes the issue with IP address not being set properly in "VirtualHost" section of "openstack_https_frontend.conf" file when deploying reactive charms in the HA mode. Change-Id: Iee9f9d3621b0055bc62eaaed16d21b8f85113af9 Closes-Bug: 1745389 --- charms_openstack/adapters.py | 15 +++++++++------ unit_tests/test_charms_openstack_adapters.py | 10 ++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/charms_openstack/adapters.py b/charms_openstack/adapters.py index 9bc65fc..8991a88 100644 --- a/charms_openstack/adapters.py +++ b/charms_openstack/adapters.py @@ -800,12 +800,15 @@ class APIConfigurationAdapter(ConfigurationAdapter): """ addresses = [] for net_type in ADDRESS_TYPES: - net_cfg_opt = os_ip.ADDRESS_MAP[net_type]['config'].replace('-', - '_') - config_cidr = getattr(self, net_cfg_opt, None) - addr = ch_ip.get_address_in_network( - config_cidr, - hookenv.unit_get('private-address')) + net_cfg_opt = os_ip.ADDRESS_MAP[net_type]['config'] + config_cidr = getattr(self, net_cfg_opt.replace('-', '_'), None) + if hookenv.config(net_cfg_opt): + addr = ch_ip.get_address_in_network( + config_cidr, + hookenv.unit_get('private-address')) + else: + addr = ch_ip.get_relation_ip( + os_ip.ADDRESS_MAP[net_type]['binding']) addresses.append( (addr, os_ip.resolve_address(endpoint_type=net_type))) return sorted(addresses) diff --git a/unit_tests/test_charms_openstack_adapters.py b/unit_tests/test_charms_openstack_adapters.py index 20ec409..67b4420 100644 --- a/unit_tests/test_charms_openstack_adapters.py +++ b/unit_tests/test_charms_openstack_adapters.py @@ -564,13 +564,15 @@ class TestAPIConfigurationAdapter(unittest.TestCase): return resolved_addresses[endpoint_type] with mock.patch.object(adapters.hookenv, 'config', - new=lambda: test_config), \ + return_value=test_config), \ mock.patch.object(adapters.hookenv, 'unit_get', return_value='thisunit'), \ - mock.patch.object(adapters.os_ip, 'resolve_address', - new=_resolve_address), \ mock.patch.object(adapters.ch_ip, 'get_address_in_network', - new=lambda x, y: test_networks[x]): + new=lambda x, y: test_networks[x]), \ + mock.patch.object(adapters.ch_ip, 'get_relation_ip', + new=lambda x, y: test_networks[x]), \ + mock.patch.object(adapters.os_ip, 'resolve_address', + new=_resolve_address): c = adapters.APIConfigurationAdapter() self.assertEqual( c.get_network_addresses(), [