summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Bauza <sbauza@redhat.com>2023-05-03 17:00:14 +0200
committerSylvain Bauza <sbauza@redhat.com>2023-05-03 17:00:14 +0200
commit6d7bd6a03446d5227d515b2b4c0da632ef4aa4a1 (patch)
tree73cf002122589a542d3f21e5c98a2e50b741c0cc
parent3d83bb3356e10355437851919e161f258cebf761 (diff)
downloadnova-6d7bd6a03446d5227d515b2b4c0da632ef4aa4a1.tar.gz
Fix get_segments_id with subnets without segment_id
Unfortunatly when we merged Ie166f3b51fddeaf916cda7c5ac34bbcdda0fd17a we forgot that subnets can have no segment_id field. Change-Id: Idb35b7e3c69fe8efe498abe4ebcc6cad8918c4ed Closes-Bug: #2018375
-rw-r--r--nova/network/neutron.py2
-rw-r--r--nova/tests/unit/network/test_neutron.py18
2 files changed, 18 insertions, 2 deletions
diff --git a/nova/network/neutron.py b/nova/network/neutron.py
index 6c9f19f010..0ae0f4099f 100644
--- a/nova/network/neutron.py
+++ b/nova/network/neutron.py
@@ -3907,7 +3907,7 @@ class API:
'Failed to get segment IDs for network %s' % network_id) from e
# The segment field of an unconfigured subnet could be None
return [subnet['segment_id'] for subnet in subnets
- if subnet['segment_id'] is not None]
+ if subnet.get('segment_id') is not None]
def get_segment_id_for_subnet(
self,
diff --git a/nova/tests/unit/network/test_neutron.py b/nova/tests/unit/network/test_neutron.py
index eefa7b974f..9aa970aca1 100644
--- a/nova/tests/unit/network/test_neutron.py
+++ b/nova/tests/unit/network/test_neutron.py
@@ -7415,7 +7415,7 @@ class TestAPI(TestAPIBase):
network_id=uuids.network_id, fields='segment_id')
@mock.patch.object(neutronapi, 'get_client')
- def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
+ def test_get_segment_ids_for_network_with_segments_none(self, mock_client):
subnets = {'subnets': [{'segment_id': None}]}
mocked_client = mock.create_autospec(client.Client)
mock_client.return_value = mocked_client
@@ -7431,6 +7431,22 @@ class TestAPI(TestAPIBase):
network_id=uuids.network_id, fields='segment_id')
@mock.patch.object(neutronapi, 'get_client')
+ def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
+ subnets = {'subnets': [{}]}
+ mocked_client = mock.create_autospec(client.Client)
+ mock_client.return_value = mocked_client
+ mocked_client.list_subnets.return_value = subnets
+ with mock.patch.object(
+ self.api, 'has_segment_extension', return_value=True,
+ ):
+ res = self.api.get_segment_ids_for_network(
+ self.context, uuids.network_id)
+ self.assertEqual([], res)
+ mock_client.assert_called_once_with(self.context, admin=True)
+ mocked_client.list_subnets.assert_called_once_with(
+ network_id=uuids.network_id, fields='segment_id')
+
+ @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_ids_for_network_fails(self, mock_client):
mocked_client = mock.create_autospec(client.Client)
mock_client.return_value = mocked_client