diff options
author | Monty Taylor <mordred@inaugust.com> | 2016-03-30 16:10:04 -0700 |
---|---|---|
committer | Monty Taylor <mordred@inaugust.com> | 2016-03-30 16:15:49 -0700 |
commit | 278a761df68d1e7d4d93ee2c6fb91f1a0e82e78a (patch) | |
tree | 204f64b43bd89ac247069e583723048b92b0a69a | |
parent | 9d49a7a87329095cd47efbc32d77ffa52a8cec22 (diff) | |
download | os-client-config-278a761df68d1e7d4d93ee2c6fb91f1a0e82e78a.tar.gz |
Change network info indication to a generic list
Networks can have more information than just internal or external. Notably,
if you have two private networks and you're trying to assign floating
ips, you need to know which network should be the recipient.
This should be backwards compatible with existing external_network and
internal_network options.
Change-Id: I0d469339ba00486683fcd3ce2995002fa0a576d1
-rw-r--r-- | README.rst | 12 | ||||
-rw-r--r-- | os_client_config/config.py | 24 | ||||
-rw-r--r-- | os_client_config/tests/test_config.py | 31 | ||||
-rw-r--r-- | releasenotes/notes/network-list-e6e9dafdd8446263.yaml | 11 |
4 files changed, 74 insertions, 4 deletions
@@ -289,12 +289,16 @@ region. regions: - name: ams01 values: - external_network: inap-17037-WAN1654 - internal_network: inap-17037-LAN4820 + networks: + - name: inap-17037-WAN1654 + routes_externally: true + - name: inap-17037-LAN6745 - name: nyj01 values: - external_network: inap-17037-WAN7752 - internal_network: inap-17037-LAN6745 + networks: + - name: inap-17037-WAN1654 + routes_externally: true + - name: inap-17037-LAN6745 Usage ----- diff --git a/os_client_config/config.py b/os_client_config/config.py index 2f6adeb..98870f6 100644 --- a/os_client_config/config.py +++ b/os_client_config/config.py @@ -477,6 +477,7 @@ class OpenStackConfig(object): cloud = self._fix_backwards_auth_plugin(cloud) cloud = self._fix_backwards_project(cloud) cloud = self._fix_backwards_interface(cloud) + cloud = self._fix_backwards_networks(cloud) cloud = self._handle_domain_id(cloud) return cloud @@ -485,6 +486,29 @@ class OpenStackConfig(object): or 'project_id' in cloud['auth'] or 'project_name' in cloud['auth']) + def _fix_backwards_networks(self, cloud): + # Leave the external_network and internal_network keys in the + # dict because consuming code might be expecting them. + networks = cloud.get('networks', []) + for key in ('external_network', 'internal_network'): + external = key.startswith('external') + if key in cloud and 'networks' in cloud: + raise exceptions.OpenStackConfigException( + "Both {key} and networks were specified in the config." + " Please remove {key} from the config and use the network" + " list to configure network behavior.".format(key=key)) + if key in cloud: + warnings.warn( + "{key} is deprecated. Please replace with an entry in" + " a dict inside of the networks list with name: {name}" + " and routes_externally: {external}".format( + key=key, name=cloud[key], external=external)) + networks.append(dict( + name=cloud[key], + routes_externally=external)) + cloud['networks'] = networks + return cloud + def _handle_domain_id(self, cloud): # Allow people to just specify domain once if it's the same mappings = { diff --git a/os_client_config/tests/test_config.py b/os_client_config/tests/test_config.py index 10a3d7b..0db1457 100644 --- a/os_client_config/tests/test_config.py +++ b/os_client_config/tests/test_config.py @@ -753,3 +753,34 @@ class TestBackwardsCompatibility(base.TestCase): } } self.assertEqual(expected, result) + + def test_backwards_network_fail(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + cloud = { + 'external_network': 'public', + 'networks': [ + {'name': 'private', 'routes_externally': False}, + ] + } + self.assertRaises( + exceptions.OpenStackConfigException, + c._fix_backwards_networks, cloud) + + def test_backwards_network(self): + c = config.OpenStackConfig(config_files=[self.cloud_yaml], + vendor_files=[self.vendor_yaml]) + cloud = { + 'external_network': 'public', + 'internal_network': 'private', + } + result = c._fix_backwards_networks(cloud) + expected = { + 'external_network': 'public', + 'internal_network': 'private', + 'networks': [ + {'name': 'public', 'routes_externally': True}, + {'name': 'private', 'routes_externally': False}, + ] + } + self.assertEqual(expected, result) diff --git a/releasenotes/notes/network-list-e6e9dafdd8446263.yaml b/releasenotes/notes/network-list-e6e9dafdd8446263.yaml new file mode 100644 index 0000000..8375488 --- /dev/null +++ b/releasenotes/notes/network-list-e6e9dafdd8446263.yaml @@ -0,0 +1,11 @@ +--- +features: + - Support added for configuring metadata about networks + for a cloud in a list of dicts, rather than in the + external_network and internal_network entries. The dicts + support a name and a routes_externally field, as well as + any other arbitrary metadata needed by consuming + applications. +deprecations: + - external_network and internal_network are deprecated and + should be replaced with the list of network dicts. |