network: Fix update of network provider
On update the network provider parameters were nested in the "provider". According to the Neutron API [0], update should follow the same semantics as create. [0] https://docs.openstack.org/api-ref/network/v2/?expanded=update-network-detail#update-network Change-Id: Ie2664611873f7528b9a2e6c0fbdbcf12a2c4ba90
This commit is contained in:
parent
98f0c67120
commit
44c5515602
@ -568,17 +568,15 @@ class NetworkCloudMixin:
|
||||
:returns: The updated network object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
"""
|
||||
if 'provider' in kwargs:
|
||||
if not isinstance(kwargs['provider'], dict):
|
||||
provider = kwargs.pop('provider', None)
|
||||
if provider:
|
||||
if not isinstance(provider, dict):
|
||||
raise exc.OpenStackCloudException(
|
||||
"Parameter 'provider' must be a dict")
|
||||
# Only pass what we know
|
||||
provider = {}
|
||||
for key in kwargs['provider']:
|
||||
if key in ('physical_network', 'network_type',
|
||||
'segmentation_id'):
|
||||
provider['provider:' + key] = kwargs['provider'][key]
|
||||
kwargs['provider'] = provider
|
||||
for key in ('physical_network', 'network_type',
|
||||
'segmentation_id'):
|
||||
if key in provider:
|
||||
kwargs['provider:' + key] = provider.pop(key)
|
||||
|
||||
if 'external' in kwargs:
|
||||
kwargs['router:external'] = kwargs.pop('external')
|
||||
|
@ -175,6 +175,47 @@ class TestNetwork(base.TestCase):
|
||||
self._compare_networks(mock_new_network_rep, network)
|
||||
self.assert_calls()
|
||||
|
||||
def test_update_network_provider(self):
|
||||
network_id = "test-net-id"
|
||||
network_name = "network"
|
||||
network = {'id': network_id, 'name': network_name}
|
||||
provider_opts = {'physical_network': 'mynet',
|
||||
'network_type': 'vlan',
|
||||
'segmentation_id': 'vlan1',
|
||||
'should_not_be_passed': 1}
|
||||
update_network_provider_opts = {
|
||||
'provider:physical_network': 'mynet',
|
||||
'provider:network_type': 'vlan',
|
||||
'provider:segmentation_id': 'vlan1'
|
||||
}
|
||||
mock_update_rep = copy.copy(self.mock_new_network_rep)
|
||||
mock_update_rep.update(update_network_provider_opts)
|
||||
self.register_uris([
|
||||
dict(method='GET',
|
||||
uri=self.get_mock_url(
|
||||
'network', 'public',
|
||||
append=['v2.0', 'networks', network_name]),
|
||||
status_code=404),
|
||||
dict(method='GET',
|
||||
uri=self.get_mock_url(
|
||||
'network', 'public', append=['v2.0', 'networks'],
|
||||
qs_elements=['name=%s' % network_name]),
|
||||
json={'networks': [network]}),
|
||||
dict(method='PUT',
|
||||
uri=self.get_mock_url(
|
||||
'network', 'public',
|
||||
append=['v2.0', 'networks', network_id]),
|
||||
json={'network': mock_update_rep},
|
||||
validate=dict(
|
||||
json={'network': update_network_provider_opts}))
|
||||
])
|
||||
network = self.cloud.update_network(
|
||||
network_name,
|
||||
provider=provider_opts
|
||||
)
|
||||
self._compare_networks(mock_update_rep, network)
|
||||
self.assert_calls()
|
||||
|
||||
def test_create_network_with_availability_zone_hints(self):
|
||||
self.register_uris([
|
||||
dict(method='GET',
|
||||
|
Loading…
Reference in New Issue
Block a user