#!/bin/bash set -e # Helm chart inflator # Reads a file like this # # apiVersion: kustomize.config.k8s.io/v1 # kind: ChartInflatorExec # metadata: # name: notImportantHere # chartName: nameOfStableChart # values: /abs/path/to/local/values/file # chartHome: /abs/path/local/chart/storage # helmHome: /abs/path/to/helm/config # helmBin: /abs/path/to/helmBin # # fetches the given chart from stable/$chartName, # and inflates it to stdout, using the given values file. # # chartDir default: $TMP_DIR/charts # chartDir default: # Example execution: # ./plugins/kustomize.config.k8s.io/v1/ChartInflatorExec configFile.yaml # Yaml parsing is a ridiculous thing to do in bash, # but let's try: function parseYaml { local file=$1 while read -r line do local k=${line%:*} local v=${line#*:} [ "$k" == "chartName" ] && chartName=$v [ "$k" == "chartHome" ] && chartHome=$v [ "$k" == "values" ] && valuesFile=$v [ "$k" == "helmHome" ] && helmHome=$v [ "$k" == "helmBin" ] && helmBin=$v done <"$file" # Trim leading space chartName="${chartName#"${chartName%%[![:space:]]*}"}" chartHome="${chartHome#"${chartHome%%[![:space:]]*}"}" valuesFile="${valuesFile#"${valuesFile%%[![:space:]]*}"}" helmBin="${helmBin#"${helmBin%%[![:space:]]*}"}" } TMP_DIR=$(mktemp -d) parseYaml $1 # Where all the files generated by 'helm init' live. if [ -z "$helmHome" ]; then helmHome=$TMP_DIR/dotHelm fi # Where helm charts are unpacked. if [ -z "$chartHome" ]; then chartHome=$TMP_DIR/charts fi if [ -z "$helmBin" ]; then helmBin=helm fi if [ -z "$valuesFile" ]; then valuesFile=$chartHome/$chartName/values.yaml fi function doHelm { $helmBin --home $helmHome $@ } # The init command is extremely chatty doHelm init --client-only >& /dev/null if [ ! -d "$chartHome/$chartName" ]; then doHelm fetch --untar \ --untardir $chartHome \ stable/$chartName fi doHelm template \ --values $valuesFile \ $chartHome/$chartName /bin/rm -rf $TMP_DIR