compute: Avoid third API call during 'server show'

We can use a detailed list instead when looking up by name. We also
improve tests somewhat.

Change-Id: I18b38e7fbcac813190b304c4d67d8ea03d8c1a80
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane
2024-05-09 13:48:43 +01:00
parent 628ac48901
commit 2057462120
2 changed files with 31 additions and 4 deletions

View File

@@ -4642,11 +4642,11 @@ information for the server."""
compute_client = self.app.client_manager.sdk_connection.compute
image_client = self.app.client_manager.image
# Find by name or ID, then get the full details of the server
server = compute_client.find_server(
parsed_args.server, ignore_missing=False
parsed_args.server,
ignore_missing=False,
details=True,
)
server = compute_client.get_server(server)
if parsed_args.diagnostics:
data = compute_client.get_server_diagnostics(server)

View File

@@ -8401,7 +8401,7 @@ class TestServerShow(TestServer):
attrs=server_info,
)
self.server.fetch_topology = mock.MagicMock(return_value=self.topology)
self.compute_sdk_client.get_server.return_value = self.server
self.compute_sdk_client.find_server.return_value = self.server
# Get the command object to test
self.cmd = server.ShowServer(self.app, None)
@@ -8530,6 +8530,10 @@ class TestServerShow(TestServer):
self.assertTupleEqual(self.columns, columns)
self.assertTupleEqual(self.data, data)
self.compute_sdk_client.find_server.assert_called_once_with(
self.server.name, ignore_missing=False, details=True
)
self.compute_sdk_client.get_server.assert_not_called()
def test_show_embedded_flavor(self):
# Tests using --os-compute-api-version >= 2.47 where the flavor
@@ -8558,6 +8562,10 @@ class TestServerShow(TestServer):
# Since the flavor details are in a dict we can't be sure of the
# ordering so just assert that one of the keys is in the output.
self.assertIn('original_name', data[columns.index('flavor')]._value)
self.compute_sdk_client.find_server.assert_called_once_with(
self.server.name, ignore_missing=False, details=True
)
self.compute_sdk_client.get_server.assert_not_called()
def test_show_diagnostics(self):
arglist = [
@@ -8575,6 +8583,13 @@ class TestServerShow(TestServer):
self.assertEqual(('test',), columns)
self.assertEqual(('test',), data)
self.compute_sdk_client.find_server.assert_called_once_with(
self.server.name, ignore_missing=False, details=True
)
self.compute_sdk_client.get_server_diagnostics.assert_called_once_with(
self.server
)
self.compute_sdk_client.get_server.assert_not_called()
def test_show_topology(self):
self.set_compute_api_version('2.78')
@@ -8597,6 +8612,13 @@ class TestServerShow(TestServer):
self.assertCountEqual(self.columns, columns)
self.assertCountEqual(self.data, data)
self.compute_sdk_client.find_server.assert_called_once_with(
self.server.name, ignore_missing=False, details=True
)
self.server.fetch_topology.assert_called_once_with(
self.compute_sdk_client
)
self.compute_sdk_client.get_server.assert_not_called()
def test_show_topology_pre_v278(self):
self.set_compute_api_version('2.77')
@@ -8615,6 +8637,11 @@ class TestServerShow(TestServer):
self.assertRaises(
exceptions.CommandError, self.cmd.take_action, parsed_args
)
self.compute_sdk_client.find_server.assert_called_once_with(
self.server.name, ignore_missing=False, details=True
)
self.server.fetch_topology.assert_not_called()
self.compute_sdk_client.get_server.assert_not_called()
@mock.patch('openstackclient.compute.v2.server.os.system')