Skip to content

Commit 29a7c9a

Browse files
committed
image: Unset properties rather than setting to None
Currently, we attempt to unset an image property by setting it to None. This doesn't work for known properties and is rightly rejected by the Glance API with the following error: BadRequestException: 400: Client Error for url: http://172.20.4.87/image/v2/images/368c5751-2b0b-4a38-a255-fd146fe52d31, Bad Request The solution is to actually unset the field by deleting it. Change-Id: Ie156bedbe0f9244f82c81401679706f484caf9aa Signed-off-by: Stephen Finucane <sfinucan@redhat.com> Story: #2008463 Task: #41493
1 parent f5b185c commit 29a7c9a

3 files changed

Lines changed: 16 additions & 17 deletions

File tree

openstackclient/image/v2/image.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1166,7 +1166,7 @@ def take_action(self, parsed_args):
11661166
if parsed_args.properties:
11671167
for k in parsed_args.properties:
11681168
if k in image:
1169-
kwargs[k] = None
1169+
delattr(image, k)
11701170
elif k in image.properties:
11711171
# Since image is an "evil" object from SDK POV we need to
11721172
# pass modified properties object, so that SDK can figure

openstackclient/tests/functional/image/v2/test_image.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ def test_image_attributes(self):
119119
'image set ' +
120120
'--property a=b ' +
121121
'--property c=d ' +
122+
'--property hw_rng_model=virtio ' +
122123
'--public ' +
123124
self.name
124125
)
@@ -133,6 +134,7 @@ def test_image_attributes(self):
133134
'image unset ' +
134135
'--property a ' +
135136
'--property c ' +
137+
'--property hw_rng_model ' +
136138
self.name
137139
)
138140
json_output = json.loads(self.openstack(

openstackclient/tests/unit/image/v2/test_image.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,15 +1501,16 @@ def test_image_show_human_readable(self):
15011501

15021502
class TestImageUnset(TestImage):
15031503

1504-
attrs = {}
1505-
attrs['tags'] = ['test']
1506-
attrs['prop'] = 'test'
1507-
attrs['prop2'] = 'fake'
1508-
image = image_fakes.FakeImage.create_one_image(attrs)
1509-
15101504
def setUp(self):
15111505
super(TestImageUnset, self).setUp()
15121506

1507+
attrs = {}
1508+
attrs['tags'] = ['test']
1509+
attrs['hw_rng_model'] = 'virtio'
1510+
attrs['prop'] = 'test'
1511+
attrs['prop2'] = 'fake'
1512+
self.image = image_fakes.FakeImage.create_one_image(attrs)
1513+
15131514
self.client.find_image.return_value = self.image
15141515
self.client.remove_tag.return_value = self.image
15151516
self.client.update_image.return_value = self.image
@@ -1552,46 +1553,42 @@ def test_image_unset_tag_option(self):
15521553
def test_image_unset_property_option(self):
15531554

15541555
arglist = [
1556+
'--property', 'hw_rng_model',
15551557
'--property', 'prop',
15561558
self.image.id,
15571559
]
15581560

15591561
verifylist = [
1560-
('properties', ['prop']),
1562+
('properties', ['hw_rng_model', 'prop']),
15611563
('image', self.image.id)
15621564
]
15631565
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
15641566
result = self.cmd.take_action(parsed_args)
15651567

1566-
kwargs = {}
15671568
self.client.update_image.assert_called_with(
1568-
self.image,
1569-
properties={'prop2': 'fake'},
1570-
**kwargs)
1569+
self.image, properties={'prop2': 'fake'})
15711570

15721571
self.assertIsNone(result)
15731572

15741573
def test_image_unset_mixed_option(self):
15751574

15761575
arglist = [
15771576
'--tag', 'test',
1577+
'--property', 'hw_rng_model',
15781578
'--property', 'prop',
15791579
self.image.id,
15801580
]
15811581

15821582
verifylist = [
15831583
('tags', ['test']),
1584-
('properties', ['prop']),
1584+
('properties', ['hw_rng_model', 'prop']),
15851585
('image', self.image.id)
15861586
]
15871587
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
15881588
result = self.cmd.take_action(parsed_args)
15891589

1590-
kwargs = {}
15911590
self.client.update_image.assert_called_with(
1592-
self.image,
1593-
properties={'prop2': 'fake'},
1594-
**kwargs)
1591+
self.image, properties={'prop2': 'fake'})
15951592

15961593
self.client.remove_tag.assert_called_with(
15971594
self.image.id, 'test'

0 commit comments

Comments
 (0)