compute: Add missing options for 'server image create'

Add a '--property' option to record arbitrary key/value metadata to
'meta_data.json' on the metadata server.

Change-Id: I267f3290fce3692cbd1ff6a9af146c2736ee31fe
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
Stephen Finucane 2020-12-03 12:20:40 +00:00
parent fc24142ed4
commit 958344733a
3 changed files with 27 additions and 2 deletions

View File

@ -18,6 +18,7 @@
import importlib
import logging
from osc_lib.cli import parseractions
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
@ -48,6 +49,16 @@ class CreateServerImage(command.ShowOne):
metavar='<image-name>',
help=_('Name of new disk image (default: server name)'),
)
parser.add_argument(
'--property',
metavar='<key=value>',
dest='properties',
action=parseractions.KeyValueAction,
help=_(
'Set a new property to meta_data.json on the metadata server '
'(repeat option to set multiple values)'
),
)
parser.add_argument(
'--wait',
action='store_true',
@ -76,6 +87,7 @@ class CreateServerImage(command.ShowOne):
image_id = compute_client.servers.create_image(
server.id,
image_name,
parsed_args.properties,
)
image_client = self.app.client_manager.image
@ -89,8 +101,8 @@ class CreateServerImage(command.ShowOne):
):
self.app.stdout.write('\n')
else:
LOG.error(_('Error creating server image: %s'),
parsed_args.server)
LOG.error(
_('Error creating server image: %s'), parsed_args.server)
raise exceptions.CommandError
if self.app.client_manager._api_version['image'] == '1':
@ -105,4 +117,5 @@ class CreateServerImage(command.ShowOne):
]
)
info = image_module._format_image(image)
return zip(*sorted(info.items()))

View File

@ -130,6 +130,7 @@ class TestServerImageCreate(TestServerImage):
self.servers_mock.create_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
)
self.assertEqual(self.image_columns(images[0]), columns)
@ -141,11 +142,13 @@ class TestServerImageCreate(TestServerImage):
arglist = [
'--name', 'img-nam',
'--property', 'key=value',
servers[0].id,
]
verifylist = [
('name', 'img-nam'),
('server', servers[0].id),
('properties', {'key': 'value'}),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -158,6 +161,7 @@ class TestServerImageCreate(TestServerImage):
self.servers_mock.create_image.assert_called_with(
servers[0].id,
'img-nam',
{'key': 'value'},
)
self.assertEqual(self.image_columns(images[0]), columns)
@ -188,6 +192,7 @@ class TestServerImageCreate(TestServerImage):
self.servers_mock.create_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
)
mock_wait_for_status.assert_called_once_with(
@ -220,6 +225,7 @@ class TestServerImageCreate(TestServerImage):
self.servers_mock.create_image.assert_called_with(
servers[0].id,
servers[0].name,
None,
)
mock_wait_for_status.assert_called_once_with(

View File

@ -0,0 +1,6 @@
---
features:
- |
Add ``--property`` option to ``server image create`` command, allowing
users to record arbitrary key/value metadata to ``meta_data.json`` on
the metadata server.