Add wait command for docker images
Change-Id: I994569c67d67ab1beec2647c9ca46efa1015edda
Closes-bug: #PROD-25515 (PROD:25515)
Related-bug: #PROD-25653 (PROD:25653)
diff --git a/docker/client/stack.sls b/docker/client/stack.sls
index b7bac65..4698d21 100644
--- a/docker/client/stack.sls
+++ b/docker/client/stack.sls
@@ -3,6 +3,12 @@
include:
- docker.client
+docker_compose_image_checker:
+ file.managed:
+ - name: /usr/local/bin/docker-compose-image-checker
+ - source: salt://docker/files/docker-compose-image-checker
+ - mode: 755
+
{%- for app, compose in client.stack.iteritems() %}
{%- if compose.service is defined %}
@@ -122,6 +128,21 @@
- file: docker_{{ app }}_env
- file: docker_{{ app }}_compose
+docker_stack_{{ app }}_wait_for_images:
+ cmd.wait:
+ - name: /usr/local/bin/docker-compose-image-checker {{ app }}
+ - retry:
+ attempts: {{ compose.image_pull_attempts|default(30) }}
+ interval: 10
+ until: True
+ - shell: /bin/bash
+ - user: {{ compose.user|default("root") }}
+ - require:
+ - cmd: docker_stack_{{ app }}
+ - file: docker_compose_image_checker
+ - watch:
+ - file: docker_{{ app }}_compose
+
{%- else %}
docker_remove_{{ app }}:
diff --git a/docker/files/docker-compose-image-checker b/docker/files/docker-compose-image-checker
new file mode 100755
index 0000000..e51f448
--- /dev/null
+++ b/docker/files/docker-compose-image-checker
@@ -0,0 +1,25 @@
+#!/bin/bash
+# =================================================
+# This file is managed by SaltStack docker formula.
+# Manual changes may be overwritten.
+# =================================================
+#
+# This script verifies that images for dedicated stack were
+# pulled from docker registry. First argument is stack name.
+
+STACK_NAME=$1
+if [ -z "${STACK_NAME}" ]; then echo "STACK_NAME is not provided"; exit 1; fi
+
+IMAGES=$(docker stack ps ${STACK_NAME} --format "{{.Image}}" | awk -F ':' '{print $1}' | uniq);
+NOT_PULLED=""
+for image in ${IMAGES}; do
+ exist=$(docker images --format "{{if eq .Repository \"$image\"}}{{.Repository}}{{end}}");
+ if [ -z "${exist}" ]; then
+ NOT_PULLED="${NOT_PULLED} ${image}"
+ fi;
+done
+
+if [ -n "${NOT_PULLED}" ]; then
+ echo "Images ${NOT_PULLED} do not exist";
+ exit 1;
+fi
\ No newline at end of file