Skip to content

Commit cb0302c

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Fix segment-aware scheduling permissions error" into stable/yoga
2 parents dfa05d6 + 60548e8 commit cb0302c

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

nova/network/neutron.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3874,7 +3874,7 @@ def get_segment_ids_for_network(
38743874
either Segment extension isn't enabled in Neutron or if the network
38753875
isn't configured for routing.
38763876
"""
3877-
client = get_client(context)
3877+
client = get_client(context, admin=True)
38783878

38793879
if not self.has_segment_extension(client=client):
38803880
return []
@@ -3905,7 +3905,7 @@ def get_segment_id_for_subnet(
39053905
extension isn't enabled in Neutron or the provided subnet doesn't
39063906
have segments (if the related network isn't configured for routing)
39073907
"""
3908-
client = get_client(context)
3908+
client = get_client(context, admin=True)
39093909

39103910
if not self.has_segment_extension(client=client):
39113911
return None

nova/tests/unit/network/test_neutron.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7026,13 +7026,17 @@ def test_get_requested_resource_for_instance_with_multiple_ports_extended(
70267026
req_lvl_params.same_subtree,
70277027
)
70287028

7029-
def test_get_segment_ids_for_network_no_segment_ext(self):
7029+
@mock.patch.object(neutronapi, 'get_client')
7030+
def test_get_segment_ids_for_network_no_segment_ext(self, mock_client):
7031+
mocked_client = mock.create_autospec(client.Client)
7032+
mock_client.return_value = mocked_client
70307033
with mock.patch.object(
70317034
self.api, 'has_segment_extension', return_value=False,
70327035
):
70337036
self.assertEqual(
70347037
[], self.api.get_segment_ids_for_network(self.context,
70357038
uuids.network_id))
7039+
mock_client.assert_called_once_with(self.context, admin=True)
70367040

70377041
@mock.patch.object(neutronapi, 'get_client')
70387042
def test_get_segment_ids_for_network_passes(self, mock_client):
@@ -7046,6 +7050,7 @@ def test_get_segment_ids_for_network_passes(self, mock_client):
70467050
res = self.api.get_segment_ids_for_network(
70477051
self.context, uuids.network_id)
70487052
self.assertEqual([uuids.segment_id], res)
7053+
mock_client.assert_called_once_with(self.context, admin=True)
70497054
mocked_client.list_subnets.assert_called_once_with(
70507055
network_id=uuids.network_id, fields='segment_id')
70517056

@@ -7061,6 +7066,7 @@ def test_get_segment_ids_for_network_with_no_segments(self, mock_client):
70617066
res = self.api.get_segment_ids_for_network(
70627067
self.context, uuids.network_id)
70637068
self.assertEqual([], res)
7069+
mock_client.assert_called_once_with(self.context, admin=True)
70647070
mocked_client.list_subnets.assert_called_once_with(
70657071
network_id=uuids.network_id, fields='segment_id')
70667072

@@ -7076,14 +7082,19 @@ def test_get_segment_ids_for_network_fails(self, mock_client):
70767082
self.assertRaises(exception.InvalidRoutedNetworkConfiguration,
70777083
self.api.get_segment_ids_for_network,
70787084
self.context, uuids.network_id)
7085+
mock_client.assert_called_once_with(self.context, admin=True)
70797086

7080-
def test_get_segment_id_for_subnet_no_segment_ext(self):
7087+
@mock.patch.object(neutronapi, 'get_client')
7088+
def test_get_segment_id_for_subnet_no_segment_ext(self, mock_client):
7089+
mocked_client = mock.create_autospec(client.Client)
7090+
mock_client.return_value = mocked_client
70817091
with mock.patch.object(
70827092
self.api, 'has_segment_extension', return_value=False,
70837093
):
70847094
self.assertIsNone(
70857095
self.api.get_segment_id_for_subnet(self.context,
70867096
uuids.subnet_id))
7097+
mock_client.assert_called_once_with(self.context, admin=True)
70877098

70887099
@mock.patch.object(neutronapi, 'get_client')
70897100
def test_get_segment_id_for_subnet_passes(self, mock_client):
@@ -7097,6 +7108,7 @@ def test_get_segment_id_for_subnet_passes(self, mock_client):
70977108
res = self.api.get_segment_id_for_subnet(
70987109
self.context, uuids.subnet_id)
70997110
self.assertEqual(uuids.segment_id, res)
7111+
mock_client.assert_called_once_with(self.context, admin=True)
71007112
mocked_client.show_subnet.assert_called_once_with(uuids.subnet_id)
71017113

71027114
@mock.patch.object(neutronapi, 'get_client')
@@ -7111,6 +7123,7 @@ def test_get_segment_id_for_subnet_with_no_segment(self, mock_client):
71117123
self.assertIsNone(
71127124
self.api.get_segment_id_for_subnet(self.context,
71137125
uuids.subnet_id))
7126+
mock_client.assert_called_once_with(self.context, admin=True)
71147127

71157128
@mock.patch.object(neutronapi, 'get_client')
71167129
def test_get_segment_id_for_subnet_fails(self, mock_client):
@@ -7124,6 +7137,7 @@ def test_get_segment_id_for_subnet_fails(self, mock_client):
71247137
self.assertRaises(exception.InvalidRoutedNetworkConfiguration,
71257138
self.api.get_segment_id_for_subnet,
71267139
self.context, uuids.subnet_id)
7140+
mock_client.assert_called_once_with(self.context, admin=True)
71277141

71287142
@mock.patch.object(neutronapi.LOG, 'debug')
71297143
def test_get_port_pci_dev(self, mock_debug):
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
fixes:
3+
- |
4+
`Bug #1970383 <https://bugs.launchpad.net/nova/+bug/1970383>`_: Fixes a
5+
permissions error when using the
6+
'query_placement_for_routed_network_aggregates' scheduler variable, which
7+
caused a traceback on instance creation for non-admin users.

0 commit comments

Comments
 (0)