diff options
| author | Zuul <zuul@review.opendev.org> | 2021-01-11 17:37:39 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2021-01-11 17:37:39 +0000 |
| commit | 8993d32188bac4bd9785576b0db5bad5575b733f (patch) | |
| tree | 5712f4bd053cafddd72659e548daca0e80a9fd71 /openstackclient/compute | |
| parent | 05cb650442a9116f2b323bcc9563aff22636e793 (diff) | |
| parent | 2b073c2034acdabb8d4097b7f2c0408e53fe2d63 (diff) | |
| download | python-openstackclient-8993d32188bac4bd9785576b0db5bad5575b733f.tar.gz | |
Merge "Add 'server unshelve --wait' option"
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 61 |
1 files changed, 45 insertions, 16 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 33545a74..59fc4b7d 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -4131,25 +4131,54 @@ class UnshelveServer(command.Command): 'SHELVED_OFFLOADED server (supported by ' '--os-compute-api-version 2.77 or above)'), ) + parser.add_argument( + '--wait', + action='store_true', + default=False, + help=_('Wait for unshelve operation to complete'), + ) return parser def take_action(self, parsed_args): + + def _show_progress(progress): + if progress: + self.app.stdout.write('\rProgress: %s' % progress) + self.app.stdout.flush() + compute_client = self.app.client_manager.compute - support_az = compute_client.api_version >= api_versions.APIVersion( - '2.77') - if not support_az and parsed_args.availability_zone: - msg = _("--os-compute-api-version 2.77 or greater is required " - "to support the '--availability-zone' option.") - raise exceptions.CommandError(msg) + kwargs = {} + + if parsed_args.availability_zone: + if compute_client.api_version < api_versions.APIVersion('2.77'): + msg = _( + '--os-compute-api-version 2.77 or greater is required ' + 'to support the --availability-zone option' + ) + raise exceptions.CommandError(msg) + + kwargs['availability_zone'] = parsed_args.availability_zone for server in parsed_args.server: - if support_az: - utils.find_resource( - compute_client.servers, - server - ).unshelve(availability_zone=parsed_args.availability_zone) - else: - utils.find_resource( - compute_client.servers, - server, - ).unshelve() + server_obj = utils.find_resource( + compute_client.servers, + server, + ) + + if server_obj.status.lower() not in ( + 'shelved', 'shelved_offloaded', + ): + continue + + server_obj.unshelve(**kwargs) + + if parsed_args.wait: + if not utils.wait_for_status( + compute_client.servers.get, server_obj.id, + success_status=('active', 'shutoff'), + callback=_show_progress, + ): + LOG.error(_('Error unshelving server %s'), server_obj.id) + self.app.stdout.write( + _('Error unshelving server: %s\n') % server_obj.id) + raise SystemExit |
