diff options
| author | Zuul <zuul@review.opendev.org> | 2020-10-12 16:01:52 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2020-10-12 16:01:52 +0000 |
| commit | ad2ac13c97ab51c00a69f67b8cd5027328408bc0 (patch) | |
| tree | 1e0e76201f3c5454e3f92e8804d6e8f8c2c82829 /openstackclient/compute | |
| parent | a48c05b90a376ce33e2f0a2d321b8c851a6ef0b0 (diff) | |
| parent | b77c28d2954a2c5861a3a6a1df29d8de448f7c08 (diff) | |
| download | python-openstackclient-ad2ac13c97ab51c00a69f67b8cd5027328408bc0.tar.gz | |
Merge "Add server migration list CLI"
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index e5a7a328..eecf4211 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -1814,6 +1814,167 @@ revert to release the new server and restart the old one.""") raise SystemExit +class ListMigration(command.Command): + _description = _("""List server migrations.""") + + def get_parser(self, prog_name): + parser = super(ListMigration, self).get_parser(prog_name) + parser.add_argument( + "--server", + metavar="<server>", + dest='server', + default=None, + help=_('Server to show migration details (name or ID).') + ) + parser.add_argument( + "--host", + metavar="<host>", + default=None, + help=_('Fetch migrations for the given host.') + ) + parser.add_argument( + "--status", + metavar="<status>", + default=None, + help=_('Fetch migrations for the given status.') + ) + parser.add_argument( + "--marker", + metavar="<marker>", + dest='marker', + default=None, + help=_("The last migration of the previous page; displays list " + "of migrations after 'marker'. Note that the marker is " + "the migration UUID. (Supported with " + "``--os-compute-api-version`` 2.59 or greater.)") + ) + parser.add_argument( + "--limit", + metavar="<limit>", + dest='limit', + type=int, + default=None, + help=_("Maximum number of migrations to display. Note that there " + "is a configurable max limit on the server, and the limit " + "that is used will be the minimum of what is requested " + "here and what is configured in the server. " + "(Supported with ``--os-compute-api-version`` 2.59 " + "or greater.)") + ) + parser.add_argument( + '--changes-since', + dest='changes_since', + metavar='<changes-since>', + default=None, + help=_("List only migrations changed later or equal to a certain " + "point of time. The provided time should be an ISO 8061 " + "formatted time, e.g. ``2016-03-04T06:27:59Z``. " + "(Supported with ``--os-compute-api-version`` 2.59 " + "or greater.)") + ) + parser.add_argument( + '--changes-before', + dest='changes_before', + metavar='<changes-before>', + default=None, + help=_("List only migrations changed earlier or equal to a " + "certain point of time. The provided time should be an ISO " + "8061 formatted time, e.g. ``2016-03-04T06:27:59Z``. " + "(Supported with ``--os-compute-api-version`` 2.66 or " + "greater.)") + ) + parser.add_argument( + '--project', + metavar='<project>', + dest='project_id', + default=None, + help=_("Filter the migrations by the given project ID. " + "(Supported with ``--os-compute-api-version`` 2.80 " + "or greater.)"), + ) + parser.add_argument( + '--user', + metavar='<user>', + dest='user_id', + default=None, + help=_("Filter the migrations by the given user ID. " + "(Supported with ``--os-compute-api-version`` 2.80 " + "or greater.)"), + ) + return parser + + def print_migrations(self, parsed_args, compute_client, migrations): + columns = ['Source Node', 'Dest Node', 'Source Compute', + 'Dest Compute', 'Dest Host', 'Status', + 'Server UUID', 'Old Flavor', 'New Flavor', + 'Created At', 'Updated At'] + + # Insert migrations UUID after ID + if compute_client.api_version >= api_versions.APIVersion("2.59"): + columns.insert(0, "UUID") + + # TODO(brinzhang): It also suppports filter migrations by type + # since 2.1. https://review.opendev.org/#/c/675117 supported + # filtering the migrations by 'migration_type' and 'source_compute' + # in novaclient, that will be added in OSC by follow-up. + if compute_client.api_version >= api_versions.APIVersion("2.23"): + columns.insert(0, "Id") + columns.insert(len(columns) - 2, "Type") + + if compute_client.api_version >= api_versions.APIVersion("2.80"): + if parsed_args.project_id: + columns.insert(len(columns) - 2, "Project") + if parsed_args.user_id: + columns.insert(len(columns) - 2, "User") + + columns_header = columns + return (columns_header, (utils.get_item_properties( + mig, columns) for mig in migrations)) + + def take_action(self, parsed_args): + compute_client = self.app.client_manager.compute + + search_opts = { + "host": parsed_args.host, + "server": parsed_args.server, + "status": parsed_args.status, + } + + if (parsed_args.marker or parsed_args.limit or + parsed_args.changes_since): + if compute_client.api_version < api_versions.APIVersion("2.59"): + msg = _("marker, limit and/or changes_since is not supported " + "for --os-compute-api-version less than 2.59") + raise exceptions.CommandError(msg) + if parsed_args.marker: + search_opts['marker'] = parsed_args.marker + if parsed_args.limit: + search_opts['limit'] = parsed_args.limit + if parsed_args.changes_since: + search_opts['changes_since'] = parsed_args.changes_since + + if parsed_args.changes_before: + if compute_client.api_version < api_versions.APIVersion("2.66"): + msg = _("changes_before is not supported for " + "--os-compute-api-version less than 2.66") + raise exceptions.CommandError(msg) + search_opts['changes_before'] = parsed_args.changes_before + + if parsed_args.project_id or parsed_args.user_id: + if compute_client.api_version < api_versions.APIVersion("2.80"): + msg = _("Project and/or user is not supported for " + "--os-compute-api-version less than 2.80") + raise exceptions.CommandError(msg) + if parsed_args.project_id: + search_opts['project_id'] = parsed_args.project_id + if parsed_args.user_id: + search_opts['user_id'] = parsed_args.user_id + + migrations = compute_client.migrations.list(**search_opts) + + return self.print_migrations(parsed_args, compute_client, migrations) + + class PauseServer(command.Command): _description = _("Pause server(s)") |
