Poll on the actual image showing up

Turns out just polling on the task completion doesn't mean you actually
have the image. You also need to poll on the image becoming a thing in
glance.

Change-Id: I910ac612e6af1f5888c1820a09ee79fab012bdae
This commit is contained in:
Monty Taylor 2015-04-01 11:17:31 -04:00
parent b03f1f3b59
commit 7eb7c4c89a

View File

@ -1027,10 +1027,12 @@ class OpenStackCloud(object):
container=container, name=name), container=container, name=name),
image_properties=dict(name=name)))) image_properties=dict(name=name))))
if wait: if wait:
image_id = None
for count in _iterate_timeout( for count in _iterate_timeout(
timeout, timeout,
"Timeout waiting for the image to import."): "Timeout waiting for the image to import."):
try: try:
if image_id is None:
status = self.manager.submitTask( status = self.manager.submitTask(
_tasks.ImageTaskGet(task_id=glance_task.id)) _tasks.ImageTaskGet(task_id=glance_task.id))
except glanceclient.exc.HTTPServiceUnavailable: except glanceclient.exc.HTTPServiceUnavailable:
@ -1038,9 +1040,17 @@ class OpenStackCloud(object):
continue continue
if status.status == 'success': if status.status == 'success':
image_id = status.result['image_id']
self._reset_image_cache() self._reset_image_cache()
try:
image = self.get_image(image_id)
except glanceclient.exc.HTTPServiceUnavailable:
# Intermittent failure - catch and try again
continue
if image is None:
continue
self.update_image_properties( self.update_image_properties(
name_or_id=status.result['image_id'], image=image,
**image_properties) **image_properties)
return self.get_image_dict(status.result['image_id']) return self.get_image_dict(status.result['image_id'])
if status.status == 'failure': if status.status == 'failure':