diff options
Diffstat (limited to 'openstackclient/compute/v2/server_event.py')
| -rw-r--r-- | openstackclient/compute/v2/server_event.py | 103 |
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}, + ), + ) |
