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(), [