aboutsummaryrefslogtreecommitdiffstats
path: root/kubernetes/helm
diff options
context:
space:
mode:
Diffstat (limited to 'kubernetes/helm')
-rwxr-xr-xkubernetes/helm/plugins/deploy/deploy.sh155
-rwxr-xr-xkubernetes/helm/plugins/undeploy/undeploy.sh2
-rw-r--r--kubernetes/helm/starters/onap-app/README.md4
-rw-r--r--kubernetes/helm/starters/onap-app/templates/NOTES.txt2
4 files changed, 118 insertions, 45 deletions
diff --git a/kubernetes/helm/plugins/deploy/deploy.sh b/kubernetes/helm/plugins/deploy/deploy.sh
index 07455d7db4..9195f161f6 100755
--- a/kubernetes/helm/plugins/deploy/deploy.sh
+++ b/kubernetes/helm/plugins/deploy/deploy.sh
@@ -38,25 +38,10 @@ Flags:
--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 [])
+ --verbose enables full helm install/upgrade output during deploy
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'))
@@ -66,18 +51,47 @@ generate_overrides() {
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
+ | 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
+ if [[ -z "$END" ]]; then
+ cat $COMPUTED_OVERRIDES | sed -n '/^'"$START"'/,/'"$END"'/p' \
+ | sed '1d;$d' | cut -c3- > $SUBCHART_DIR/subchart-overrides.yaml
+ else
+ cat $COMPUTED_OVERRIDES | sed -n '/^'"$START"'/,/^'"$END"'/p' \
+ | sed '1d;$d' | cut -c3- > $SUBCHART_DIR/subchart-overrides.yaml
+ fi
fi
fi
done
}
+resolve_deploy_flags() {
+ flags=($1)
+ n=${#flags[*]}
+ for (( i = 0; i < n; i++ )); do
+ PARAM=${flags[i]}
+ if [[ $PARAM == "-f" || \
+ $PARAM == "--values" || \
+ $PARAM == "--set" || \
+ $PARAM == "--set-string" ]]; then
+ # skip param and its value
+ i=$((i + 1))
+ else
+ DEPLOY_FLAGS="$DEPLOY_FLAGS $PARAM"
+ fi
+ done
+ echo "$DEPLOY_FLAGS"
+}
+
deploy() {
+ # validate params
+ if [[ -z "$1" || -z "$2" ]]; then
+ usage
+ exit 0
+ fi
+
RELEASE=$1
CHART_URL=$2
FLAGS=${@:3}
@@ -86,23 +100,54 @@ deploy() {
CACHE_DIR=~/.helm/plugins/deploy/cache
CHART_DIR=$CACHE_DIR/$CHART_NAME
CACHE_SUBCHART_DIR=$CHART_DIR-subcharts
+ LOG_DIR=$CHART_DIR/logs
+
+ # determine if verbose output is enabled
+ VERBOSE="false"
+ if [[ $FLAGS = *"--verbose"* ]]; then
+ FLAGS="$(echo $FLAGS| sed -n 's/--verbose//p')"
+ VERBOSE="true"
+ fi
+ if [[ $FLAGS = *"--dry-run"* ]]; then
+ VERBOSE="true"
+ FLAGS="$FLAGS --debug"
+ fi
+
# should pass all flags instead
- NAMESPACE="$(echo $FLAGS | sed -n 's/.*\(namespace\).\s*/\1/p' | cut -c10-)"
-
+ NAMESPACE="$(echo $FLAGS | sed -n 's/.*\(namespace\).\s*/\1/p' | cut -c10- | cut -d' ' -f1)"
+
+ # Remove all override values passed in as arguments. These will be used during dry run
+ # to resolve computed override values. Remaining flags will be passed on during
+ # actual upgrade/install of parent and subcharts.
+ DEPLOY_FLAGS=$(resolve_deploy_flags "$FLAGS")
+
+ # determine if upgrading individual subchart or entire parent + subcharts
+ SUBCHART_RELEASE="$(cut -d'-' -f2 <<<"$RELEASE")"
+ if [[ ! -d "$CACHE_SUBCHART_DIR/$SUBCHART_RELEASE" ]]; then
+ SUBCHART_RELEASE=
+ else
+ # update specified subchart without parent
+ RELEASE="$(cut -d'-' -f1 <<<"$RELEASE")"
+ fi
+
# clear previously cached charts
rm -rf $CACHE_DIR
+ # create log driectory
+ mkdir -p $LOG_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}
+ charts=$CHART_DIR/charts/*
+ for subchart in $charts ; do
+ tar xzf ${subchart} -C $CHART_DIR/charts/
done
- rm -rf *.tgz
+ rm -rf $CHART_DIR/charts/*.tgz
else
+ echo "fetching $CHART_URL"
helm fetch $CHART_URL --untar --untardir $CACHE_DIR
fi
@@ -126,29 +171,57 @@ deploy() {
generate_overrides $COMPUTED_OVERRIDES $GLOBAL_OVERRIDES
# upgrade/install parent chart first
- helm upgrade -i $RELEASE $CHART_DIR --namespace $NAMESPACE -f $COMPUTED_OVERRIDES
+ if [[ -z "$SUBCHART_RELEASE" ]]; then
+ LOG_FILE=$LOG_DIR/${RELEASE}.log
+ :> $LOG_FILE
+
+ helm upgrade -i $RELEASE $CHART_DIR $DEPLOY_FLAGS -f $COMPUTED_OVERRIDES \
+ > $LOG_FILE.log 2>&1
- # parse computed overrides - will use to determine if a subchart is "enabled"
- eval $(parse_yaml $COMPUTED_OVERRIDES "computed_")
+ if [[ $VERBOSE == "true" ]]; then
+ cat $LOG_FILE
+ else
+ echo "release \"$RELEASE\" deployed"
+ fi
+ fi
# upgrade/install each "enabled" subchart
- cd $CACHE_SUBCHART_DIR
+ 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
+ SUBCHART_OVERRIDES=$CACHE_SUBCHART_DIR/$subchart/subchart-overrides.yaml
+
+ SUBCHART_ENABLED=0
+ if [[ -f $SUBCHART_OVERRIDES ]]; then
+ SUBCHART_ENABLED=$(cat $SUBCHART_OVERRIDES | grep -c "^enabled: true")
+ fi
+
+ if [[ $SUBCHART_ENABLED -eq 1 ]]; then
+ if [[ -z "$SUBCHART_RELEASE" || $SUBCHART_RELEASE == "$subchart" ]]; then
+ LOG_FILE=$LOG_DIR/"${RELEASE}-${subchart}".log
+ :> $LOG_FILE
+
+ helm upgrade -i "${RELEASE}-${subchart}" $CACHE_SUBCHART_DIR/$subchart \
+ $DEPLOY_FLAGS -f $GLOBAL_OVERRIDES -f $SUBCHART_OVERRIDES \
+ > $LOG_FILE 2>&1
+
+ if [[ $VERBOSE == "true" ]]; then
+ cat $LOG_FILE
+ else
+ echo "release \"${RELEASE}-${subchart}\" deployed"
+ fi
+ fi
+ else
+ array=($(helm ls -q | grep "${RELEASE}-${subchart}"))
+ n=${#array[*]}
+ for (( i = n-1; i >= 0; i-- )); do
+ helm del "${array[i]}" --purge
+ done
fi
done
-}
-if [[ $# < 2 ]]; then
- usage
- exit 0
-fi
+ # report on success/failures of installs/upgrades
+ helm ls | grep FAILED | grep $RELEASE
+}
case "${1:-"help"}" in
"help")
diff --git a/kubernetes/helm/plugins/undeploy/undeploy.sh b/kubernetes/helm/plugins/undeploy/undeploy.sh
index 02b5d34c65..8191174314 100755
--- a/kubernetes/helm/plugins/undeploy/undeploy.sh
+++ b/kubernetes/helm/plugins/undeploy/undeploy.sh
@@ -21,7 +21,7 @@ undeploy() {
RELEASE=$1
FLAGS=$2
- array=($(helm ls -q | grep $RELEASE))
+ array=($(helm ls -q --all | grep $RELEASE))
n=${#array[*]}
for (( i = n-1; i >= 0; i-- ))
do
diff --git a/kubernetes/helm/starters/onap-app/README.md b/kubernetes/helm/starters/onap-app/README.md
index edb0a78197..41d002bdb0 100644
--- a/kubernetes/helm/starters/onap-app/README.md
+++ b/kubernetes/helm/starters/onap-app/README.md
@@ -12,8 +12,8 @@ Helm Charts for specific applications should be moved into the oom/kubernetes
directory. If the application is a common reusable Helm Chart (eg. mariadb), a
more appropriate location might be the oom/kubernetes/common directory.
-Edit each yaml file in the new Helm Chart directoy, substituing real values
-for those inside brackets (eg. `<onap-app>`). Some comments have been provided in
+Edit each yaml file in the new Helm Chart directory, substituting real values
+for those inside brackets (e.g. `<onap-app>`). Some comments have been provided in
the file to help guide changes that need to be made. This starter Helm Chart is
in no way complete. It can serve as the basis for creating a new Helm Chart that
attempts to apply Helm best practices to ONAP applications being configured,
diff --git a/kubernetes/helm/starters/onap-app/templates/NOTES.txt b/kubernetes/helm/starters/onap-app/templates/NOTES.txt
index 4ca95aacbb..649b388bf7 100644
--- a/kubernetes/helm/starters/onap-app/templates/NOTES.txt
+++ b/kubernetes/helm/starters/onap-app/templates/NOTES.txt
@@ -19,7 +19,7 @@
export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.namespace" . }} {{ include "common.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.service.externalPort }}
{{- else if contains "ClusterIP" .Values.service.type }}
- export POD_NAME=$(kubectl get pods --namespace {{ include "common.namespace" . }} -l "app={{ template "so.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ export POD_NAME=$(kubectl get pods --namespace {{ include "common.namespace" . }} -l "app={{ template "common.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:{{ .Values.service.internalPort }}
{{- end }}