Merge "Fix segment-aware scheduling permissions error"

This commit is contained in:
Zuul 2022-05-05 11:32:17 +00:00 committed by Gerrit Code Review
commit 979a49aa0e
3 changed files with 25 additions and 4 deletions

View File

@ -3831,7 +3831,7 @@ class API:
either Segment extension isn't enabled in Neutron or if the network either Segment extension isn't enabled in Neutron or if the network
isn't configured for routing. isn't configured for routing.
""" """
client = get_client(context) client = get_client(context, admin=True)
if not self.has_segment_extension(client=client): if not self.has_segment_extension(client=client):
return [] return []
@ -3862,7 +3862,7 @@ class API:
extension isn't enabled in Neutron or the provided subnet doesn't extension isn't enabled in Neutron or the provided subnet doesn't
have segments (if the related network isn't configured for routing) have segments (if the related network isn't configured for routing)
""" """
client = get_client(context) client = get_client(context, admin=True)
if not self.has_segment_extension(client=client): if not self.has_segment_extension(client=client):
return None return None

View File

@ -7026,13 +7026,17 @@ class TestAPI(TestAPIBase):
req_lvl_params.same_subtree, req_lvl_params.same_subtree,
) )
def test_get_segment_ids_for_network_no_segment_ext(self): @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_ids_for_network_no_segment_ext(self, mock_client):
mocked_client = mock.create_autospec(client.Client)
mock_client.return_value = mocked_client
with mock.patch.object( with mock.patch.object(
self.api, 'has_segment_extension', return_value=False, self.api, 'has_segment_extension', return_value=False,
): ):
self.assertEqual( self.assertEqual(
[], self.api.get_segment_ids_for_network(self.context, [], self.api.get_segment_ids_for_network(self.context,
uuids.network_id)) uuids.network_id))
mock_client.assert_called_once_with(self.context, admin=True)
@mock.patch.object(neutronapi, 'get_client') @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_ids_for_network_passes(self, mock_client): def test_get_segment_ids_for_network_passes(self, mock_client):
@ -7046,6 +7050,7 @@ class TestAPI(TestAPIBase):
res = self.api.get_segment_ids_for_network( res = self.api.get_segment_ids_for_network(
self.context, uuids.network_id) self.context, uuids.network_id)
self.assertEqual([uuids.segment_id], res) self.assertEqual([uuids.segment_id], res)
mock_client.assert_called_once_with(self.context, admin=True)
mocked_client.list_subnets.assert_called_once_with( mocked_client.list_subnets.assert_called_once_with(
network_id=uuids.network_id, fields='segment_id') network_id=uuids.network_id, fields='segment_id')
@ -7061,6 +7066,7 @@ class TestAPI(TestAPIBase):
res = self.api.get_segment_ids_for_network( res = self.api.get_segment_ids_for_network(
self.context, uuids.network_id) self.context, uuids.network_id)
self.assertEqual([], res) self.assertEqual([], res)
mock_client.assert_called_once_with(self.context, admin=True)
mocked_client.list_subnets.assert_called_once_with( mocked_client.list_subnets.assert_called_once_with(
network_id=uuids.network_id, fields='segment_id') network_id=uuids.network_id, fields='segment_id')
@ -7076,14 +7082,19 @@ class TestAPI(TestAPIBase):
self.assertRaises(exception.InvalidRoutedNetworkConfiguration, self.assertRaises(exception.InvalidRoutedNetworkConfiguration,
self.api.get_segment_ids_for_network, self.api.get_segment_ids_for_network,
self.context, uuids.network_id) self.context, uuids.network_id)
mock_client.assert_called_once_with(self.context, admin=True)
def test_get_segment_id_for_subnet_no_segment_ext(self): @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_id_for_subnet_no_segment_ext(self, mock_client):
mocked_client = mock.create_autospec(client.Client)
mock_client.return_value = mocked_client
with mock.patch.object( with mock.patch.object(
self.api, 'has_segment_extension', return_value=False, self.api, 'has_segment_extension', return_value=False,
): ):
self.assertIsNone( self.assertIsNone(
self.api.get_segment_id_for_subnet(self.context, self.api.get_segment_id_for_subnet(self.context,
uuids.subnet_id)) uuids.subnet_id))
mock_client.assert_called_once_with(self.context, admin=True)
@mock.patch.object(neutronapi, 'get_client') @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_id_for_subnet_passes(self, mock_client): def test_get_segment_id_for_subnet_passes(self, mock_client):
@ -7097,6 +7108,7 @@ class TestAPI(TestAPIBase):
res = self.api.get_segment_id_for_subnet( res = self.api.get_segment_id_for_subnet(
self.context, uuids.subnet_id) self.context, uuids.subnet_id)
self.assertEqual(uuids.segment_id, res) self.assertEqual(uuids.segment_id, res)
mock_client.assert_called_once_with(self.context, admin=True)
mocked_client.show_subnet.assert_called_once_with(uuids.subnet_id) mocked_client.show_subnet.assert_called_once_with(uuids.subnet_id)
@mock.patch.object(neutronapi, 'get_client') @mock.patch.object(neutronapi, 'get_client')
@ -7111,6 +7123,7 @@ class TestAPI(TestAPIBase):
self.assertIsNone( self.assertIsNone(
self.api.get_segment_id_for_subnet(self.context, self.api.get_segment_id_for_subnet(self.context,
uuids.subnet_id)) uuids.subnet_id))
mock_client.assert_called_once_with(self.context, admin=True)
@mock.patch.object(neutronapi, 'get_client') @mock.patch.object(neutronapi, 'get_client')
def test_get_segment_id_for_subnet_fails(self, mock_client): def test_get_segment_id_for_subnet_fails(self, mock_client):
@ -7124,6 +7137,7 @@ class TestAPI(TestAPIBase):
self.assertRaises(exception.InvalidRoutedNetworkConfiguration, self.assertRaises(exception.InvalidRoutedNetworkConfiguration,
self.api.get_segment_id_for_subnet, self.api.get_segment_id_for_subnet,
self.context, uuids.subnet_id) self.context, uuids.subnet_id)
mock_client.assert_called_once_with(self.context, admin=True)
@mock.patch.object(neutronapi.LOG, 'debug') @mock.patch.object(neutronapi.LOG, 'debug')
def test_get_port_pci_dev(self, mock_debug): def test_get_port_pci_dev(self, mock_debug):

View File

@ -0,0 +1,7 @@
---
fixes:
- |
`Bug #1970383 <https://bugs.launchpad.net/nova/+bug/1970383>`_: Fixes a
permissions error when using the
'query_placement_for_routed_network_aggregates' scheduler variable, which
caused a traceback on instance creation for non-admin users.