Accept 0 for --min-disk and --min-ram
The current openstackclient implementation cannot accept 0 for --min-disk and --min-ram with the "openstack image set" command. If theses options get set to 0, the option parser in openstackclient wrongly interprets 0 as no option value. The 0 is valid for these options if administrators want to make it the default(no minimum requirements). This patch fix the parser so that it avoids only 'None'. Change-Id: Ie8ee37484c02c26f54adc56263fcd167c0ce7eb3 Closes-bug: #1719499
This commit is contained in:
parent
de2af66c16
commit
4464109c77
@ -625,11 +625,11 @@ class SetImage(command.Command):
|
|||||||
kwargs = {}
|
kwargs = {}
|
||||||
copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties',
|
copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties',
|
||||||
'container_format', 'disk_format', 'size', 'store',
|
'container_format', 'disk_format', 'size', 'store',
|
||||||
'location', 'copy_from', 'volume', 'force', 'checksum')
|
'location', 'copy_from', 'volume', 'checksum')
|
||||||
for attr in copy_attrs:
|
for attr in copy_attrs:
|
||||||
if attr in parsed_args:
|
if attr in parsed_args:
|
||||||
val = getattr(parsed_args, attr, None)
|
val = getattr(parsed_args, attr, None)
|
||||||
if val:
|
if val is not None:
|
||||||
# Only include a value in kwargs for attributes that are
|
# Only include a value in kwargs for attributes that are
|
||||||
# actually present on the command line
|
# actually present on the command line
|
||||||
kwargs[attr] = val
|
kwargs[attr] = val
|
||||||
@ -653,6 +653,8 @@ class SetImage(command.Command):
|
|||||||
kwargs['is_public'] = True
|
kwargs['is_public'] = True
|
||||||
if parsed_args.private:
|
if parsed_args.private:
|
||||||
kwargs['is_public'] = False
|
kwargs['is_public'] = False
|
||||||
|
if parsed_args.force:
|
||||||
|
kwargs['force'] = True
|
||||||
|
|
||||||
# Wrap the call to catch exceptions in order to close files
|
# Wrap the call to catch exceptions in order to close files
|
||||||
try:
|
try:
|
||||||
|
@ -749,7 +749,7 @@ class SetImage(command.Command):
|
|||||||
"--tag",
|
"--tag",
|
||||||
dest="tags",
|
dest="tags",
|
||||||
metavar="<tag>",
|
metavar="<tag>",
|
||||||
default=[],
|
default=None,
|
||||||
action='append',
|
action='append',
|
||||||
help=_("Set a tag on this image "
|
help=_("Set a tag on this image "
|
||||||
"(repeat option to set multiple tags)"),
|
"(repeat option to set multiple tags)"),
|
||||||
@ -860,7 +860,7 @@ class SetImage(command.Command):
|
|||||||
for attr in copy_attrs:
|
for attr in copy_attrs:
|
||||||
if attr in parsed_args:
|
if attr in parsed_args:
|
||||||
val = getattr(parsed_args, attr, None)
|
val = getattr(parsed_args, attr, None)
|
||||||
if val:
|
if val is not None:
|
||||||
# Only include a value in kwargs for attributes that are
|
# Only include a value in kwargs for attributes that are
|
||||||
# actually present on the command line
|
# actually present on the command line
|
||||||
kwargs[attr] = val
|
kwargs[attr] = val
|
||||||
|
@ -689,6 +689,32 @@ class TestImageSet(TestImage):
|
|||||||
)
|
)
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_image_set_numeric_options_to_zero(self):
|
||||||
|
arglist = [
|
||||||
|
'--min-disk', '0',
|
||||||
|
'--min-ram', '0',
|
||||||
|
self._image.name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('min_disk', 0),
|
||||||
|
('min_ram', 0),
|
||||||
|
('image', self._image.name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
kwargs = {
|
||||||
|
'min_disk': 0,
|
||||||
|
'min_ram': 0,
|
||||||
|
}
|
||||||
|
# ImageManager.update(image, **kwargs)
|
||||||
|
self.images_mock.update.assert_called_with(
|
||||||
|
self._image.id,
|
||||||
|
**kwargs
|
||||||
|
)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
class TestImageShow(TestImage):
|
class TestImageShow(TestImage):
|
||||||
|
|
||||||
|
@ -1313,6 +1313,32 @@ class TestImageSet(TestImage):
|
|||||||
exceptions.CommandError,
|
exceptions.CommandError,
|
||||||
self.cmd.take_action, parsed_args)
|
self.cmd.take_action, parsed_args)
|
||||||
|
|
||||||
|
def test_image_set_numeric_options_to_zero(self):
|
||||||
|
arglist = [
|
||||||
|
'--min-disk', '0',
|
||||||
|
'--min-ram', '0',
|
||||||
|
image_fakes.image_name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('min_disk', 0),
|
||||||
|
('min_ram', 0),
|
||||||
|
('image', image_fakes.image_name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
kwargs = {
|
||||||
|
'min_disk': 0,
|
||||||
|
'min_ram': 0,
|
||||||
|
}
|
||||||
|
# ImageManager.update(image, **kwargs)
|
||||||
|
self.images_mock.update.assert_called_with(
|
||||||
|
image_fakes.image_id,
|
||||||
|
**kwargs
|
||||||
|
)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
class TestImageShow(TestImage):
|
class TestImageShow(TestImage):
|
||||||
|
|
||||||
|
5
releasenotes/notes/bug-1719499-d67d80b0da0bc30a.yaml
Normal file
5
releasenotes/notes/bug-1719499-d67d80b0da0bc30a.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Accept ``0`` as a valid value in the ``image set`` ``--min-disk`` and ``--min-ram`` options.
|
||||||
|
.. _bug 1719499: https://bugs.launchpad.net/python-openstackclient/+bug/1719499
|
Loading…
Reference in New Issue
Block a user