summaryrefslogtreecommitdiffstats
path: root/kubernetes/helm
diff options
context:
space:
mode:
Diffstat (limited to 'kubernetes/helm')
-rwxr-xr-xkubernetes/helm/plugins/deploy/deploy.sh168
-rw-r--r--kubernetes/helm/plugins/deploy/plugin.yaml7
-rw-r--r--kubernetes/helm/plugins/undeploy/plugin.yaml7
-rwxr-xr-xkubernetes/helm/plugins/undeploy/undeploy.sh52
4 files changed, 234 insertions, 0 deletions
diff --git a/kubernetes/helm/plugins/deploy/deploy.sh b/kubernetes/helm/plugins/deploy/deploy.sh
new file mode 100755
index 0000000000..07455d7db4
--- /dev/null
+++ b/kubernetes/helm/plugins/deploy/deploy.sh
@@ -0,0 +1,168 @@
+#!/bin/bash
+
+usage() {
+cat << EOF
+Install (or upgrade) an umbrella Helm Chart, and its subcharts, as separate Helm Releases
+
+The umbrella Helm Chart is broken apart into a parent release and subchart releases.
+Subcharts the are disabled (<chart>.enabled=false) will not be installed or upgraded.
+All releases are grouped and deployed within the same namespace.
+
+
+The deploy arguments must be a release and chart. The chart
+argument can be either: a chart reference('stable/onap'), a path to a chart directory,
+a packaged chart, or a fully qualified URL. For chart references, the latest
+version will be specified unless the '--version' flag is set.
+
+To override values in a chart, use either the '--values' flag and pass in a file
+or use the '--set' flag and pass configuration from the command line, to force string
+values, use '--set-string'.
+
+You can specify the '--values'/'-f' flag multiple times. The priority will be given to the
+last (right-most) file specified. For example, if both myvalues.yaml and override.yaml
+contained a key called 'Test', the value set in override.yaml would take precedence:
+
+ $ helm deploy demo ./onap --namespace onap -f openstack.yaml -f overrides.yaml
+
+You can specify the '--set' flag multiple times. The priority will be given to the
+last (right-most) set specified. For example, if both 'bar' and 'newbar' values are
+set for a key called 'foo', the 'newbar' value would take precedence:
+
+ $ helm deploy demo local/onap --namespace onap -f overrides.yaml --set log.enabled=false --set vid.enabled=false
+
+Usage:
+ helm deploy [RELEASE] [CHART] [flags]
+
+Flags:
+ --namespace string namespace to install the release into. Defaults to the current kube config namespace.
+ --set stringArray set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
+ --set-string stringArray set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
+ -f, --values valueFiles specify values in a YAML file or a URL(can specify multiple) (default [])
+EOF
+}
+
+parse_yaml() {
+ local prefix=$2
+ local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
+ sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
+ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
+ awk -F$fs '{
+ indent = length($1)/2;
+ vname[indent] = $2;
+ for (i in vname) {if (i > indent) {delete vname[i]}}
+ if (length($3) > 0) {
+ vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
+ printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
+ }
+ }'
+}
+
+generate_overrides() {
+ SUBCHART_NAMES=($(cat $COMPUTED_OVERRIDES | grep -v '^\s\s'))
+
+ for index in "${!SUBCHART_NAMES[@]}"; do
+ START=${SUBCHART_NAMES[index]}
+ END=${SUBCHART_NAMES[index+1]}
+ if [[ $START == "global:" ]]; then
+ echo "global:" > $GLOBAL_OVERRIDES
+ cat $COMPUTED_OVERRIDES | sed '/common:/,/consul:/d' \
+ | sed -n '/'"$START"'/,/'log:'/p' | sed '1d;$d' >> $GLOBAL_OVERRIDES
+ else
+ SUBCHART_DIR="$CACHE_SUBCHART_DIR/$(cut -d':' -f1 <<<"$START")"
+ if [[ -d "$SUBCHART_DIR" ]]; then
+ cat $COMPUTED_OVERRIDES | sed -n '/'"$START"'/,/'"$END"'/p' \
+ | sed '1d;$d' | cut -c3- > $SUBCHART_DIR/subchart-overrides.yaml
+ fi
+ fi
+ done
+}
+
+deploy() {
+ RELEASE=$1
+ CHART_URL=$2
+ FLAGS=${@:3}
+ CHART_REPO="$(cut -d'/' -f1 <<<"$CHART_URL")"
+ CHART_NAME="$(cut -d'/' -f2 <<<"$CHART_URL")"
+ CACHE_DIR=~/.helm/plugins/deploy/cache
+ CHART_DIR=$CACHE_DIR/$CHART_NAME
+ CACHE_SUBCHART_DIR=$CHART_DIR-subcharts
+ # should pass all flags instead
+ NAMESPACE="$(echo $FLAGS | sed -n 's/.*\(namespace\).\s*/\1/p' | cut -c10-)"
+
+ # clear previously cached charts
+ rm -rf $CACHE_DIR
+
+ # fetch umbrella chart (parent chart containing subcharts)
+ if [[ -d "$CHART_URL" ]]; then
+ mkdir -p $CHART_DIR
+ cp -R $CHART_URL/* $CHART_DIR/
+
+ cd $CHART_DIR/charts/
+ for subchart in * ; do
+ tar xzf ${subchart}
+ done
+ rm -rf *.tgz
+ else
+ helm fetch $CHART_URL --untar --untardir $CACHE_DIR
+ fi
+
+ # move out subcharts to process separately
+ mkdir -p $CACHE_SUBCHART_DIR
+ mv $CHART_DIR/charts/* $CACHE_SUBCHART_DIR/
+ # temp hack - parent chart needs common subchart
+ mv $CACHE_SUBCHART_DIR/common $CHART_DIR/charts/
+
+ # disable dependencies
+ rm $CHART_DIR/requirements.lock
+ mv $CHART_DIR/requirements.yaml $CHART_DIR/requirements.deploy
+
+ # compute overrides for parent and all subcharts
+ COMPUTED_OVERRIDES=$CACHE_DIR/$CHART_NAME/computed-overrides.yaml
+ helm upgrade -i $RELEASE $CHART_DIR $FLAGS --dry-run --debug \
+ | sed -n '/COMPUTED VALUES:/,/HOOKS:/p' | sed '1d;$d' > $COMPUTED_OVERRIDES
+
+ # extract global overrides to apply to parent and all subcharts
+ GLOBAL_OVERRIDES=$CHART_DIR/global-overrides.yaml
+ generate_overrides $COMPUTED_OVERRIDES $GLOBAL_OVERRIDES
+
+ # upgrade/install parent chart first
+ helm upgrade -i $RELEASE $CHART_DIR --namespace $NAMESPACE -f $COMPUTED_OVERRIDES
+
+ # parse computed overrides - will use to determine if a subchart is "enabled"
+ eval $(parse_yaml $COMPUTED_OVERRIDES "computed_")
+
+ # upgrade/install each "enabled" subchart
+ cd $CACHE_SUBCHART_DIR
+ for subchart in * ; do
+ VAR="computed_${subchart}_enabled"
+ COMMAND="$"$VAR
+ eval "SUBCHART_ENABLED=$COMMAND"
+ if [[ $SUBCHART_ENABLED == "true" ]]; then
+ SUBCHART_OVERRIDES=$CACHE_SUBCHART_DIR/$subchart/subchart-overrides.yaml
+ helm upgrade -i "${RELEASE}-${subchart}" $CACHE_SUBCHART_DIR/$subchart \
+ --namespace $NAMESPACE -f $GLOBAL_OVERRIDES -f $SUBCHART_OVERRIDES
+ fi
+ done
+}
+
+if [[ $# < 2 ]]; then
+ usage
+ exit 0
+fi
+
+case "${1:-"help"}" in
+ "help")
+ usage
+ ;;
+ "--help")
+ usage
+ ;;
+ "-h")
+ usage
+ ;;
+ *)
+ deploy $1 $2 ${@:3}
+ ;;
+esac
+
+exit 0 \ No newline at end of file
diff --git a/kubernetes/helm/plugins/deploy/plugin.yaml b/kubernetes/helm/plugins/deploy/plugin.yaml
new file mode 100644
index 0000000000..fc7f7d0f88
--- /dev/null
+++ b/kubernetes/helm/plugins/deploy/plugin.yaml
@@ -0,0 +1,7 @@
+name: "deploy"
+version: "1.0.0"
+usage: "install (upgrade if release exists) parent chart and subcharts as separate
+but related releases"
+description: "install (upgrade if release exists) parent charty and all subcharts as separate
+but related releases"
+command: "$HELM_PLUGIN_DIR/deploy.sh" \ No newline at end of file
diff --git a/kubernetes/helm/plugins/undeploy/plugin.yaml b/kubernetes/helm/plugins/undeploy/plugin.yaml
new file mode 100644
index 0000000000..02999fd04c
--- /dev/null
+++ b/kubernetes/helm/plugins/undeploy/plugin.yaml
@@ -0,0 +1,7 @@
+name: "undeploy"
+version: "1.0.0"
+usage: "delete parent chart and subcharts that were deployed as separate
+releases"
+description: "delete parent chart and subcharts that were deployed as separate
+releases"
+command: "$HELM_PLUGIN_DIR/undeploy.sh" \ No newline at end of file
diff --git a/kubernetes/helm/plugins/undeploy/undeploy.sh b/kubernetes/helm/plugins/undeploy/undeploy.sh
new file mode 100755
index 0000000000..02b5d34c65
--- /dev/null
+++ b/kubernetes/helm/plugins/undeploy/undeploy.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+usage() {
+cat << EOF
+Delete an umbrella Helm Chart, and its subcharts, that was previously deployed using 'Helm deploy'.
+
+Example of deleting all Releases that have the prefix 'demo'.
+ $ helm undeploy demo
+
+ $ helm undeploy demo --purge
+
+Usage:
+ helm undeploy [RELEASE] [flags]
+
+Flags:
+ --purge remove the releases from the store and make its name free for later use
+EOF
+}
+
+undeploy() {
+ RELEASE=$1
+ FLAGS=$2
+
+ array=($(helm ls -q | grep $RELEASE))
+ n=${#array[*]}
+ for (( i = n-1; i >= 0; i-- ))
+ do
+ helm del "${array[i]}" $FLAGS
+ done
+}
+
+if [[ $# < 1 ]]; then
+ echo "Error: command 'undeploy' requires a release name"
+ exit 0
+fi
+
+case "${1:-"help"}" in
+ "help")
+ usage
+ ;;
+ "--help")
+ usage
+ ;;
+ "-h")
+ usage
+ ;;
+ *)
+ undeploy $1 ${@:2}
+ ;;
+esac
+
+exit 0 \ No newline at end of file