106 lines
2.8 KiB
Bash
106 lines
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
# Copyright (c) 2020 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
# This script is wrapper to Helm v2 client, providing access to containerized
|
|
# armada/tiller managed charts.
|
|
|
|
# There are two modes of operation:
|
|
# - no command specified: this is an interactive BusyBox shell
|
|
# - command and options specified: this executes a single helm v2 command
|
|
|
|
set -euo pipefail
|
|
|
|
# Define minimal path
|
|
PATH=/bin:/usr/bin:/usr/local/bin
|
|
|
|
# Process input options
|
|
SCRIPT=$(basename $0)
|
|
OPTS=$(getopt -o dh --long debug,help -n ${SCRIPT} -- "$@")
|
|
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
|
|
eval set -- "$OPTS"
|
|
|
|
DEBUG=false
|
|
HELP=false
|
|
while true; do
|
|
case "$1" in
|
|
-d | --debug ) DEBUG=true; shift ;;
|
|
-h | --help ) HELP=true; shift ;;
|
|
-- ) shift; break ;;
|
|
* ) break ;;
|
|
esac
|
|
done
|
|
|
|
# Treat remaining arguments as commands + options
|
|
shift $((OPTIND-1))
|
|
OTHERARGS="$@"
|
|
|
|
if [ ${HELP} == 'true' ]; then
|
|
echo "Usage: ${SCRIPT} [-d|--debug] [-h|--help] -- [command] [options]"
|
|
echo "Options:"
|
|
echo " -d | --debug : display initialization information"
|
|
echo " -h | --help : this help"
|
|
echo
|
|
echo "Command option examples:"
|
|
echo " helmv2-cli -- helm search"
|
|
echo " helmv2-cli -- helm list"
|
|
echo " helmv2-cli -- helm list --namespace openstack --pending"
|
|
exit 0
|
|
fi
|
|
|
|
# Logger setup
|
|
LOG_FACILITY=user
|
|
LOG_PRIORITY=info
|
|
function LOG {
|
|
logger -t "${0##*/}[$$]" -p ${LOG_FACILITY}.${LOG_PRIORITY} "$@"
|
|
echo "${0##*/}[$$]" "$@"
|
|
}
|
|
function ERROR {
|
|
MSG="ERROR"
|
|
LOG "${MSG} $@"
|
|
}
|
|
|
|
# Determine armada pod
|
|
POD=$(kubectl get pods -n armada --selector=application=armada \
|
|
--output=jsonpath={.items..metadata.name})
|
|
if [ -z "${POD}" ]; then
|
|
ERROR "Could not find armada pod."
|
|
exit 1
|
|
fi
|
|
if [ ${DEBUG} == 'true' ]; then
|
|
LOG "Found armada pod: ${POD}"
|
|
fi
|
|
|
|
# Determine tiller listen port (configured by armada chart)
|
|
# armada-api is container index 0, tiller is container index 1
|
|
TILLER_PORT=$(kubectl get pod -n armada ${POD} \
|
|
--output=jsonpath={.spec.containers[1].ports[0].containerPort})
|
|
if [ -z "${TILLER_PORT}" ]; then
|
|
ERROR "Could not find tiller listen port."
|
|
exit 1
|
|
fi
|
|
if [ ${DEBUG} == 'true' ]; then
|
|
LOG "Found tiller listen port: ${TILLER_PORT}"
|
|
fi
|
|
|
|
# Launch BusyBox shell with access to local tiller.
|
|
# Can execute helm v2 commands as '/helm' or 'helm'.
|
|
if [ ${DEBUG} == 'true' ]; then
|
|
LOG "Launching Helm-v2 client"
|
|
fi
|
|
HELM_HOST=":${TILLER_PORT}"
|
|
if [ -z "${OTHERARGS}" ]; then
|
|
# Interactive BusyBox shell
|
|
kubectl exec -it -n armada ${POD} -c tiller -- \
|
|
/bin/sh -c "PATH=${PATH}:/tmp PS1='Helm-v2 \h:\w $ ' HELM_HOST=${HELM_HOST} /bin/sh"
|
|
else
|
|
# Execute single helm v2 command in BusyBox shell
|
|
kubectl exec -n armada ${POD} -c tiller -- \
|
|
/bin/sh -c "PATH=${PATH}:/tmp HELM_HOST=${HELM_HOST} /bin/sh -c '$OTHERARGS'"
|
|
fi
|
|
|
|
exit 0
|