summaryrefslogtreecommitdiff
path: root/openstackclient/compute/v2/server_event.py
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient/compute/v2/server_event.py')
-rw-r--r--openstackclient/compute/v2/server_event.py103
1 files changed, 83 insertions, 20 deletions
diff --git a/openstackclient/compute/v2/server_event.py b/openstackclient/compute/v2/server_event.py
index ebf0d526..395c2cac 100644
--- a/openstackclient/compute/v2/server_event.py
+++ b/openstackclient/compute/v2/server_event.py
@@ -17,8 +17,10 @@
import logging
+from cliff import columns
import iso8601
-from novaclient import api_versions
+from openstack import exceptions as sdk_exceptions
+from openstack import utils as sdk_utils
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
@@ -30,6 +32,51 @@ from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
+class ServerActionEventColumn(columns.FormattableColumn):
+ """Custom formatter for server action events.
+
+ Format the :class:`~openstack.compute.v2.server_action.ServerActionEvent`
+ objects as we'd like.
+ """
+
+ def _format_event(self, event):
+ column_map = {}
+ hidden_columns = ['id', 'name', 'location']
+ _, columns = utils.get_osc_show_columns_for_sdk_resource(
+ event,
+ column_map,
+ hidden_columns,
+ )
+ data = utils.get_item_properties(
+ event,
+ columns,
+ )
+ return dict(zip(columns, data))
+
+ def human_readable(self):
+ events = [self._format_event(event) for event in self._value]
+ return utils.format_list_of_dicts(events)
+
+ def machine_readable(self):
+ events = [self._format_event(event) for event in self._value]
+ return events
+
+
+def _get_server_event_columns(item, client):
+ column_map = {}
+ hidden_columns = ['name', 'server_id', 'links', 'location']
+
+ if not sdk_utils.supports_microversion(client, '2.58'):
+ # updated_at was introduced in 2.58
+ hidden_columns.append('updated_at')
+
+ return utils.get_osc_show_columns_for_sdk_resource(
+ item,
+ column_map,
+ hidden_columns,
+ )
+
+
class ListServerEvent(command.Lister):
"""List recent events of a server.
@@ -38,7 +85,7 @@ class ListServerEvent(command.Lister):
"""
def get_parser(self, prog_name):
- parser = super(ListServerEvent, self).get_parser(prog_name)
+ parser = super().get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
@@ -90,30 +137,33 @@ class ListServerEvent(command.Lister):
return parser
def take_action(self, parsed_args):
- compute_client = self.app.client_manager.compute
+ compute_client = self.app.client_manager.sdk_connection.compute
kwargs = {}
if parsed_args.marker:
- if compute_client.api_version < api_versions.APIVersion('2.58'):
+ if not sdk_utils.supports_microversion(compute_client, '2.58'):
msg = _(
'--os-compute-api-version 2.58 or greater is required to '
'support the --marker option'
)
raise exceptions.CommandError(msg)
+
kwargs['marker'] = parsed_args.marker
if parsed_args.limit:
- if compute_client.api_version < api_versions.APIVersion('2.58'):
+ if not sdk_utils.supports_microversion(compute_client, '2.58'):
msg = _(
'--os-compute-api-version 2.58 or greater is required to '
'support the --limit option'
)
raise exceptions.CommandError(msg)
+
kwargs['limit'] = parsed_args.limit
+ kwargs['paginated'] = False
if parsed_args.changes_since:
- if compute_client.api_version < api_versions.APIVersion('2.58'):
+ if not sdk_utils.supports_microversion(compute_client, '2.58'):
msg = _(
'--os-compute-api-version 2.58 or greater is required to '
'support the --changes-since option'
@@ -129,7 +179,7 @@ class ListServerEvent(command.Lister):
kwargs['changes_since'] = parsed_args.changes_since
if parsed_args.changes_before:
- if compute_client.api_version < api_versions.APIVersion('2.66'):
+ if not sdk_utils.supports_microversion(compute_client, '2.66'):
msg = _(
'--os-compute-api-version 2.66 or greater is required to '
'support the --changes-before option'
@@ -145,10 +195,11 @@ class ListServerEvent(command.Lister):
kwargs['changes_before'] = parsed_args.changes_before
try:
- server_id = utils.find_resource(
- compute_client.servers, parsed_args.server,
+ server_id = compute_client.find_server(
+ parsed_args.server,
+ ignore_missing=False
).id
- except exceptions.CommandError:
+ except sdk_exceptions.ResourceNotFound:
# 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.
@@ -157,11 +208,11 @@ class ListServerEvent(command.Lister):
else:
raise
- data = compute_client.instance_action.list(server_id, **kwargs)
+ data = compute_client.server_actions(server_id, **kwargs)
columns = (
'request_id',
- 'instance_uuid',
+ 'server_id',
'action',
'start_time',
)
@@ -200,7 +251,7 @@ class ShowServerEvent(command.ShowOne):
"""
def get_parser(self, prog_name):
- parser = super(ShowServerEvent, self).get_parser(prog_name)
+ parser = super().get_parser(prog_name)
parser.add_argument(
'server',
metavar='<server>',
@@ -214,13 +265,14 @@ class ShowServerEvent(command.ShowOne):
return parser
def take_action(self, parsed_args):
- compute_client = self.app.client_manager.compute
+ compute_client = self.app.client_manager.sdk_connection.compute
try:
- server_id = utils.find_resource(
- compute_client.servers, parsed_args.server,
+ server_id = compute_client.find_server(
+ parsed_args.server,
+ ignore_missing=False,
).id
- except exceptions.CommandError:
+ except sdk_exceptions.ResourceNotFound:
# 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.
@@ -229,8 +281,19 @@ class ShowServerEvent(command.ShowOne):
else:
raise
- action_detail = compute_client.instance_action.get(
- server_id, parsed_args.request_id
+ server_action = compute_client.get_server_action(
+ parsed_args.request_id, server_id,
+ )
+
+ column_headers, columns = _get_server_event_columns(
+ server_action, compute_client,
)
- return zip(*sorted(action_detail.to_dict().items()))
+ return (
+ column_headers,
+ utils.get_item_properties(
+ server_action,
+ columns,
+ formatters={'events': ServerActionEventColumn},
+ ),
+ )