summaryrefslogtreecommitdiff
path: root/openstackclient/compute
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-10-12 16:01:52 +0000
committerGerrit Code Review <review@openstack.org>2020-10-12 16:01:52 +0000
commitad2ac13c97ab51c00a69f67b8cd5027328408bc0 (patch)
tree1e0e76201f3c5454e3f92e8804d6e8f8c2c82829 /openstackclient/compute
parenta48c05b90a376ce33e2f0a2d321b8c851a6ef0b0 (diff)
parentb77c28d2954a2c5861a3a6a1df29d8de448f7c08 (diff)
downloadpython-openstackclient-ad2ac13c97ab51c00a69f67b8cd5027328408bc0.tar.gz
Merge "Add server migration list CLI"
Diffstat (limited to 'openstackclient/compute')
-rw-r--r--openstackclient/compute/v2/server.py161
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)")