summaryrefslogtreecommitdiff
path: root/glanceclient
diff options
context:
space:
mode:
authorimacdonn <iain.macdonnell@oracle.com>2018-09-14 23:25:11 +0000
committerimacdonn <iain.macdonnell@oracle.com>2018-10-24 00:16:58 +0000
commit3f7171dc1445f0647f15a735e5f4b55a986068e6 (patch)
treeac9abeeb7cdefd1fbc2d84473e87f7856045126f /glanceclient
parenta757757a106d9ed6c06e5a2f38ed27e77d2221f5 (diff)
downloadpython-glanceclient-3f7171dc1445f0647f15a735e5f4b55a986068e6.tar.gz
Embed validation data when adding location
Add support for embedding of checksum, os_hash_algo and os_hash_value when adding a location to an image. Depends-On: https://review.openstack.org/597648 Change-Id: Ibbe2f2bb226f52cc6b2ab591913b1797d2b086c0
Diffstat (limited to 'glanceclient')
-rw-r--r--glanceclient/tests/unit/v2/test_shell_v2.py23
-rw-r--r--glanceclient/v2/images.py5
-rw-r--r--glanceclient/v2/shell.py16
3 files changed, 34 insertions, 10 deletions
diff --git a/glanceclient/tests/unit/v2/test_shell_v2.py b/glanceclient/tests/unit/v2/test_shell_v2.py
index 6eeca83..a5b0a9b 100644
--- a/glanceclient/tests/unit/v2/test_shell_v2.py
+++ b/glanceclient/tests/unit/v2/test_shell_v2.py
@@ -1428,18 +1428,25 @@ class ShellV2Test(testtools.TestCase):
def test_do_location_add(self):
gc = self.gc
- loc = {'url': 'http://foo.com/', 'metadata': {'foo': 'bar'}}
- args = self._make_args({'id': 'pass',
- 'url': loc['url'],
- 'metadata': json.dumps(loc['metadata'])})
+ loc = {'url': 'http://foo.com/',
+ 'metadata': {'foo': 'bar'},
+ 'validation_data': {'checksum': 'csum',
+ 'os_hash_algo': 'algo',
+ 'os_hash_value': 'value'}}
+ args = {'id': 'pass',
+ 'url': loc['url'],
+ 'metadata': json.dumps(loc['metadata']),
+ 'checksum': 'csum',
+ 'hash_algo': 'algo',
+ 'hash_value': 'value'}
with mock.patch.object(gc.images, 'add_location') as mocked_addloc:
expect_image = {'id': 'pass', 'locations': [loc]}
mocked_addloc.return_value = expect_image
- test_shell.do_location_add(self.gc, args)
- mocked_addloc.assert_called_once_with('pass',
- loc['url'],
- loc['metadata'])
+ test_shell.do_location_add(self.gc, self._make_args(args))
+ mocked_addloc.assert_called_once_with(
+ 'pass', loc['url'], loc['metadata'],
+ validation_data=loc['validation_data'])
utils.print_dict.assert_called_once_with(expect_image)
def test_do_location_delete(self):
diff --git a/glanceclient/v2/images.py b/glanceclient/v2/images.py
index be804a2..296e2cc 100644
--- a/glanceclient/v2/images.py
+++ b/glanceclient/v2/images.py
@@ -381,7 +381,7 @@ class Controller(object):
data=json.dumps(patch_body))
return (resp, body), resp
- def add_location(self, image_id, url, metadata):
+ def add_location(self, image_id, url, metadata, validation_data=None):
"""Add a new location entry to an image's list of locations.
It is an error to add a URL that is already present in the list of
@@ -390,10 +390,13 @@ class Controller(object):
:param image_id: ID of image to which the location is to be added.
:param url: URL of the location to add.
:param metadata: Metadata associated with the location.
+ :param validation_data: Validation data for the image.
:returns: The updated image
"""
add_patch = [{'op': 'add', 'path': '/locations/-',
'value': {'url': url, 'metadata': metadata}}]
+ if validation_data:
+ add_patch[0]['value']['validation_data'] = validation_data
response = self._send_image_update_request(image_id, add_patch)
# Get request id from the above update request and pass the same to
# following get request
diff --git a/glanceclient/v2/shell.py b/glanceclient/v2/shell.py
index aaa85bb..f07e54f 100644
--- a/glanceclient/v2/shell.py
+++ b/glanceclient/v2/shell.py
@@ -725,16 +725,30 @@ def do_image_tag_delete(gc, args):
@utils.arg('--metadata', metavar='<STRING>', default='{}',
help=_('Metadata associated with the location. '
'Must be a valid JSON object (default: %(default)s)'))
+@utils.arg('--checksum', metavar='<STRING>',
+ help=_('md5 checksum of image contents'))
+@utils.arg('--hash-algo', metavar='<STRING>',
+ help=_('Multihash algorithm'))
+@utils.arg('--hash-value', metavar='<STRING>',
+ help=_('Multihash value'))
@utils.arg('id', metavar='<IMAGE_ID>',
help=_('ID of image to which the location is to be added.'))
def do_location_add(gc, args):
"""Add a location (and related metadata) to an image."""
+ validation_data = {}
+ if args.checksum:
+ validation_data['checksum'] = args.checksum
+ if args.hash_algo:
+ validation_data['os_hash_algo'] = args.hash_algo
+ if args.hash_value:
+ validation_data['os_hash_value'] = args.hash_value
try:
metadata = json.loads(args.metadata)
except ValueError:
utils.exit('Metadata is not a valid JSON object.')
else:
- image = gc.images.add_location(args.id, args.url, metadata)
+ image = gc.images.add_location(args.id, args.url, metadata,
+ validation_data=validation_data)
utils.print_dict(image)