diff --git a/os_client_config/cloud_config.py b/os_client_config/cloud_config.py index e63bd12..5dfbba9 100644 --- a/os_client_config/cloud_config.py +++ b/os_client_config/cloud_config.py @@ -442,23 +442,25 @@ class CloudConfig(object): def get_external_networks(self): """Get list of network names for external networks.""" return [ - net['name'] for net in self._openstack_config['networks'] + net['name'] for net in self.config['networks'] if net['routes_externally']] def get_internal_networks(self): """Get list of network names for internal networks.""" return [ - net['name'] for net in self._openstack_config['networks'] + net['name'] for net in self.config['networks'] if not net['routes_externally']] def get_default_network(self): """Get network used for default interactions.""" - for net in self._openstack_config['networks']: + for net in self.config['networks']: if net['default_interface']: - return net + return net['name'] + return None def get_nat_destination(self): """Get network used for NAT destination.""" - for net in self._openstack_config['networks']: + for net in self.config['networks']: if net['nat_destination']: - return net + return net['name'] + return None diff --git a/os_client_config/tests/base.py b/os_client_config/tests/base.py index 9b784b1..d046a94 100644 --- a/os_client_config/tests/base.py +++ b/os_client_config/tests/base.py @@ -90,6 +90,32 @@ USER_CONF = { }, 'region_name': 'test-region', }, + '_test-cloud-networks_': { + 'auth': { + 'username': 'testuser', + 'password': 'testpass', + 'project_id': 12345, + 'auth_url': 'http://example.com/v2', + 'domain_id': '6789', + 'project_domain_id': '123456789', + }, + 'networks': [{ + 'name': 'a-public', + 'routes_externally': True, + }, { + 'name': 'another-public', + 'routes_externally': True, + 'default_interface': True, + }, { + 'name': 'a-private', + 'routes_externally': False, + }, { + 'name': 'another-private', + 'routes_externally': False, + 'nat_destination': True, + }], + 'region_name': 'test-region', + }, '_test_cloud_regions': { 'auth': { 'username': 'testuser', diff --git a/os_client_config/tests/test_config.py b/os_client_config/tests/test_config.py index 7c2bec0..a0978f0 100644 --- a/os_client_config/tests/test_config.py +++ b/os_client_config/tests/test_config.py @@ -187,6 +187,26 @@ class TestConfig(base.TestCase): self.assertEqual('user', cc.auth['username']) self.assertEqual('testpass', cc.auth['password']) + def test_get_one_cloud_networks(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + cc = c.get_one_cloud('_test-cloud-networks_') + self.assertEqual( + ['a-public', 'another-public'], cc.get_external_networks()) + self.assertEqual( + ['a-private', 'another-private'], cc.get_internal_networks()) + self.assertEqual('another-private', cc.get_nat_destination()) + self.assertEqual('another-public', cc.get_default_network()) + + def test_get_one_cloud_no_networks(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + cc = c.get_one_cloud('_test-cloud-domain-scoped_') + self.assertEqual([], cc.get_external_networks()) + self.assertEqual([], cc.get_internal_networks()) + self.assertIsNone(cc.get_nat_destination()) + self.assertIsNone(cc.get_default_network()) + def test_only_secure_yaml(self): c = config.OpenStackConfig(config_files=['nonexistent'], vendor_files=['nonexistent'], @@ -201,6 +221,7 @@ class TestConfig(base.TestCase): ['_test-cloud-domain-id_', '_test-cloud-domain-scoped_', '_test-cloud-int-project_', + '_test-cloud-networks_', '_test-cloud_', '_test-cloud_no_region', '_test_cloud_hyphenated',