Skip to content

Commit f6cad0c

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "compute: Add missing options for 'server rebuild'"
2 parents b663e8a + f9fd364 commit f6cad0c

3 files changed

Lines changed: 446 additions & 74 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 143 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2453,10 +2453,15 @@ def get_parser(self, prog_name):
24532453
'Defaults to the currently used one.'
24542454
),
24552455
)
2456+
parser.add_argument(
2457+
'--name',
2458+
metavar='<name>',
2459+
help=_('Set the new name of the rebuilt server'),
2460+
)
24562461
parser.add_argument(
24572462
'--password',
24582463
metavar='<password>',
2459-
help=_('Set a password on the rebuilt server'),
2464+
help=_('Set the password on the rebuilt server'),
24602465
)
24612466
parser.add_argument(
24622467
'--property',
@@ -2475,6 +2480,24 @@ def get_parser(self, prog_name):
24752480
'(supported by --os-compute-api-version 2.19 or above)'
24762481
),
24772482
)
2483+
preserve_ephemeral_group = parser.add_mutually_exclusive_group()
2484+
preserve_ephemeral_group.add_argument(
2485+
'--preserve-ephemeral',
2486+
action='store_true',
2487+
default=None,
2488+
help=_(
2489+
'Preserve the default ephemeral storage partition on rebuild.'
2490+
),
2491+
)
2492+
preserve_ephemeral_group.add_argument(
2493+
'--no-preserve-ephemeral',
2494+
action='store_false',
2495+
dest='preserve_ephemeral',
2496+
help=_(
2497+
'Do not preserve the default ephemeral storage partition on '
2498+
'rebuild.'
2499+
),
2500+
)
24782501
key_group = parser.add_mutually_exclusive_group()
24792502
key_group.add_argument(
24802503
'--key-name',
@@ -2486,15 +2509,69 @@ def get_parser(self, prog_name):
24862509
),
24872510
)
24882511
key_group.add_argument(
2489-
'--key-unset',
2512+
'--no-key-name',
24902513
action='store_true',
2491-
default=False,
2514+
dest='no_key_name',
24922515
help=_(
24932516
'Unset the key name of key pair on the rebuilt server. '
24942517
'Cannot be specified with the --key-name option. '
24952518
'(supported by --os-compute-api-version 2.54 or above)'
24962519
),
24972520
)
2521+
# TODO(stephenfin): Remove this in a future major version bump
2522+
key_group.add_argument(
2523+
'--key-unset',
2524+
action='store_true',
2525+
dest='no_key_name',
2526+
help=argparse.SUPPRESS,
2527+
)
2528+
user_data_group = parser.add_mutually_exclusive_group()
2529+
user_data_group.add_argument(
2530+
'--user-data',
2531+
metavar='<user-data>',
2532+
help=_(
2533+
'Add a new user data file to the rebuilt server. '
2534+
'Cannot be specified with the --no-user-data option. '
2535+
'(supported by --os-compute-api-version 2.57 or above)'
2536+
),
2537+
)
2538+
user_data_group.add_argument(
2539+
'--no-user-data',
2540+
action='store_true',
2541+
default=False,
2542+
help=_(
2543+
'Remove existing user data when rebuilding server. '
2544+
'Cannot be specified with the --user-data option. '
2545+
'(supported by --os-compute-api-version 2.57 or above)'
2546+
),
2547+
)
2548+
trusted_certs_group = parser.add_mutually_exclusive_group()
2549+
trusted_certs_group.add_argument(
2550+
'--trusted-image-cert',
2551+
metavar='<trusted-cert-id>',
2552+
action='append',
2553+
dest='trusted_image_certs',
2554+
help=_(
2555+
'Trusted image certificate IDs used to validate certificates '
2556+
'during the image signature verification process. '
2557+
'Defaults to env[OS_TRUSTED_IMAGE_CERTIFICATE_IDS]. '
2558+
'May be specified multiple times to pass multiple trusted '
2559+
'image certificate IDs. '
2560+
'Cannot be specified with the --no-trusted-certs option. '
2561+
'(supported by --os-compute-api-version 2.63 or above)'
2562+
),
2563+
)
2564+
trusted_certs_group.add_argument(
2565+
'--no-trusted-image-certs',
2566+
action='store_true',
2567+
default=False,
2568+
help=_(
2569+
'Remove any existing trusted image certificates from the '
2570+
'server. '
2571+
'Cannot be specified with the --trusted-certs option. '
2572+
'(supported by --os-compute-api-version 2.63 or above)'
2573+
),
2574+
)
24982575
parser.add_argument(
24992576
'--wait',
25002577
action='store_true',
@@ -2525,11 +2602,17 @@ def _show_progress(progress):
25252602

25262603
kwargs = {}
25272604

2605+
if parsed_args.name is not None:
2606+
kwargs['name'] = parsed_args.name
2607+
2608+
if parsed_args.preserve_ephemeral is not None:
2609+
kwargs['preserve_ephemeral'] = parsed_args.preserve_ephemeral
2610+
25282611
if parsed_args.property:
25292612
kwargs['meta'] = parsed_args.property
25302613

25312614
if parsed_args.description:
2532-
if server.api_version < api_versions.APIVersion("2.19"):
2615+
if compute_client.api_version < api_versions.APIVersion('2.19'):
25332616
msg = _(
25342617
'--os-compute-api-version 2.19 or greater is required to '
25352618
'support the --description option'
@@ -2547,7 +2630,7 @@ def _show_progress(progress):
25472630
raise exceptions.CommandError(msg)
25482631

25492632
kwargs['key_name'] = parsed_args.key_name
2550-
elif parsed_args.key_unset:
2633+
elif parsed_args.no_key_name:
25512634
if compute_client.api_version < api_versions.APIVersion('2.54'):
25522635
msg = _(
25532636
'--os-compute-api-version 2.54 or greater is required to '
@@ -2557,7 +2640,61 @@ def _show_progress(progress):
25572640

25582641
kwargs['key_name'] = None
25592642

2560-
server = server.rebuild(image, parsed_args.password, **kwargs)
2643+
userdata = None
2644+
if parsed_args.user_data:
2645+
if compute_client.api_version < api_versions.APIVersion('2.54'):
2646+
msg = _(
2647+
'--os-compute-api-version 2.54 or greater is required to '
2648+
'support the --user-data option'
2649+
)
2650+
raise exceptions.CommandError(msg)
2651+
2652+
try:
2653+
userdata = io.open(parsed_args.user_data)
2654+
except IOError as e:
2655+
msg = _("Can't open '%(data)s': %(exception)s")
2656+
raise exceptions.CommandError(
2657+
msg % {'data': parsed_args.user_data, 'exception': e}
2658+
)
2659+
2660+
kwargs['userdata'] = userdata
2661+
elif parsed_args.no_user_data:
2662+
if compute_client.api_version < api_versions.APIVersion('2.54'):
2663+
msg = _(
2664+
'--os-compute-api-version 2.54 or greater is required to '
2665+
'support the --no-user-data option'
2666+
)
2667+
raise exceptions.CommandError(msg)
2668+
2669+
kwargs['userdata'] = None
2670+
2671+
# TODO(stephenfin): Handle OS_TRUSTED_IMAGE_CERTIFICATE_IDS
2672+
if parsed_args.trusted_image_certs:
2673+
if compute_client.api_version < api_versions.APIVersion('2.63'):
2674+
msg = _(
2675+
'--os-compute-api-version 2.63 or greater is required to '
2676+
'support the --trusted-certs option'
2677+
)
2678+
raise exceptions.CommandError(msg)
2679+
2680+
certs = parsed_args.trusted_image_certs
2681+
kwargs['trusted_image_certificates'] = certs
2682+
elif parsed_args.no_trusted_image_certs:
2683+
if compute_client.api_version < api_versions.APIVersion('2.63'):
2684+
msg = _(
2685+
'--os-compute-api-version 2.63 or greater is required to '
2686+
'support the --no-trusted-certs option'
2687+
)
2688+
raise exceptions.CommandError(msg)
2689+
2690+
kwargs['trusted_image_certificates'] = None
2691+
2692+
try:
2693+
server = server.rebuild(image, parsed_args.password, **kwargs)
2694+
finally:
2695+
if userdata and hasattr(userdata, 'close'):
2696+
userdata.close()
2697+
25612698
if parsed_args.wait:
25622699
if utils.wait_for_status(
25632700
compute_client.servers.get,

0 commit comments

Comments
 (0)