Added script to wait for all k8s jobs to complete

Change-Id: I972f1167b6adc9df63d9bb431f3c3540c905950a
diff --git a/scripts/wait_for_jobs.sh b/scripts/wait_for_jobs.sh
new file mode 100755
index 0000000..7ba67a0
--- /dev/null
+++ b/scripts/wait_for_jobs.sh
@@ -0,0 +1,82 @@
+#!/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-jobs.sh
+# waits for all kubernetes jobs to complete before exiting
+# inspired by similar scripts in Kolla-Kubernetes and Openstack Helm
+
+set -e -u -o pipefail
+fail_wfj=0
+
+# Set these to configure maximum timeout, and interval for checks
+JOBS_TIMEOUT=${JOBS_TIMEOUT:-600}
+CHECK_INTERVAL=${CHECK_INTERVAL:-5}
+KUBECTL_ARGS=${KUBECTL_ARGS:-}
+
+# calculate timeout time
+START_TIME=$(date +%s)
+END_TIME=$((START_TIME + JOBS_TIMEOUT))
+
+echo "wait_for_jobs.sh - Waiting up to ${JOBS_TIMEOUT} seconds for all Kubernetes jobs to complete"
+echo "Number printed is number of currently active jobs"
+
+prev_job_count=0
+
+while true; do
+  NOW=$(date +%s)
+
+  # handle timeout without completion
+  if [ "$NOW" -gt "$END_TIME" ]
+  then
+    echo "Jobs didn't complete before timout of ${JOBS_TIMEOUT} seconds"
+    fail_wfj=1
+    break
+  fi
+
+  # get list of active jobs, and count of them
+  # jsonpath is picky about string vs comparison quoting, so have to have:
+  # shellcheck disable=SC2026
+  active_jobs=$(kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[?(@.status.active=='1')]}{.metadata.name}{"\n"}{end}')
+  active_job_count=$(echo "${active_jobs}" | wc -l)
+
+  # if no jobs active, print runtime and break
+  if [ -z "$active_jobs" ]
+  then
+    runtime=$((NOW - START_TIME))
+    echo ""
+    echo "All jobs completed in $runtime seconds"
+    break
+  fi
+
+  # deal with changes in number of jobs
+  if [ "$active_job_count" -ne "$prev_job_count" ]
+  then
+    echo ""
+    echo "Number of active jobs changed - current jobs:"
+    echo "$active_jobs"
+  fi
+  prev_job_count=$active_job_count
+
+  # print number of remaining jobs every $CHECK_INTERVAL
+  echo -n "$active_job_count"
+  sleep "$CHECK_INTERVAL"
+done
+
+echo ""
+echo "Job Status - Name | Start Time | Completion Time"
+kubectl get jobs $KUBECTL_ARGS -o=jsonpath='{range .items[*]}{.metadata.name}{"\t| "}{.status.startTime}{" | "}{.status.completionTime}{"\n"}{end}'
+
+exit ${fail_wfj}