summaryrefslogtreecommitdiff
path: root/openstackclient/compute/v2
diff options
context:
space:
mode:
authorStephen Finucane <sfinucan@redhat.com>2020-11-18 14:29:24 +0000
committerStephen Finucane <sfinucan@redhat.com>2020-12-09 18:38:26 +0000
commitf9fd3642f8e8c59cd5a819e260d0575f884ae174 (patch)
treee30cebf50236c60104ad8e9fd70d0a396dbb48db /openstackclient/compute/v2
parent0edd055f3f2a86a60226c342a617507ab94c5eaa (diff)
downloadpython-openstackclient-f9fd3642f8e8c59cd5a819e260d0575f884ae174.tar.gz
compute: Add missing options for 'server rebuild'
This accepts a large number of options that we weren't exposing. Add the following options: '--name', '--preserve-ephemeral', '--user-data', '--no-user-data', '--trusted-image-cert' and '--no-trusted-image-certs'. In addition, rename the '--key-unset' parameter to '--no-key-name', to mimic e.g. '--no-property' on other commands. Change-Id: I61c46e18bef1f086b62a015ebdc56be91071b826 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
Diffstat (limited to 'openstackclient/compute/v2')
-rw-r--r--openstackclient/compute/v2/server.py149
1 files changed, 143 insertions, 6 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 4c177f7c..c9fbc422 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -2446,9 +2446,14 @@ class RebuildServer(command.ShowOne):
),
)
parser.add_argument(
+ '--name',
+ metavar='<name>',
+ help=_('Set the new name of the rebuilt server'),
+ )
+ parser.add_argument(
'--password',
metavar='<password>',
- help=_('Set a password on the rebuilt server'),
+ help=_('Set the password on the rebuilt server'),
)
parser.add_argument(
'--property',
@@ -2467,6 +2472,24 @@ class RebuildServer(command.ShowOne):
'(supported by --os-compute-api-version 2.19 or above)'
),
)
+ preserve_ephemeral_group = parser.add_mutually_exclusive_group()
+ preserve_ephemeral_group.add_argument(
+ '--preserve-ephemeral',
+ action='store_true',
+ default=None,
+ help=_(
+ 'Preserve the default ephemeral storage partition on rebuild.'
+ ),
+ )
+ preserve_ephemeral_group.add_argument(
+ '--no-preserve-ephemeral',
+ action='store_false',
+ dest='preserve_ephemeral',
+ help=_(
+ 'Do not preserve the default ephemeral storage partition on '
+ 'rebuild.'
+ ),
+ )
key_group = parser.add_mutually_exclusive_group()
key_group.add_argument(
'--key-name',
@@ -2478,15 +2501,69 @@ class RebuildServer(command.ShowOne):
),
)
key_group.add_argument(
- '--key-unset',
+ '--no-key-name',
action='store_true',
- default=False,
+ dest='no_key_name',
help=_(
'Unset the key name of key pair on the rebuilt server. '
'Cannot be specified with the --key-name option. '
'(supported by --os-compute-api-version 2.54 or above)'
),
)
+ # TODO(stephenfin): Remove this in a future major version bump
+ key_group.add_argument(
+ '--key-unset',
+ action='store_true',
+ dest='no_key_name',
+ help=argparse.SUPPRESS,
+ )
+ user_data_group = parser.add_mutually_exclusive_group()
+ user_data_group.add_argument(
+ '--user-data',
+ metavar='<user-data>',
+ help=_(
+ 'Add a new user data file to the rebuilt server. '
+ 'Cannot be specified with the --no-user-data option. '
+ '(supported by --os-compute-api-version 2.57 or above)'
+ ),
+ )
+ user_data_group.add_argument(
+ '--no-user-data',
+ action='store_true',
+ default=False,
+ help=_(
+ 'Remove existing user data when rebuilding server. '
+ 'Cannot be specified with the --user-data option. '
+ '(supported by --os-compute-api-version 2.57 or above)'
+ ),
+ )
+ trusted_certs_group = parser.add_mutually_exclusive_group()
+ trusted_certs_group.add_argument(
+ '--trusted-image-cert',
+ metavar='<trusted-cert-id>',
+ action='append',
+ dest='trusted_image_certs',
+ help=_(
+ 'Trusted image certificate IDs used to validate certificates '
+ 'during the image signature verification process. '
+ 'Defaults to env[OS_TRUSTED_IMAGE_CERTIFICATE_IDS]. '
+ 'May be specified multiple times to pass multiple trusted '
+ 'image certificate IDs. '
+ 'Cannot be specified with the --no-trusted-certs option. '
+ '(supported by --os-compute-api-version 2.63 or above)'
+ ),
+ )
+ trusted_certs_group.add_argument(
+ '--no-trusted-image-certs',
+ action='store_true',
+ default=False,
+ help=_(
+ 'Remove any existing trusted image certificates from the '
+ 'server. '
+ 'Cannot be specified with the --trusted-certs option. '
+ '(supported by --os-compute-api-version 2.63 or above)'
+ ),
+ )
parser.add_argument(
'--wait',
action='store_true',
@@ -2517,11 +2594,17 @@ class RebuildServer(command.ShowOne):
kwargs = {}
+ if parsed_args.name is not None:
+ kwargs['name'] = parsed_args.name
+
+ if parsed_args.preserve_ephemeral is not None:
+ kwargs['preserve_ephemeral'] = parsed_args.preserve_ephemeral
+
if parsed_args.property:
kwargs['meta'] = parsed_args.property
if parsed_args.description:
- if server.api_version < api_versions.APIVersion("2.19"):
+ if compute_client.api_version < api_versions.APIVersion('2.19'):
msg = _(
'--os-compute-api-version 2.19 or greater is required to '
'support the --description option'
@@ -2539,7 +2622,7 @@ class RebuildServer(command.ShowOne):
raise exceptions.CommandError(msg)
kwargs['key_name'] = parsed_args.key_name
- elif parsed_args.key_unset:
+ elif parsed_args.no_key_name:
if compute_client.api_version < api_versions.APIVersion('2.54'):
msg = _(
'--os-compute-api-version 2.54 or greater is required to '
@@ -2549,7 +2632,61 @@ class RebuildServer(command.ShowOne):
kwargs['key_name'] = None
- server = server.rebuild(image, parsed_args.password, **kwargs)
+ userdata = None
+ if parsed_args.user_data:
+ if compute_client.api_version < api_versions.APIVersion('2.54'):
+ msg = _(
+ '--os-compute-api-version 2.54 or greater is required to '
+ 'support the --user-data option'
+ )
+ raise exceptions.CommandError(msg)
+
+ try:
+ userdata = io.open(parsed_args.user_data)
+ except IOError as e:
+ msg = _("Can't open '%(data)s': %(exception)s")
+ raise exceptions.CommandError(
+ msg % {'data': parsed_args.user_data, 'exception': e}
+ )
+
+ kwargs['userdata'] = userdata
+ elif parsed_args.no_user_data:
+ if compute_client.api_version < api_versions.APIVersion('2.54'):
+ msg = _(
+ '--os-compute-api-version 2.54 or greater is required to '
+ 'support the --no-user-data option'
+ )
+ raise exceptions.CommandError(msg)
+
+ kwargs['userdata'] = None
+
+ # TODO(stephenfin): Handle OS_TRUSTED_IMAGE_CERTIFICATE_IDS
+ if parsed_args.trusted_image_certs:
+ if compute_client.api_version < api_versions.APIVersion('2.63'):
+ msg = _(
+ '--os-compute-api-version 2.63 or greater is required to '
+ 'support the --trusted-certs option'
+ )
+ raise exceptions.CommandError(msg)
+
+ certs = parsed_args.trusted_image_certs
+ kwargs['trusted_image_certificates'] = certs
+ elif parsed_args.no_trusted_image_certs:
+ if compute_client.api_version < api_versions.APIVersion('2.63'):
+ msg = _(
+ '--os-compute-api-version 2.63 or greater is required to '
+ 'support the --no-trusted-certs option'
+ )
+ raise exceptions.CommandError(msg)
+
+ kwargs['trusted_image_certificates'] = None
+
+ try:
+ server = server.rebuild(image, parsed_args.password, **kwargs)
+ finally:
+ if userdata and hasattr(userdata, 'close'):
+ userdata.close()
+
if parsed_args.wait:
if utils.wait_for_status(
compute_client.servers.get,