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:
ShogoAdachi 2017-09-07 19:10:24 +09:00 committed by Dean Troyer
parent de2af66c16
commit 4464109c77
5 changed files with 63 additions and 4 deletions

View File

@ -625,11 +625,11 @@ class SetImage(command.Command):
kwargs = {}
copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties',
'container_format', 'disk_format', 'size', 'store',
'location', 'copy_from', 'volume', 'force', 'checksum')
'location', 'copy_from', 'volume', 'checksum')
for attr in copy_attrs:
if attr in parsed_args:
val = getattr(parsed_args, attr, None)
if val:
if val is not None:
# Only include a value in kwargs for attributes that are
# actually present on the command line
kwargs[attr] = val
@ -653,6 +653,8 @@ class SetImage(command.Command):
kwargs['is_public'] = True
if parsed_args.private:
kwargs['is_public'] = False
if parsed_args.force:
kwargs['force'] = True
# Wrap the call to catch exceptions in order to close files
try:

View File

@ -749,7 +749,7 @@ class SetImage(command.Command):
"--tag",
dest="tags",
metavar="<tag>",
default=[],
default=None,
action='append',
help=_("Set a tag on this image "
"(repeat option to set multiple tags)"),
@ -860,7 +860,7 @@ class SetImage(command.Command):
for attr in copy_attrs:
if attr in parsed_args:
val = getattr(parsed_args, attr, None)
if val:
if val is not None:
# Only include a value in kwargs for attributes that are
# actually present on the command line
kwargs[attr] = val

View File

@ -689,6 +689,32 @@ class TestImageSet(TestImage):
)
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):

View File

@ -1313,6 +1313,32 @@ class TestImageSet(TestImage):
exceptions.CommandError,
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):

View 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