Merge "helmv2-cli armada pod running and ready check"

This commit is contained in:
Zuul 2020-09-25 17:52:28 +00:00 committed by Gerrit Code Review
commit 578963f666
2 changed files with 48 additions and 13 deletions

View File

@ -20,18 +20,21 @@ PATH=/bin:/usr/bin:/usr/local/bin
# Process input options # Process input options
SCRIPT=$(basename $0) SCRIPT=$(basename $0)
OPTS=$(getopt -o dh --long debug,help -n ${SCRIPT} -- "$@") OPTS=$(getopt -o dh --long debug,help -n ${SCRIPT} -- "$@")
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi if [ $? != 0 ]; then
echo "Failed parsing options." >&2
exit 1
fi
eval set -- "$OPTS" eval set -- "$OPTS"
DEBUG=false DEBUG=false
HELP=false HELP=false
while true; do while true; do
case "$1" in case "$1" in
-d | --debug ) DEBUG=true; shift ;; -d | --debug ) DEBUG=true; shift ;;
-h | --help ) HELP=true; shift ;; -h | --help ) HELP=true; shift ;;
-- ) shift; break ;; -- ) shift; break ;;
* ) break ;; * ) break ;;
esac esac
done done
# Treat remaining arguments as commands + options # Treat remaining arguments as commands + options
@ -63,9 +66,41 @@ function ERROR {
LOG "${MSG} $@" LOG "${MSG} $@"
} }
# Determine armada pod # Determine running armada pods, including list of status conditions
POD=$(kubectl get pods -n armada --selector=application=armada \ # This jsonpath gives the following output format per pod:
--output=jsonpath={.items..metadata.name}) # armada-api-bc77f956d-jwl4n::Initialized=True:Ready=True:ContainersReady=True:PodScheduled=True
JSONPATH='{range .items[*]}{"\n"}{@.metadata.name}:{@.metadata.deletionTimestamp}{range @.status.conditions[*]}{":"}{@.type}={@.status}{end}{end}'
ARMADA_PODS=( $(kubectl get pods -n armada \
--selector=application=armada,component=api \
--field-selector status.phase=Running \
--output=jsonpath="${JSONPATH}") )
if [ ${#ARMADA_PODS[@]} -eq 0 ]; then
ERROR "Could not find armada pod."
exit 1
fi
if [ ${DEBUG} == 'true' ]; then
LOG "Found armada pods: ${ARMADA_PODS[@]}"
fi
# Get first available Running and Ready armada pod, with tiller container we can exec
POD=""
for LINE in "${ARMADA_PODS[@]}"; do
# match only Ready pods with nil deletionTimestamp
if [[ $LINE =~ ::.*Ready=True ]]; then
# extract pod name, it is first element delimited by :
A=( ${LINE/:/ } )
P=${A[0]}
else
continue
fi
kubectl exec -it -n armada ${P} -c tiller -- pwd 1>/dev/null 2>/dev/null
RC=$?
if [ ${RC} -eq 0 ]; then
POD=${P}
break
fi
done
if [ -z "${POD}" ]; then if [ -z "${POD}" ]; then
ERROR "Could not find armada pod." ERROR "Could not find armada pod."
exit 1 exit 1
@ -77,7 +112,7 @@ fi
# Determine tiller listen port (configured by armada chart) # Determine tiller listen port (configured by armada chart)
# armada-api is container index 0, tiller is container index 1 # armada-api is container index 0, tiller is container index 1
TILLER_PORT=$(kubectl get pod -n armada ${POD} \ TILLER_PORT=$(kubectl get pod -n armada ${POD} \
--output=jsonpath={.spec.containers[1].ports[0].containerPort}) --output=jsonpath={.spec.containers[1].ports[0].containerPort})
if [ -z "${TILLER_PORT}" ]; then if [ -z "${TILLER_PORT}" ]; then
ERROR "Could not find tiller listen port." ERROR "Could not find tiller listen port."
exit 1 exit 1

View File

@ -9,7 +9,7 @@ URL: https://github.com/kubernetes/helm/releases
Source0: %{name}-v%{version}-linux-amd64.tar.gz Source0: %{name}-v%{version}-linux-amd64.tar.gz
Source1: helm-upload Source1: helm-upload
Source2: helm.sudo Source2: helm.sudo
Source3: helmv2-cli Source3: helmv2-cli.sh
Requires: /bin/bash Requires: /bin/bash