Skip to content

Commit f56f0e3

Browse files
committed
Switch server shelve, unshelve to SDK
This one is a little more complicated because we support waiting. Change-Id: I5bd65b44c23bfee1e0144dbd060563ecc3cfb942 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent 004b2ab commit f56f0e3

3 files changed

Lines changed: 245 additions & 278 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4261,7 +4261,7 @@ class ShelveServer(command.Command):
42614261
"""
42624262

42634263
def get_parser(self, prog_name):
4264-
parser = super(ShelveServer, self).get_parser(prog_name)
4264+
parser = super().get_parser(prog_name)
42654265
parser.add_argument(
42664266
'servers',
42674267
metavar='<server>',
@@ -4293,65 +4293,71 @@ def _show_progress(progress):
42934293
self.app.stdout.write('\rProgress: %s' % progress)
42944294
self.app.stdout.flush()
42954295

4296-
compute_client = self.app.client_manager.compute
4296+
compute_client = self.app.client_manager.sdk_connection.compute
42974297

42984298
for server in parsed_args.servers:
4299-
server_obj = utils.find_resource(
4300-
compute_client.servers,
4299+
server_obj = compute_client.find_server(
43014300
server,
4301+
ignore_missing=False,
43024302
)
43034303
if server_obj.status.lower() in ('shelved', 'shelved_offloaded'):
43044304
continue
43054305

4306-
server_obj.shelve()
4306+
compute_client.shelve_server(server_obj.id)
43074307

43084308
# if we don't have to wait, either because it was requested explicitly
43094309
# or is required implicitly, then our job is done
43104310
if not parsed_args.wait and not parsed_args.offload:
43114311
return
43124312

43134313
for server in parsed_args.servers:
4314+
# We use osc-lib's wait_for_status since that allows for a callback
43144315
# TODO(stephenfin): We should wait for these in parallel using e.g.
43154316
# https://review.opendev.org/c/openstack/osc-lib/+/762503/
43164317
if not utils.wait_for_status(
4317-
compute_client.servers.get, server_obj.id,
4318+
compute_client.get_server,
4319+
server_obj.id,
43184320
success_status=('shelved', 'shelved_offloaded'),
43194321
callback=_show_progress,
43204322
):
43214323
LOG.error(_('Error shelving server: %s'), server_obj.id)
43224324
self.app.stdout.write(
4323-
_('Error shelving server: %s\n') % server_obj.id)
4325+
_('Error shelving server: %s\n') % server_obj.id
4326+
)
43244327
raise SystemExit
43254328

43264329
if not parsed_args.offload:
43274330
return
43284331

43294332
for server in parsed_args.servers:
4330-
server_obj = utils.find_resource(
4331-
compute_client.servers,
4333+
server_obj = compute_client.find_server(
43324334
server,
4335+
ignore_missing=False,
43334336
)
43344337
if server_obj.status.lower() == 'shelved_offloaded':
43354338
continue
43364339

4337-
server_obj.shelve_offload()
4340+
compute_client.shelve_offload_server(server_obj.id)
43384341

43394342
if not parsed_args.wait:
43404343
return
43414344

43424345
for server in parsed_args.servers:
4346+
# We use osc-lib's wait_for_status since that allows for a callback
43434347
# TODO(stephenfin): We should wait for these in parallel using e.g.
43444348
# https://review.opendev.org/c/openstack/osc-lib/+/762503/
43454349
if not utils.wait_for_status(
4346-
compute_client.servers.get, server_obj.id,
4350+
compute_client.get_server,
4351+
server_obj.id,
43474352
success_status=('shelved_offloaded',),
43484353
callback=_show_progress,
43494354
):
43504355
LOG.error(
4351-
_('Error offloading shelved server %s'), server_obj.id)
4356+
_('Error offloading shelved server %s'), server_obj.id,
4357+
)
43524358
self.app.stdout.write(
4353-
_('Error offloading shelved server: %s\n') % (
4354-
server_obj.id))
4359+
_('Error offloading shelved server: %s\n') % server_obj.id
4360+
)
43554361
raise SystemExit
43564362

43574363

@@ -4825,7 +4831,7 @@ class UnshelveServer(command.Command):
48254831
_description = _("Unshelve server(s)")
48264832

48274833
def get_parser(self, prog_name):
4828-
parser = super(UnshelveServer, self).get_parser(prog_name)
4834+
parser = super().get_parser(prog_name)
48294835
parser.add_argument(
48304836
'server',
48314837
metavar='<server>',
@@ -4836,25 +4842,31 @@ def get_parser(self, prog_name):
48364842
group.add_argument(
48374843
'--availability-zone',
48384844
default=None,
4839-
help=_('Name of the availability zone in which to unshelve a '
4840-
'SHELVED_OFFLOADED server (supported by '
4841-
'--os-compute-api-version 2.77 or above)'),
4845+
help=_(
4846+
'Name of the availability zone in which to unshelve a '
4847+
'SHELVED_OFFLOADED server '
4848+
'(supported by --os-compute-api-version 2.77 or above)'
4849+
),
48424850
)
48434851
group.add_argument(
48444852
'--no-availability-zone',
48454853
action='store_true',
48464854
default=False,
4847-
help=_('Unpin the availability zone of a SHELVED_OFFLOADED '
4848-
'server. Server will be unshelved on a host without '
4849-
'availability zone constraint (supported by '
4850-
'--os-compute-api-version 2.91 or above)'),
4855+
help=_(
4856+
'Unpin the availability zone of a SHELVED_OFFLOADED '
4857+
'server. Server will be unshelved on a host without '
4858+
'availability zone constraint '
4859+
'(supported by --os-compute-api-version 2.91 or above)'
4860+
),
48514861
)
48524862
parser.add_argument(
48534863
'--host',
48544864
default=None,
4855-
help=_('Name of the destination host in which to unshelve a '
4856-
'SHELVED_OFFLOADED server (supported by '
4857-
'--os-compute-api-version 2.91 or above)'),
4865+
help=_(
4866+
'Name of the destination host in which to unshelve a '
4867+
'SHELVED_OFFLOADED server '
4868+
'(supported by --os-compute-api-version 2.91 or above)'
4869+
),
48584870
)
48594871
parser.add_argument(
48604872
'--wait',
@@ -4871,11 +4883,11 @@ def _show_progress(progress):
48714883
self.app.stdout.write('\rProgress: %s' % progress)
48724884
self.app.stdout.flush()
48734885

4874-
compute_client = self.app.client_manager.compute
4886+
compute_client = self.app.client_manager.sdk_connection.compute
48754887
kwargs = {}
48764888

48774889
if parsed_args.availability_zone:
4878-
if compute_client.api_version < api_versions.APIVersion('2.77'):
4890+
if not sdk_utils.supports_microversion(compute_client, '2.77'):
48794891
msg = _(
48804892
'--os-compute-api-version 2.77 or greater is required '
48814893
'to support the --availability-zone option'
@@ -4885,7 +4897,7 @@ def _show_progress(progress):
48854897
kwargs['availability_zone'] = parsed_args.availability_zone
48864898

48874899
if parsed_args.host:
4888-
if compute_client.api_version < api_versions.APIVersion('2.91'):
4900+
if not sdk_utils.supports_microversion(compute_client, '2.91'):
48894901
msg = _(
48904902
'--os-compute-api-version 2.91 or greater is required '
48914903
'to support the --host option'
@@ -4895,7 +4907,7 @@ def _show_progress(progress):
48954907
kwargs['host'] = parsed_args.host
48964908

48974909
if parsed_args.no_availability_zone:
4898-
if compute_client.api_version < api_versions.APIVersion('2.91'):
4910+
if not sdk_utils.supports_microversion(compute_client, '2.91'):
48994911
msg = _(
49004912
'--os-compute-api-version 2.91 or greater is required '
49014913
'to support the --no-availability-zone option'
@@ -4905,25 +4917,27 @@ def _show_progress(progress):
49054917
kwargs['availability_zone'] = None
49064918

49074919
for server in parsed_args.server:
4908-
server_obj = utils.find_resource(
4909-
compute_client.servers,
4920+
server_obj = compute_client.find_server(
49104921
server,
4922+
ignore_missing=False,
49114923
)
49124924

49134925
if server_obj.status.lower() not in (
49144926
'shelved', 'shelved_offloaded',
49154927
):
49164928
continue
49174929

4918-
server_obj.unshelve(**kwargs)
4930+
compute_client.unshelve_server(server_obj.id, **kwargs)
49194931

49204932
if parsed_args.wait:
49214933
if not utils.wait_for_status(
4922-
compute_client.servers.get, server_obj.id,
4934+
compute_client.get_server,
4935+
server_obj.id,
49234936
success_status=('active', 'shutoff'),
49244937
callback=_show_progress,
49254938
):
49264939
LOG.error(_('Error unshelving server %s'), server_obj.id)
49274940
self.app.stdout.write(
4928-
_('Error unshelving server: %s\n') % server_obj.id)
4941+
_('Error unshelving server: %s\n') % server_obj.id
4942+
)
49294943
raise SystemExit

0 commit comments

Comments
 (0)