summaryrefslogtreecommitdiff
path: root/openstackclient/compute
diff options
context:
space:
mode:
authormelanie witt <melwittt@gmail.com>2022-02-09 19:48:42 +0000
committermelanie witt <melwittt@gmail.com>2022-02-09 23:26:25 +0000
commit72a2477ec07851f13dbc05e6777f7f60573d75dd (patch)
treeb9045c454daa5a686e4a1387653e9ff8426a4ec0 /openstackclient/compute
parent27843fc232622a756d0c6a0e7d4ddecbddb2ae11 (diff)
downloadpython-openstackclient-72a2477ec07851f13dbc05e6777f7f60573d75dd.tar.gz
Fix 'server event list|show' for deleted servers
As of compute microversion >= 2.21, support for list and show of server events for deleted servers was added. This however wasn't working using the openstackclient because the compute GET /servers/{server_id} will not return a deleted server, so osc_lib.utils.find_resource() fails to find the server and the command bails early. This adds a check for a uuid-like <server> arg and uses it directly if the <server> cannot be found via find_resource(). A note is also added to the command help to indicate that list and show for deleted servers will only work if a server ID is passed (name will not work). Story: 2009841 Task: 44443 Change-Id: Icd33b3b9a3a1855d7893dd111bbb2aca059f45fd
Diffstat (limited to 'openstackclient/compute')
-rw-r--r--openstackclient/compute/v2/server_event.py38
1 files changed, 29 insertions, 9 deletions
diff --git a/openstackclient/compute/v2/server_event.py b/openstackclient/compute/v2/server_event.py
index 1b971e51..7ab0cd2f 100644
--- a/openstackclient/compute/v2/server_event.py
+++ b/openstackclient/compute/v2/server_event.py
@@ -19,6 +19,7 @@ import logging
import iso8601
from novaclient import api_versions
+import openstack.cloud._utils
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
@@ -33,7 +34,7 @@ class ListServerEvent(command.Lister):
"""List recent events of a server.
Specify ``--os-compute-api-version 2.21`` or higher to show events for a
- deleted server.
+ deleted server, specified by ID only.
"""
def get_parser(self, prog_name):
@@ -143,9 +144,18 @@ class ListServerEvent(command.Lister):
kwargs['changes_before'] = parsed_args.changes_before
- server_id = utils.find_resource(
- compute_client.servers, parsed_args.server,
- ).id
+ try:
+ server_id = utils.find_resource(
+ compute_client.servers, parsed_args.server,
+ ).id
+ except exceptions.CommandError:
+ # If we fail to find the resource, it is possible the server is
+ # deleted. Try once more using the <server> arg directly if it is a
+ # UUID.
+ if openstack.cloud._utils._is_uuid_like(parsed_args.server):
+ server_id = parsed_args.server
+ else:
+ raise
data = compute_client.instance_action.list(server_id, **kwargs)
@@ -184,8 +194,9 @@ class ShowServerEvent(command.ShowOne):
"""Show server event details.
Specify ``--os-compute-api-version 2.21`` or higher to show event details
- for a deleted server. Specify ``--os-compute-api-version 2.51`` or higher
- to show event details for non-admin users.
+ for a deleted server, specified by ID only. Specify
+ ``--os-compute-api-version 2.51`` or higher to show event details for
+ non-admin users.
"""
def get_parser(self, prog_name):
@@ -205,9 +216,18 @@ class ShowServerEvent(command.ShowOne):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- server_id = utils.find_resource(
- compute_client.servers, parsed_args.server,
- ).id
+ try:
+ server_id = utils.find_resource(
+ compute_client.servers, parsed_args.server,
+ ).id
+ except exceptions.CommandError:
+ # If we fail to find the resource, it is possible the server is
+ # deleted. Try once more using the <server> arg directly if it is a
+ # UUID.
+ if openstack.cloud._utils._is_uuid_like(parsed_args.server):
+ server_id = parsed_args.server
+ else:
+ raise
action_detail = compute_client.instance_action.get(
server_id, parsed_args.request_id