mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 08:41:41 +00:00
189 lines
4.3 KiB
Bash
Executable File
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
|