Files
kustomize/plugin/someteam.example.com/v1/chartinflator/ChartInflator
Tobias Bradtke 2ce66c0a85 Fix typo
2020-05-03 01:23:46 +02:00

189 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2019 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0
# Helm chart inflator
#
# Reads a file like this
#
# apiVersion: kustomize.config.k8s.io/v1
# kind: ChartInflator
# metadata:
# name: notImportantHere
# chartName: nameOfStableChart
# values: /abs/path/to/local/values/file
# chartHome: /abs/path/local/chart/storage
# chartRelease: (stable|incubator)
# chartVersion: 9.0.1
# helmHome: /abs/path/to/helm/config
# helmBin: /abs/path/to/helmBin
# releaseName: nameOfHelmRelease
# releaseNamespace: namespaceWhereHelmWouldApply
#
# fetches the given chart from stable/$chartName,
# and inflates it to stdout, using the given values file.
#
# chartDir default: $TMP_DIR/charts
#
# Example execution:
# ./plugin/someteam.example.com/v1/ChartInflator configFile.yaml
set -e
# 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" == "chartRepo" ] && chartRepo=$v
[ "$k" == "chartHome" ] && chartHome=$v
[ "$k" == "chartRelease" ] && chartRelease=$v
[ "$k" == "chartVersion" ] && chartVersion=$v
[ "$k" == "values" ] && valuesFile=$v
[ "$k" == "helmHome" ] && helmHome=$v
[ "$k" == "helmBin" ] && helmBin=$v
[ "$k" == "releaseName" ] && releaseName=$v
[ "$k" == "releaseNamespace" ] && releaseNamespace=$v
done <"$file"
# Trim leading space
chartName="${chartName#"${chartName%%[![:space:]]*}"}"
chartRepo="${chartRepo#"${chartRepo%%[![:space:]]*}"}"
chartHome="${chartHome#"${chartHome%%[![:space:]]*}"}"
chartRelease="${chartRelease#"${chartRelease%%[![:space:]]*}"}"
chartVersion="${chartVersion#"${chartVersion%%[![:space:]]*}"}"
valuesFile="${valuesFile#"${valuesFile%%[![:space:]]*}"}"
helmBin="${helmBin#"${helmBin%%[![:space:]]*}"}"
releaseName="${releaseName#"${releaseName%%[![:space:]]*}"}"
releaseNamespace="${releaseNamespace#"${releaseNamespace%%[![: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
# Set default chartRelease to "stable"
if [ -z "$chartRelease" ]; then
chartRelease="stable"
fi
# The repo to pull the chart from
if [ -n "$chartRepo" ]; then
chartRepoArg="--repo=$chartRepo"
chartNameArg="$chartName"
else
chartNameArg="$chartRelease/$chartName"
fi
# Set version only if specified
if [ ! -z "$chartVersion" ]; then
chartVersionArg="--version=$chartVersion"
fi
if [ -z "$helmBin" ]; then
helmBin=helm
fi
if [ -z "$valuesFile" ]; then
valuesFile=$chartHome/$chartName/values.yaml
fi
if [ -z "$releaseName" ]; then
releaseName=release-name
fi
if [ -z "$releaseNamespace" ]; then
releaseNamespace=default
fi
function v2RunHelm {
$helmBin --home $helmHome "$@"
}
function v3RunHelm {
XDG_CONFIG_DIR=$helmHome
$helmBin "$@"
}
function v2InitHelm {
# The init command is extremely chatty
v2RunHelm init --client-only >& /dev/null
}
function v3InitHelm {
# Do nothing - there's no init command in helm v3
true
}
function v2PullChart {
if [ ! -d "$chartHome/$chartName" ]; then
v2RunHelm fetch $chartVersionArg \
$chartRepoArg \
--untar \
--untardir $chartHome \
$chartNameArg
fi
}
function v3PullChart {
if [ ! -d "$chartHome/$chartName" ]; then
v3RunHelm pull $chartVersionArg \
$chartRepoArg \
--untar \
--untardir $chartHome \
$chartNameArg
fi
}
function v2InflateChart {
v2RunHelm template \
--name $releaseName \
--namespace $releaseNamespace \
--values $valuesFile \
$chartHome/$chartName
}
function v3InflateChart {
v3RunHelm template \
--release-name $releaseName \
--namespace $releaseNamespace \
--values $valuesFile \
$chartHome/$chartName
}
HELM_VERSION=$($helmBin version -c --short)
case $HELM_VERSION in
'Client: v2'*)
v2InitHelm
v2PullChart
v2InflateChart
;;
v3*)
v3InitHelm
v3PullChart
v3InflateChart
;;
*)
echo "[!] Unsupported 'helm' version '${HELM_VERSION}'" 1>&2 && exit 1
;;
esac
/bin/rm -rf $TMP_DIR