2021-01-03 18:15:44 +05:30

148 lines
5.3 KiB
Bash

#!/usr/bin/env bash
set -eEu -o functrace
script=$0
function clean() {
EXIT_CODE=0
kubectl get ns ${HT_KUBE_NAMESPACE} ${KUBE_FLAGS} >/dev/null 2>&1 || EXIT_CODE=$?
if [ ${EXIT_CODE} != 0 ]; then
echo "[ERROR] Couldn't find namespace to uninstall. namespace: ${HT_KUBE_NAMESPACE}, context: ${HT_KUBE_CONTEXT}"
exit 1
fi
EXIT_CODE=0
helm get all hypertrace-platform-services ${HELM_FLAGS} >/dev/null 2>&1 || EXIT_CODE=$?
if [ ${EXIT_CODE} == 0 ]; then
echo "[INFO] found existing platform services deployment. running helm uninstall. release: 'hypertrace-platform-services'"
helm uninstall hypertrace-platform-services ${HELM_FLAGS}
else
echo "[INFO] Couldn't find helm release 'hypertrace-platform-services'"
fi
EXIT_CODE=0
helm get all hypertrace-data-services ${HELM_FLAGS} >/dev/null 2>&1 || EXIT_CODE=$?
if [ ${EXIT_CODE} == 0 ]; then
echo "[INFO] found existing data services deployment. running helm uninstall. release: 'hypertrace-data-services'"
helm uninstall hypertrace-data-services ${HELM_FLAGS}
else
echo "[INFO] Couldn't find helm release 'hypertrace-data-services'"
fi
echo "[INFO] We are clean! good to go!"
}
error_report() {
local retval=$?
echo "${script}: Error at line#: $1, command: $2, error code: ${retval}"
exit ${retval}
}
trap 'error_report ${LINENO} ${BASH_COMMAND}' ERR
function usage() {
echo "usage: $script {install|uninstall} [option]"
echo " "
echo "available options:"
echo " "
echo "--clean removes previous deployments of Hypertrace and do clean install"
exit 1
}
HYPERTRACE_HOME="`dirname \"$0\"`"
HYPERTRACE_HOME="`( cd \"${HYPERTRACE_HOME}\" && pwd )`" # absolutized and normalized
HYPERTRACE_CONFIG=${HYPERTRACE_HOME}/config/hypertrace.properties
if [ ! -f "${HYPERTRACE_CONFIG}" ]; then
echo "Configuration file not found: '${HYPERTRACE_CONFIG}'"
fi
source ${HYPERTRACE_CONFIG}
LOG_DIR=${HYPERTRACE_HOME}/logs
LOG_FILE=hypertrace.log
mkdir -p ${LOG_DIR}
if [ x${HT_KUBE_CONTEXT} == "x" ]; then
HT_KUBE_CONTEXT="$(kubectl config current-context)"
fi
HELM_FLAGS="--kube-context=${HT_KUBE_CONTEXT} --namespace=${HT_KUBE_NAMESPACE} --log-dir=${LOG_DIR} --log-file=${LOG_FILE} --log-file-max-size=16 --alsologtostderr=true --logtostderr=false"
KUBE_FLAGS="--context=${HT_KUBE_CONTEXT} --namespace=${HT_KUBE_NAMESPACE} --log-dir=${LOG_DIR} --log-file=${LOG_FILE} --log-file-max-size=16 --alsologtostderr=true --logtostderr=false"
if [[ "$HT_ENABLE_DEBUG" == "true" ]]; then
HELM_FLAGS="$HELM_FLAGS --debug --v=4"
KUBE_FLAGS="$KUBE_FLAGS --v=4"
fi
if [ "$#" -gt 1 ]; then
if [[ $2 == "--clean" ]]; then
clean
else
usage
fi
elif [ "$#" -ne 1 ]; then
echo "[ERROR] Illegal number of parameters"
echo "-------------------------------------"
usage
fi
subcommand=$1; shift
case "$subcommand" in
install)
EXIT_CODE=0;
# namespace - create when it doesn't exists. ignore, otherwise.
kubectl get ns ${HT_KUBE_NAMESPACE} ${KUBE_FLAGS} >/dev/null 2>&1 || EXIT_CODE=$?
if [ ${EXIT_CODE} == 0 ]; then
echo "[WARN] Skipping namespace creation. Namespace already exists. namespace: ${HT_KUBE_NAMESPACE}, context: ${HT_KUBE_CONTEXT}"
else
echo "[INFO] Creating namespace. namespace: ${HT_KUBE_NAMESPACE}, context: ${HT_KUBE_CONTEXT}"
kubectl create ns ${HT_KUBE_NAMESPACE} ${KUBE_FLAGS}
fi
echo "[INFO] cleaning up any helm temporary working directory"
rm -rf ${HYPERTRACE_HOME}/data-services/charts
rm -rf ${HYPERTRACE_HOME}/data-services/tmpcharts
rm -rf ${HYPERTRACE_HOME}/data-services/Chart.lock
rm -rf ${HYPERTRACE_HOME}/platform-services/charts
rm -rf ${HYPERTRACE_HOME}/platform-services/tmpcharts
rm -rf ${HYPERTRACE_HOME}/platform-services/Chart.lock
echo "[INFO] installing hypertrace data services. namespace: ${HT_KUBE_NAMESPACE}, context: ${HT_KUBE_CONTEXT}"
helm dependency update ${HYPERTRACE_HOME}/data-services ${HELM_FLAGS}
helm upgrade hypertrace-data-services ${HYPERTRACE_HOME}/data-services -f ${HYPERTRACE_HOME}/data-services/values.yaml -f ${HYPERTRACE_HOME}/clusters/$HT_PROFILE/values.yaml --install --wait ${HELM_FLAGS} --timeout ${HT_INSTALL_TIMEOUT}m --set htEnv=${HT_ENV}
echo "[INFO] installing hypertrace platform services. namespace: ${HT_KUBE_NAMESPACE}, context: ${HT_KUBE_CONTEXT}"
helm dependency update ${HYPERTRACE_HOME}/platform-services ${HELM_FLAGS}
helm upgrade hypertrace-platform-services ${HYPERTRACE_HOME}/platform-services -f ${HYPERTRACE_HOME}/platform-services/values.yaml -f ${HYPERTRACE_HOME}/clusters/$HT_PROFILE/values.yaml --install ${HELM_FLAGS} --timeout ${HT_INSTALL_TIMEOUT}m --set htEnv=${HT_ENV}
echo "[INFO] Hypertrace installation completed"
;;
uninstall)
echo "[INFO] Uninstalling Hypertrace deletes the hypertrace namespace and deletes any data stored."
echo "Choose an option to continue"
select yn in "Yes" "No"; do
case $yn in
Yes )
clean
kubectl delete ns ${HT_KUBE_NAMESPACE} ${KUBE_FLAGS}
echo "[INFO] Uninstall successful."
break;;
No )
echo "[INFO] Uninstall cancelled."
exit;;
esac
done
;;
*)
echo "[ERROR] Unknown command: ${subcommand}"
usage
;;
esac