aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Zhang <zhang.lei.fly@gmail.com>2016-01-03 21:38:08 +0800
committerJeffrey Zhang <zhang.lei.fly@gmail.com>2016-01-04 19:04:48 +0800
commit7fe22629aba3aad2577a8b396b638128218a1d53 (patch)
tree5039e449cfb1a2dcd505a3600677995843e8d89a
parentb32df7300c80dcf2255d3b0bc3915695a64709c3 (diff)
downloadkolla-7fe22629aba3aad2577a8b396b638128218a1d53.tar.gz
kolla-7fe22629aba3aad2577a8b396b638128218a1d53.zip
Fix the docker may return a empty dict when pull images
Closes-Bug: #1530649 Change-Id: I74191c711d1e5c27d33011be4d5528fe08c14273
-rw-r--r--ansible/library/kolla_docker.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/ansible/library/kolla_docker.py b/ansible/library/kolla_docker.py
index 13870eaee..abd669380 100644
--- a/ansible/library/kolla_docker.py
+++ b/ansible/library/kolla_docker.py
@@ -211,28 +211,32 @@ class DockerWorker(object):
image, tag = self.parse_image()
- status = [
+ statuses = [
json.loads(line.strip()) for line in self.dc.pull(
repository=image, tag=tag, stream=True
)
]
- # NOTE(SamYaple): This allows us to use v1 and v2 docker registries.
- # Eventually docker will stop supporting v1 registries and when
- # that happens we can remove this.
- search = -2 if 'legacy registry' in status[-1].get('status') else -1
-
- if "Downloaded newer image for" in status[search].get('status'):
- self.changed = True
- elif "Image is up to date for" in status[search].get('status'):
- # No new layer was pulled, no change
- pass
- else:
- self.module.fail_json(
- msg="Invalid status returned from pull",
- changed=True,
- failed=True
- )
+ for status in reversed(statuses):
+ # NOTE(jeffrey4l): Get the last not empty status with status
+ # property
+ if status and status.get('status'):
+ # NOTE(SamYaple): This allows us to use v1 and v2 docker
+ # registries. Eventually docker will stop supporting v1
+ # registries and when that happens we can remove this.
+ if 'legacy registry' in status.get('status'):
+ continue
+ elif "Downloaded newer image for" in status.get('status'):
+ self.changed = True
+ return
+ elif "Image is up to date for" in status.get('status'):
+ return
+ else:
+ self.module.fail_json(
+ msg="Invalid status returned from pull",
+ changed=True,
+ failed=True
+ )
def remove_container(self):
if self.check_container():