Preserve image properties on update
* By default, image properties should not be deleted on image update. * A user can specify --purge-props through the CLI or purge_props as a keyword argument to ImageManager.update to override the default behavior and force properties to be deleted. * Fixes bug 1022758 Change-Id: Ib079378cb765552fc29a66913aefbbcd934d2065
This commit is contained in:
parent
0e8ab72357
commit
cf8613e76d
|
@ -176,6 +176,15 @@ class ImageManager(base.Manager):
|
|||
else:
|
||||
image_data = None
|
||||
|
||||
hdrs = {}
|
||||
|
||||
try:
|
||||
purge_props = 'true' if kwargs.pop('purge_props') else 'false'
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
hdrs['x-glance-registry-purge-props'] = purge_props
|
||||
|
||||
fields = {}
|
||||
for field in kwargs:
|
||||
if field in UPDATE_PARAMS:
|
||||
|
@ -185,7 +194,7 @@ class ImageManager(base.Manager):
|
|||
raise TypeError(msg % field)
|
||||
|
||||
copy_from = fields.pop('copy_from', None)
|
||||
hdrs = self._image_meta_to_headers(fields)
|
||||
hdrs.update(self._image_meta_to_headers(fields))
|
||||
if copy_from is not None:
|
||||
hdrs['x-glance-api-copy-from'] = copy_from
|
||||
|
||||
|
|
|
@ -170,6 +170,10 @@ def do_image_create(gc, args):
|
|||
@utils.arg('--property', metavar="<key=value>", action='append', default=[],
|
||||
help=("Arbitrary property to associate with image. "
|
||||
"May be used multiple times."))
|
||||
@utils.arg('--purge-props', action='store_true', default=False,
|
||||
help=("If this flag is present, delete all image properties "
|
||||
"not explicitly set in the update request. Otherwise, "
|
||||
"those properties not referenced are preserved."))
|
||||
def do_image_update(gc, args):
|
||||
# Filter out None values
|
||||
fields = dict(filter(lambda x: x[1] is not None, vars(args).items()))
|
||||
|
@ -192,7 +196,7 @@ def do_image_update(gc, args):
|
|||
else:
|
||||
fields['data'] = sys.stdin
|
||||
|
||||
image = gc.images.update(image_id, **fields)
|
||||
image = gc.images.update(image_id, purge_props=args.purge_props, **fields)
|
||||
_image_show(image)
|
||||
|
||||
|
||||
|
|
|
@ -224,6 +224,12 @@ class ImageManagerTest(unittest.TestCase):
|
|||
expect = [('PUT', '/v1/images/1', expect_headers, image_data)]
|
||||
self.assertEqual(self.api.calls, expect)
|
||||
|
||||
def test_update_with_purge_props(self):
|
||||
self.mgr.update('1', purge_props=True)
|
||||
expect_headers = {'x-glance-registry-purge-props': 'true'}
|
||||
expect = [('PUT', '/v1/images/1', expect_headers, None)]
|
||||
self.assertEqual(self.api.calls, expect)
|
||||
|
||||
|
||||
class ImageTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue