Skip to content

Commit 2057462

Browse files
committed
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>
1 parent 628ac48 commit 2057462

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4642,11 +4642,11 @@ def take_action(self, parsed_args):
46424642
compute_client = self.app.client_manager.sdk_connection.compute
46434643
image_client = self.app.client_manager.image
46444644

4645-
# Find by name or ID, then get the full details of the server
46464645
server = compute_client.find_server(
4647-
parsed_args.server, ignore_missing=False
4646+
parsed_args.server,
4647+
ignore_missing=False,
4648+
details=True,
46484649
)
4649-
server = compute_client.get_server(server)
46504650

46514651
if parsed_args.diagnostics:
46524652
data = compute_client.get_server_diagnostics(server)

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8401,7 +8401,7 @@ def setUp(self):
84018401
attrs=server_info,
84028402
)
84038403
self.server.fetch_topology = mock.MagicMock(return_value=self.topology)
8404-
self.compute_sdk_client.get_server.return_value = self.server
8404+
self.compute_sdk_client.find_server.return_value = self.server
84058405

84068406
# Get the command object to test
84078407
self.cmd = server.ShowServer(self.app, None)
@@ -8530,6 +8530,10 @@ def test_show(self):
85308530

85318531
self.assertTupleEqual(self.columns, columns)
85328532
self.assertTupleEqual(self.data, data)
8533+
self.compute_sdk_client.find_server.assert_called_once_with(
8534+
self.server.name, ignore_missing=False, details=True
8535+
)
8536+
self.compute_sdk_client.get_server.assert_not_called()
85338537

85348538
def test_show_embedded_flavor(self):
85358539
# Tests using --os-compute-api-version >= 2.47 where the flavor
@@ -8558,6 +8562,10 @@ def test_show_embedded_flavor(self):
85588562
# Since the flavor details are in a dict we can't be sure of the
85598563
# ordering so just assert that one of the keys is in the output.
85608564
self.assertIn('original_name', data[columns.index('flavor')]._value)
8565+
self.compute_sdk_client.find_server.assert_called_once_with(
8566+
self.server.name, ignore_missing=False, details=True
8567+
)
8568+
self.compute_sdk_client.get_server.assert_not_called()
85618569

85628570
def test_show_diagnostics(self):
85638571
arglist = [
@@ -8575,6 +8583,13 @@ def test_show_diagnostics(self):
85758583

85768584
self.assertEqual(('test',), columns)
85778585
self.assertEqual(('test',), data)
8586+
self.compute_sdk_client.find_server.assert_called_once_with(
8587+
self.server.name, ignore_missing=False, details=True
8588+
)
8589+
self.compute_sdk_client.get_server_diagnostics.assert_called_once_with(
8590+
self.server
8591+
)
8592+
self.compute_sdk_client.get_server.assert_not_called()
85788593

85798594
def test_show_topology(self):
85808595
self.set_compute_api_version('2.78')
@@ -8597,6 +8612,13 @@ def test_show_topology(self):
85978612

85988613
self.assertCountEqual(self.columns, columns)
85998614
self.assertCountEqual(self.data, data)
8615+
self.compute_sdk_client.find_server.assert_called_once_with(
8616+
self.server.name, ignore_missing=False, details=True
8617+
)
8618+
self.server.fetch_topology.assert_called_once_with(
8619+
self.compute_sdk_client
8620+
)
8621+
self.compute_sdk_client.get_server.assert_not_called()
86008622

86018623
def test_show_topology_pre_v278(self):
86028624
self.set_compute_api_version('2.77')
@@ -8615,6 +8637,11 @@ def test_show_topology_pre_v278(self):
86158637
self.assertRaises(
86168638
exceptions.CommandError, self.cmd.take_action, parsed_args
86178639
)
8640+
self.compute_sdk_client.find_server.assert_called_once_with(
8641+
self.server.name, ignore_missing=False, details=True
8642+
)
8643+
self.server.fetch_topology.assert_not_called()
8644+
self.compute_sdk_client.get_server.assert_not_called()
86188645

86198646

86208647
@mock.patch('openstackclient.compute.v2.server.os.system')

0 commit comments

Comments
 (0)