45 lines
1.4 KiB
Bash
Executable File
45 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
namespace=${NAMESPACE:-kubernetes-dashboard}
|
|
timeout_seconds=${DEPLOYMENT_TIMEOUT_SECONDS:-600}
|
|
poll_seconds=${DEPLOYMENT_POLL_SECONDS:-5}
|
|
|
|
if [[ "$#" -eq 0 ]]; then
|
|
echo "Usage: wait-for-deployments.sh DEPLOYMENT..." >&2
|
|
exit 2
|
|
fi
|
|
|
|
for deployment in "$@"; do
|
|
deadline=$((SECONDS + timeout_seconds))
|
|
state="not observed"
|
|
complete=false
|
|
|
|
while ((SECONDS < deadline)); do
|
|
state=$(kubectl --namespace "${namespace}" get "deployment/${deployment}" \
|
|
--output=jsonpath='{.metadata.generation}{"|"}{.status.observedGeneration}{"|"}{.spec.replicas}{"|"}{.status.updatedReplicas}{"|"}{.status.readyReplicas}{"|"}{.status.availableReplicas}{"\n"}')
|
|
IFS='|' read -r generation observed desired updated ready available <<< "${state}"
|
|
observed=${observed:-0}
|
|
desired=${desired:-0}
|
|
updated=${updated:-0}
|
|
ready=${ready:-0}
|
|
available=${available:-0}
|
|
|
|
if [[ "${observed}" -ge "${generation}" \
|
|
&& "${updated}" -eq "${desired}" \
|
|
&& "${ready}" -eq "${desired}" \
|
|
&& "${available}" -eq "${desired}" ]]; then
|
|
echo "deployment/${deployment} is ready (${ready}/${desired})"
|
|
complete=true
|
|
break
|
|
fi
|
|
sleep "${poll_seconds}"
|
|
done
|
|
|
|
if [[ "${complete}" != true ]]; then
|
|
echo "Timed out waiting for deployment/${deployment}; generation observed desired updated ready available: ${state}" >&2
|
|
exit 1
|
|
fi
|
|
done
|