2023-10-30 20:23:23 +00:00
|
|
|
#####################################################################
|
|
|
|
|
|
|
|
DEPENDENCIES+=(helm kubeval)
|
|
|
|
REQUIRED_ENV+=()
|
|
|
|
|
|
|
|
use helm/validate
|
2023-12-12 00:07:09 +00:00
|
|
|
use scwrypts
|
2023-10-30 20:23:23 +00:00
|
|
|
|
|
|
|
#####################################################################
|
|
|
|
|
|
|
|
HELM__TEMPLATE__GET() {
|
|
|
|
[ ! $USAGE ] && local USAGE="
|
|
|
|
usage: [...options...] (--) [...helm args...]
|
|
|
|
|
|
|
|
options
|
|
|
|
-t, --template-filename path to a template/*.yaml file of a helm chart
|
|
|
|
|
|
|
|
--colorize use 'bat' to colorize output
|
|
|
|
--raw remove scwrypts-added fluff and only output helm template details
|
|
|
|
|
2023-11-13 23:19:05 +00:00
|
|
|
-h, --help show this help dialogue
|
|
|
|
|
2023-10-30 20:23:23 +00:00
|
|
|
Smart helm-template generator which auto-detects the chart
|
|
|
|
and sample values for testing and developing helm charts.
|
|
|
|
"
|
|
|
|
local HELM_ARGS=()
|
|
|
|
local TEMPLATE_FILENAME TEMPLATE_NAME CHART_ROOT CHART_NAME VALUES_FILES=()
|
|
|
|
local COLORIZE=0 RAW=0 DEBUG=0
|
|
|
|
|
|
|
|
while [[ $# -gt 0 ]]
|
|
|
|
do
|
|
|
|
case $1 in
|
|
|
|
-t | --template-filename ) TEMPLATE_FILENAME="$(SCWRYPTS__GET_REALPATH "$2")"; shift 1 ;;
|
|
|
|
|
|
|
|
--colorize )
|
|
|
|
DEPENDENCIES=(bat) CHECK_ENVIRONMENT || return 1
|
|
|
|
COLORIZE=1
|
|
|
|
;;
|
|
|
|
|
|
|
|
--raw ) RAW=1 ;;
|
2023-11-13 23:19:05 +00:00
|
|
|
|
|
|
|
-h | --help ) USAGE; return 0 ;;
|
2023-10-30 20:23:23 +00:00
|
|
|
-- ) shift 1; break ;;
|
|
|
|
|
2023-11-13 23:19:05 +00:00
|
|
|
|
2023-10-30 20:23:23 +00:00
|
|
|
* ) HELM_ARGS+=($1) ;;
|
|
|
|
esac
|
|
|
|
shift 1
|
|
|
|
done
|
|
|
|
|
|
|
|
while [[ $# -gt 0 ]]; do HELM_ARGS+=($1); shift 1; done
|
|
|
|
|
|
|
|
HELM__VALIDATE
|
|
|
|
CHECK_ERRORS || return 1
|
|
|
|
|
|
|
|
##########################################
|
|
|
|
|
|
|
|
local EXIT_CODE=0
|
|
|
|
local TEMPLATE_OUTPUT DEBUG_OUTPUT
|
|
|
|
[ $USE_CHART_ROOT ] && [[ $USE_CHART_ROOT -eq 1 ]] && {
|
|
|
|
CAPTURE TEMPLATE_OUTPUT DEBUG_OUTPUT helm template "$CHART_ROOT" ${HELM_ARGS[@]} --debug
|
|
|
|
true
|
|
|
|
} || {
|
|
|
|
CAPTURE TEMPLATE_OUTPUT DEBUG_OUTPUT helm template "$CHART_ROOT" ${HELM_ARGS[@]} --debug --show-only "$(echo $TEMPLATE_FILENAME | sed "s|^$CHART_ROOT/||")"
|
|
|
|
}
|
|
|
|
|
|
|
|
[ ! $TEMPLATE_OUTPUT ] && EXIT_CODE=1
|
|
|
|
|
2023-11-22 22:54:16 +00:00
|
|
|
|
2023-10-30 20:23:23 +00:00
|
|
|
[[ $RAW -eq 1 ]] && {
|
|
|
|
[ $USE_CHART_ROOT ] && [[ $USE_CHART_ROOT -eq 1 ]] || HELM_ARGS+=(--show-only $(echo $TEMPLATE_FILENAME | sed "s|^$CHART_ROOT/||"))
|
|
|
|
[[ $COLORIZE -eq 1 ]] \
|
|
|
|
&& helm template "$CHART_ROOT" ${HELM_ARGS[@]} 2>&1 | bat --language yaml --color always \
|
|
|
|
|| helm template "$CHART_ROOT" ${HELM_ARGS[@]} | grep -v '^# Source:.*$' \
|
|
|
|
;
|
|
|
|
|
|
|
|
return $EXIT_CODE
|
|
|
|
}
|
|
|
|
|
|
|
|
[ $TEMPLATE_OUTPUT ] && {
|
|
|
|
KUBEVAL_RAW=$(echo $TEMPLATE_OUTPUT | kubeval --schema-location https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master)
|
|
|
|
true
|
|
|
|
} || {
|
|
|
|
TEMPLATE_OUTPUT="---\nerror: chart or '$(basename $(dirname $TEMPLATE_FILENAME))/$(basename $TEMPLATE_FILENAME)' invalid"
|
|
|
|
KUBEVAL_RAW="no template output; kubeval skipped"
|
|
|
|
|
|
|
|
[ $USE_CHART_ROOT ] && [[ $USE_CHART_ROOT -eq 1 ]] || {
|
|
|
|
DEBUG_OUTPUT="$(helm template "$CHART_ROOT" ${HELM_ARGS[@]} --debug 2>&1 >/dev/null)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TEMPLATE_OUTPUT="$TEMPLATE_OUTPUT
|
|
|
|
---
|
|
|
|
debug: |
|
|
|
|
$(echo $DEBUG_OUTPUT | sed 's/^/ /g')
|
|
|
|
|
|
|
|
kubeval: |
|
|
|
|
$(echo $KUBEVAL_RAW | sed 's/^/ /g')
|
|
|
|
|
|
|
|
lint: |
|
|
|
|
$(helm lint $CHART_ROOT ${HELM_ARGS[@]} 2>&1 | sed 's/^/ /g')
|
|
|
|
"
|
|
|
|
|
|
|
|
[[ $COLORIZE -eq 1 ]] && {
|
|
|
|
echo $TEMPLATE_OUTPUT | bat --language yaml --color always
|
|
|
|
} || {
|
|
|
|
echo $TEMPLATE_OUTPUT
|
|
|
|
}
|
|
|
|
|
|
|
|
return $EXIT_CODE
|
|
|
|
}
|