kubectl_apply() { VIA=${1} FILE=${2} ssh_cmd ${VIA} "cat ${FILE} | kubectl apply -f -" } kubectl_cmd() { VIA=${1} shift ssh_cmd ${VIA} kubectl ${@} } kubectl_wait_for_pod() { VIA=${1} NAMESPACE=${2} POD_NAME=${3} SEC=${4:-600} log Waiting ${SEC} seconds for termination of pod ${POD_NAME} POD_PHASE_JSONPATH='{.status.phase}' end=$(($(date +%s) + $SEC)) while true; do POD_PHASE=$(kubectl_cmd ${VIA} --request-timeout 10s --namespace ${NAMESPACE} get -o jsonpath="${POD_PHASE_JSONPATH}" pod ${POD_NAME}) if [[ ${POD_PHASE} = "Succeeded" ]]; then log Pod ${POD_NAME} succeeded. break elif [[ $POD_PHASE = "Failed" ]]; then log Pod ${POD_NAME} failed. kubectl_cmd ${VIA} --request-timeout 10s --namespace ${NAMESPACE} get -o yaml pod ${POD_NAME} 1>&2 fail else now=$(date +%s) if [ $now -gt $end ]; then log Pod did not terminate before timeout. kubectl_cmd ${VIA} --request-timeout 10s --namespace ${NAMESPACE} get -o yaml pod ${POD_NAME} 1>&2 fail fi sleep 1 fi done }