Add wait command for docker images

Change-Id: Ia394bde74bea3bd1da3e7e82df6b08230cc96da1
Closes-bug: #PROD-25515 (PROD:25515)
Related-bug: #PROD-25653 (PROD:25653)
diff --git a/config-drive/master_config.yaml b/config-drive/master_config.yaml
index 4508002..9352656 100644
--- a/config-drive/master_config.yaml
+++ b/config-drive/master_config.yaml
@@ -146,6 +146,25 @@
       fi
     }
 
+    # $1 is stack name
+    function wait_for_docker_images() {
+      local IMAGES=$(docker stack ps ${1} --format "{{.Image}}" | awk -F ':' '{print $1}' | uniq);
+      local NOT_PULLED=""
+      local counter=0
+      until [[ -z "${NOT_PULLED}" ]] || [ counter -eq 90 ]; do
+        for image in ${IMAGES}; do
+            NOT_PULLED=""
+            local exist=$(docker images --format "{{if eq .Repository \"$image\"}}{{.Repository}}{{end}}");
+            if [ -z "${exist}" ]; then
+                NOT_PULLED="${image} ${NOT_PULLED}"
+            fi;
+        done
+        echo "Images ${NOT_PULLED} are not pulled yet"
+        sleep 10;
+        counter=$(( counter++ ))
+      done
+    }
+
     function process_jenkins() {
       # INFO: jenkins is in docker in 2019.x releases
       if [ -f /opt/jenkins_in_docker ]; then
@@ -272,6 +291,8 @@
 
     if [ -f /opt/jenkins_in_docker ] || [ -f /opt/postgresql_in_docker ]; then
       process_swarm
+      wait_for_docker_images postgresql
+      wait_for_docker_images jenkins
     fi
     if [ -f /opt/jenkins_in_docker ] && [ ! -f /opt/postgresql_in_docker ]; then
       docker stack rm postgresql || true