Add wait_for_pods.sh script to 6.0 for testing

Change-Id: If7eeaa746396c90e7613d951346a59c4ea1c6866
diff --git a/VERSION b/VERSION
index 9b9a244..090ea9d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-6.0.2
+6.0.3
diff --git a/scripts/wait_for_pods.sh b/scripts/wait_for_pods.sh
new file mode 100644
index 0000000..6d58010
--- /dev/null
+++ b/scripts/wait_for_pods.sh
@@ -0,0 +1,116 @@
+#!/usr/bin/env bash
+
+# Copyright 2018-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# wait_for_pods.sh
+# waits for all kubernetes pods to complete before exiting, optionally only
+# pods in a specific namespace passed as first argument
+# inspired by similar scripts in Kolla-Kubernetes and Openstack Helm
+
+set -e -o pipefail
+fail_wfp=0
+
+# Set these to configure maximum timeout, and interval for checks
+PODS_TIMEOUT=${PODS_TIMEOUT:-600}
+CHECK_INTERVAL=${CHECK_INTERVAL:-5}
+KUBECTL_ARGS=${KUBECTL_ARGS:-}
+
+# use namespace if passed as first arg, or "all" for all namespaces
+if [ ! -z "$1" ]
+then
+  if [[ "$1" == "all" ]]
+  then
+    KUBECTL_ARGS+=" --all-namespaces"
+  else
+    KUBECTL_ARGS+=" --namespace=$1"
+  fi
+fi
+set -u
+
+# calculate timeout time
+START_TIME=$(date +%s)
+END_TIME=$((START_TIME + PODS_TIMEOUT))
+
+echo "wait_for_pods.sh - Waiting up to ${PODS_TIMEOUT} seconds for all Kubernetes pods to be ready"
+echo "Number printed is number of jobs/pods/containers waiting to be ready"
+
+prev_total_unready=0
+
+while true; do
+  NOW=$(date +%s)
+
+  # handle timeout without completion
+  if [ "$NOW" -gt "$END_TIME" ]
+  then
+    echo "Pods/Containers/Jobs not ready before timeout of ${PODS_TIMEOUT} seconds"
+    fail_wfp=1
+    break
+  fi
+
+  # get list of uncompleted items with jsonpath, then count them with wc
+  # ref: https://kubernetes.io/docs/reference/kubectl/jsonpath/
+  # jsonpath is picky about string vs comparison quoting, so may need to
+  # disable SC2026 for these lines. SC2086 allows for multiple args.
+
+  # shellcheck disable=SC2026,SC2086
+  pending_pods=$(kubectl get pods ${KUBECTL_ARGS} -o=jsonpath='{range .items[?(@.status.phase=="Pending")]}{.metadata.name}{"\n"}{end}')
+  # check for empty string before counting lines, echo adds a newline
+  if [ -z "$pending_pods" ]; then
+    pending_pod_count=0
+  else
+    pending_pod_count=$( echo "$pending_pods" | wc -l)
+  fi
+
+  # shellcheck disable=SC2026,SC2086
+  unready_containers=$(kubectl get pods ${KUBECTL_ARGS} -o=jsonpath='{range .items[?(@.status.phase=="Running")]}{range .status.containerStatuses[?(@.ready==false)]}{.name}: {.ready}{"\n"}{end}{end}')
+  if [ -z "$unready_containers" ]; then
+    unready_container_count=0
+  else
+    unready_container_count=$(echo "$unready_containers" | wc -l)
+  fi
+
+  # shellcheck disable=SC2026,SC2086
+  active_jobs=$(kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[?(@.status.active=='1')]}{.metadata.name}{"\n"}{end}')
+  if [ -z "$active_jobs" ]; then
+    active_job_count=0
+  else
+    active_job_count=$(echo "$active_jobs" | wc -l)
+  fi
+
+  total_unready=$((pending_pod_count + unready_container_count + active_job_count))
+
+  # if everything is ready, print runtime and break
+  if [ "$total_unready" -eq 0 ]
+  then
+    runtime=$((NOW - START_TIME))
+    echo ""
+    echo "All pods ready in $runtime seconds"
+    break
+  fi
+
+  # deal with changes in number of jobs
+  if [ "$total_unready" -ne "$prev_total_unready" ]
+  then
+    echo ""
+    echo "Change in unready pods - Pending Pods: $pending_pod_count, Unready Containers: $unready_container_count, Active Jobs: $active_job_count"
+  fi
+  prev_total_unready=$total_unready
+
+  # print number of unready pods every $CHECK_INTERVAL
+  echo -n "$total_unready "
+  sleep "$CHECK_INTERVAL"
+done
+
+exit ${fail_wfp}