Skip to content

Commit c18eab5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "compute: Migrate 'server rebuild' to SDK"
2 parents 855686a + 8d904a9 commit c18eab5

2 files changed

Lines changed: 327 additions & 205 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"""Compute v2 Server action implementations"""
1717

1818
import argparse
19+
import base64
1920
import getpass
2021
import json
2122
import logging
@@ -3505,11 +3506,11 @@ def _show_progress(progress):
35053506
self.app.stdout.write('\rProgress: %s' % progress)
35063507
self.app.stdout.flush()
35073508

3508-
compute_client = self.app.client_manager.compute
3509+
compute_client = self.app.client_manager.sdk_connection.compute
35093510
image_client = self.app.client_manager.image
35103511

3511-
server = utils.find_resource(
3512-
compute_client.servers, parsed_args.server
3512+
server = compute_client.find_server(
3513+
parsed_args.server, ignore_missing=False
35133514
)
35143515

35153516
# If parsed_args.image is not set and if the instance is image backed,
@@ -3521,7 +3522,7 @@ def _show_progress(progress):
35213522
parsed_args.image, ignore_missing=False
35223523
)
35233524
else:
3524-
if not server.image:
3525+
if not server.image or not server.image.id:
35253526
msg = _(
35263527
'The --image option is required when rebuilding a '
35273528
'volume-backed server'
@@ -3538,10 +3539,10 @@ def _show_progress(progress):
35383539
kwargs['preserve_ephemeral'] = parsed_args.preserve_ephemeral
35393540

35403541
if parsed_args.properties:
3541-
kwargs['meta'] = parsed_args.properties
3542+
kwargs['metadata'] = parsed_args.properties
35423543

35433544
if parsed_args.description:
3544-
if compute_client.api_version < api_versions.APIVersion('2.19'):
3545+
if not sdk_utils.supports_microversion(compute_client, '2.19'):
35453546
msg = _(
35463547
'--os-compute-api-version 2.19 or greater is required to '
35473548
'support the --description option'
@@ -3551,7 +3552,7 @@ def _show_progress(progress):
35513552
kwargs['description'] = parsed_args.description
35523553

35533554
if parsed_args.key_name:
3554-
if compute_client.api_version < api_versions.APIVersion('2.54'):
3555+
if not sdk_utils.supports_microversion(compute_client, '2.54'):
35553556
msg = _(
35563557
'--os-compute-api-version 2.54 or greater is required to '
35573558
'support the --key-name option'
@@ -3560,7 +3561,7 @@ def _show_progress(progress):
35603561

35613562
kwargs['key_name'] = parsed_args.key_name
35623563
elif parsed_args.no_key_name:
3563-
if compute_client.api_version < api_versions.APIVersion('2.54'):
3564+
if not sdk_utils.supports_microversion(compute_client, '2.54'):
35643565
msg = _(
35653566
'--os-compute-api-version 2.54 or greater is required to '
35663567
'support the --no-key-name option'
@@ -3569,37 +3570,38 @@ def _show_progress(progress):
35693570

35703571
kwargs['key_name'] = None
35713572

3572-
userdata = None
35733573
if parsed_args.user_data:
3574-
if compute_client.api_version < api_versions.APIVersion('2.54'):
3574+
if not sdk_utils.supports_microversion(compute_client, '2.54'):
35753575
msg = _(
35763576
'--os-compute-api-version 2.54 or greater is required to '
35773577
'support the --user-data option'
35783578
)
35793579
raise exceptions.CommandError(msg)
35803580

35813581
try:
3582-
userdata = open(parsed_args.user_data)
3582+
with open(parsed_args.user_data, 'rb') as fh:
3583+
# TODO(stephenfin): SDK should do this for us
3584+
user_data = base64.b64encode(fh.read()).decode('utf-8')
35833585
except OSError as e:
35843586
msg = _("Can't open '%(data)s': %(exception)s")
35853587
raise exceptions.CommandError(
35863588
msg % {'data': parsed_args.user_data, 'exception': e}
35873589
)
35883590

3589-
kwargs['userdata'] = userdata
3591+
kwargs['user_data'] = user_data
35903592
elif parsed_args.no_user_data:
3591-
if compute_client.api_version < api_versions.APIVersion('2.54'):
3593+
if not sdk_utils.supports_microversion(compute_client, '2.54'):
35923594
msg = _(
35933595
'--os-compute-api-version 2.54 or greater is required to '
35943596
'support the --no-user-data option'
35953597
)
35963598
raise exceptions.CommandError(msg)
35973599

3598-
kwargs['userdata'] = None
3600+
kwargs['user_data'] = None
35993601

36003602
# TODO(stephenfin): Handle OS_TRUSTED_IMAGE_CERTIFICATE_IDS
36013603
if parsed_args.trusted_image_certs:
3602-
if compute_client.api_version < api_versions.APIVersion('2.63'):
3604+
if not sdk_utils.supports_microversion(compute_client, '2.63'):
36033605
msg = _(
36043606
'--os-compute-api-version 2.63 or greater is required to '
36053607
'support the --trusted-certs option'
@@ -3609,7 +3611,7 @@ def _show_progress(progress):
36093611
certs = parsed_args.trusted_image_certs
36103612
kwargs['trusted_image_certificates'] = certs
36113613
elif parsed_args.no_trusted_image_certs:
3612-
if compute_client.api_version < api_versions.APIVersion('2.63'):
3614+
if not sdk_utils.supports_microversion(compute_client, '2.63'):
36133615
msg = _(
36143616
'--os-compute-api-version 2.63 or greater is required to '
36153617
'support the --no-trusted-certs option'
@@ -3619,7 +3621,7 @@ def _show_progress(progress):
36193621
kwargs['trusted_image_certificates'] = None
36203622

36213623
if parsed_args.hostname:
3622-
if compute_client.api_version < api_versions.APIVersion('2.90'):
3624+
if not sdk_utils.supports_microversion(compute_client, '2.90'):
36233625
msg = _(
36243626
'--os-compute-api-version 2.90 or greater is required to '
36253627
'support the --hostname option'
@@ -3628,9 +3630,8 @@ def _show_progress(progress):
36283630

36293631
kwargs['hostname'] = parsed_args.hostname
36303632

3631-
v2_93 = api_versions.APIVersion('2.93')
36323633
if parsed_args.reimage_boot_volume:
3633-
if compute_client.api_version < v2_93:
3634+
if not sdk_utils.supports_microversion(compute_client, '2.93'):
36343635
msg = _(
36353636
'--os-compute-api-version 2.93 or greater is required to '
36363637
'support the --reimage-boot-volume option'
@@ -3639,8 +3640,8 @@ def _show_progress(progress):
36393640
else:
36403641
# force user to explicitly request reimaging of volume-backed
36413642
# server
3642-
if not server.image:
3643-
if compute_client.api_version >= v2_93:
3643+
if not server.image or not server.image.id:
3644+
if sdk_utils.supports_microversion(compute_client, '2.93'):
36443645
msg = (
36453646
'--reimage-boot-volume is required to rebuild a '
36463647
'volume-backed server'
@@ -3672,15 +3673,13 @@ def _show_progress(progress):
36723673
msg = _("The server status is not ACTIVE, SHUTOFF or ERROR.")
36733674
raise exceptions.CommandError(msg)
36743675

3675-
try:
3676-
server = server.rebuild(image, parsed_args.password, **kwargs)
3677-
finally:
3678-
if userdata and hasattr(userdata, 'close'):
3679-
userdata.close()
3676+
server = compute_client.rebuild_server(
3677+
server, image, admin_password=parsed_args.password, **kwargs
3678+
)
36803679

36813680
if parsed_args.wait:
36823681
if utils.wait_for_status(
3683-
compute_client.servers.get,
3682+
compute_client.get_server,
36843683
server.id,
36853684
callback=_show_progress,
36863685
success_status=success_status,
@@ -3690,8 +3689,6 @@ def _show_progress(progress):
36903689
msg = _('Error rebuilding server: %s') % server.id
36913690
raise exceptions.CommandError(msg)
36923691

3693-
# TODO(stephenfin): Remove when the whole command is using SDK
3694-
compute_client = self.app.client_manager.sdk_connection.compute
36953692
data = _prep_server_detail(
36963693
compute_client, image_client, server, refresh=False
36973694
)

0 commit comments

Comments
 (0)