1616"""Compute v2 Server action implementations"""
1717
1818import argparse
19+ import base64
1920import getpass
2021import json
2122import logging
@@ -3505,11 +3506,11 @@ def _show_progress(progress):
35053506 self .app .stdout .write ('\r Progress: %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