Skip to content

Commit 6b8d9d4

Browse files
committed
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 (cherry picked from commit 6d7bd6a)
1 parent 47b6850 commit 6b8d9d4

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

nova/network/neutron.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3894,7 +3894,7 @@ def get_segment_ids_for_network(
38943894
'Failed to get segment IDs for network %s' % network_id) from e
38953895
# The segment field of an unconfigured subnet could be None
38963896
return [subnet['segment_id'] for subnet in subnets
3897-
if subnet['segment_id'] is not None]
3897+
if subnet.get('segment_id') is not None]
38983898

38993899
def get_segment_id_for_subnet(
39003900
self,

nova/tests/unit/network/test_neutron.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7415,7 +7415,7 @@ def test_get_segment_ids_for_network_passes(self, mock_client):
74157415
network_id=uuids.network_id, fields='segment_id')
74167416

74177417
@mock.patch.object(neutronapi, 'get_client')
7418-
def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
7418+
def test_get_segment_ids_for_network_with_segments_none(self, mock_client):
74197419
subnets = {'subnets': [{'segment_id': None}]}
74207420
mocked_client = mock.create_autospec(client.Client)
74217421
mock_client.return_value = mocked_client
@@ -7430,6 +7430,22 @@ def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
74307430
mocked_client.list_subnets.assert_called_once_with(
74317431
network_id=uuids.network_id, fields='segment_id')
74327432

7433+
@mock.patch.object(neutronapi, 'get_client')
7434+
def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
7435+
subnets = {'subnets': [{}]}
7436+
mocked_client = mock.create_autospec(client.Client)
7437+
mock_client.return_value = mocked_client
7438+
mocked_client.list_subnets.return_value = subnets
7439+
with mock.patch.object(
7440+
self.api, 'has_segment_extension', return_value=True,
7441+
):
7442+
res = self.api.get_segment_ids_for_network(
7443+
self.context, uuids.network_id)
7444+
self.assertEqual([], res)
7445+
mock_client.assert_called_once_with(self.context, admin=True)
7446+
mocked_client.list_subnets.assert_called_once_with(
7447+
network_id=uuids.network_id, fields='segment_id')
7448+
74337449
@mock.patch.object(neutronapi, 'get_client')
74347450
def test_get_segment_ids_for_network_fails(self, mock_client):
74357451
mocked_client = mock.create_autospec(client.Client)

0 commit comments

Comments
 (0)