diff options
author | imacdonn <iain.macdonnell@oracle.com> | 2018-09-14 23:25:11 +0000 |
---|---|---|
committer | imacdonn <iain.macdonnell@oracle.com> | 2018-10-24 00:16:58 +0000 |
commit | 3f7171dc1445f0647f15a735e5f4b55a986068e6 (patch) | |
tree | ac9abeeb7cdefd1fbc2d84473e87f7856045126f /glanceclient | |
parent | a757757a106d9ed6c06e5a2f38ed27e77d2221f5 (diff) | |
download | python-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.py | 23 | ||||
-rw-r--r-- | glanceclient/v2/images.py | 5 | ||||
-rw-r--r-- | glanceclient/v2/shell.py | 16 |
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) |