yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #56008
[Bug 1619675] Re: Glance does not return image MD5
Hey, sorry for not getting back to you quicker. The log shows that on
that particular request, the server's response doesn't include the MD5,
so I think Ian is right that this is more of a Glance problem than it is
an SDK problem. I'm going to add Glance in here so perhaps they can take
a look.
** Also affects: glance
Importance: Undecided
Status: New
** Changed in: python-openstacksdk
Status: New => Invalid
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Glance.
https://bugs.launchpad.net/bugs/1619675
Title:
Glance does not return image MD5
Status in Glance:
New
Status in OpenStack SDK:
Invalid
Bug description:
I'm trying to download an OpenStack image from glance using only the
Openstack Python SDK, but I only get this error:
Traceback (most recent call last):
File "/home/openstack/discovery/discovery.py", line 222, in <module>
main(sys.argv[1:])
File "/home/openstack/discovery/discovery.py", line 117, in main
image_service.download_image(image)
File "/usr/local/lib/python2.7/dist-packages/openstack/image/v2/_proxy.py", line 72, in download_image
return image.download(self.session)
File "/usr/local/lib/python2.7/dist-packages/openstack/image/v2/image.py", line 166, in download
checksum = resp.headers["Content-MD5"]
File "/usr/local/lib/python2.7/dist-packages/requests/structures.py", line 54, in __getitem__
return self._store[key.lower()][1]
KeyError: 'content-md5'
The weird part is that if I run the code using an IDE (PyCharm with
remote debug) or as a script (python script.py -i ...) I get the
error, but if I run each line using a python interpreter
(ipython/python) the error does not happen! Have no idea why.
Here is the code I'm using:
...
image_name = node.name + "_" + time.strftime("%Y-%m-%d_%H-%M-%S")
print "Getting data from", node.name
compute_service.create_server_image(node, image_name)
image = image_service.find_image(image_name)
image_service.wait_for_status(image, 'active')
fileName = "%s.img" % image.name
with open(str(fileName), 'w+') as imgFile:
imgFile.write(image.download(conn.image.session))
...
This code ends up calling the API in this file
/usr/local/lib/python2.7/dist-packages/openstack/image/v2/image.py,
with this method:
def download(self, session):
"""Download the data contained in an image"""
# TODO(briancurtin): This method should probably offload the get
# operation into another thread or something of that nature.
url = utils.urljoin(self.base_path, self.id, 'file')
resp = session.get(url, endpoint_filter=self.service)
checksum = resp.headers["Content-MD5"]
digest = hashlib.md5(resp.content).hexdigest()
if digest != checksum:
raise exceptions.InvalidResponse("checksum mismatch")
return resp.content
The resp.headers variable has no key "Content-MD5". This is the value
I found for it:
{'Date': 'Thu, 01 Sep 2016 20:17:01 GMT', 'Transfer-Encoding': 'chunked',
'Connection': 'keep-alive', 'Content-Type': 'application/octet-stream',
'X-Openstack-Request-Id': 'req-9eb16897-1398-4ab2-9cd4-45706e92819c'}
But according to the REST API documentationm the response should
return with the key Content-MD5: http://developer.openstack.org/api-
ref/image/v2/?expanded=download-binary-image-data-detail
If I just comment the MD5 check the download works fine, but this is
inside the SDK so I can't/shouldn't change it. Anyone have any
suggestion on how to achieve this using the OpenStack Python SDK? Is
this an SDK bug?
To manage notifications about this bug go to:
https://bugs.launchpad.net/glance/+bug/1619675/+subscriptions