--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
+ --set-last-applied set the last-applied-configuration annotation on all objects.This annotation is required to restore services using Ark/Veloro backup restore.
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
+ 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() {
- DEPLOY_FLAGS=$1
- for flag in -f --values --set --set-string
- do
- while true ; do
- # extract value of flag
- length=${#flag}
- length=$((length+1))
- FLAG_VALUE="$(echo $DEPLOY_FLAGS | sed -n 's/.*\('$flag'\).\s*/\1/p' | cut -c$length- | cut -d' ' -f1)"
-
- # purge flag and value from
- DEPLOY_FLAGS="${DEPLOY_FLAGS//$flag $FLAG_VALUE/}"
- DEPLOY_FLAGS=$(echo $DEPLOY_FLAGS | awk '{$1=$1};1')
- if [ -z "$FLAG_VALUE" ] ; then
- break
- fi
- done
+ flags=($1)
+ n=${#flags[*]}
+ for (( i = 0; i < n; i++ )); do
+ PARAM=${flags[i]}
+ if [[ $PARAM = "-f" || \
+ $PARAM = "--values" || \
+ $PARAM = "--set" || \
+ $PARAM = "--set-string" || \
+ $PARAM = "--version" ]]; then
+ # skip param and its value
+ i=$((i + 1))
+ else
+ DEPLOY_FLAGS="$DEPLOY_FLAGS $PARAM"
+ fi
done
echo "$DEPLOY_FLAGS"
}
FLAGS=${@:3}
CHART_REPO="$(cut -d'/' -f1 <<<"$CHART_URL")"
CHART_NAME="$(cut -d'/' -f2 <<<"$CHART_URL")"
- CACHE_DIR=~/.helm/plugins/deploy/cache
+ if [[ $HELM_VER = "v3."* ]]; then
+ CACHE_DIR=~/.local/share/helm/plugins/deploy/cache
+ else
+ CACHE_DIR=~/.helm/plugins/deploy/cache
+ fi
+ echo "Use cache dir: $CACHE_DIR"
CHART_DIR=$CACHE_DIR/$CHART_NAME
CACHE_SUBCHART_DIR=$CHART_DIR-subcharts
LOG_DIR=$CHART_DIR/logs
FLAGS="$(echo $FLAGS| sed -n 's/--verbose//p')"
VERBOSE="true"
fi
+ # determine if delay for deployment is enabled
+ DELAY="false"
+ if [[ $FLAGS = *"--delay"* ]]; then
+ FLAGS="$(echo $FLAGS| sed -n 's/--delay//p')"
+ DELAY="true"
+ fi
+ # determine if set-last-applied flag is enabled
+ SET_LAST_APPLIED="false"
+ if [[ $FLAGS = *"--set-last-applied"* ]]; then
+ FLAGS="$(echo $FLAGS| sed -n 's/--set-last-applied//p')"
+ SET_LAST_APPLIED="true"
+ fi
if [[ $FLAGS = *"--dry-run"* ]]; then
VERBOSE="true"
FLAGS="$FLAGS --debug"
# should pass all flags instead
NAMESPACE="$(echo $FLAGS | sed -n 's/.*\(namespace\).\s*/\1/p' | cut -c10- | cut -d' ' -f1)"
+ VERSION="$(echo $FLAGS | sed -n 's/.*\(version\).\s*/\1/p' | cut -c8- | cut -d' ' -f1)"
+
+ if [ ! -z $VERSION ]; then
+ VERSION="--version $VERSION"
+ fi
+
# 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.
# determine if upgrading individual subchart or entire parent + subcharts
SUBCHART_RELEASE="$(cut -d'-' -f2 <<<"$RELEASE")"
- if [[ ! -d "$CACHE_SUBCHART_DIR/$SUBCHART_RELEASE" ]]; then
+ # update specified subchart without parent
+ RELEASE="$(cut -d'-' -f1 <<<"$RELEASE")"
+ if [[ $SUBCHART_RELEASE = $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
rm -rf $CHART_DIR/charts/*.tgz
else
echo "fetching $CHART_URL"
- helm fetch $CHART_URL --untar --untardir $CACHE_DIR
+ helm fetch $CHART_URL --untar --untardir $CACHE_DIR $VERSION
fi
+ # create log driectory
+ mkdir -p $LOG_DIR
+
# move out subcharts to process separately
mkdir -p $CACHE_SUBCHART_DIR
mv $CHART_DIR/charts/* $CACHE_SUBCHART_DIR/
helm upgrade -i $RELEASE $CHART_DIR $DEPLOY_FLAGS -f $COMPUTED_OVERRIDES \
> $LOG_FILE.log 2>&1
- if [[ $VERBOSE == "true" ]]; then
+ if [[ $VERBOSE = "true" ]]; then
cat $LOG_FILE
else
- echo "release $RELEASE deployed"
+ echo "release \"$RELEASE\" deployed"
+ fi
+ # Add annotation last-applied-configuration if set-last-applied flag is set
+ if [[ $SET_LAST_APPLIED = "true" ]]; then
+ helm get manifest ${RELEASE} \
+ | kubectl apply set-last-applied --create-annotation -n onap -f - \
+ > $LOG_FILE.log 2>&1
fi
fi
- # 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/
+ #“helm ls” is an expensive command in that it can take a long time to execute.
+ #So cache the results to prevent repeated execution.
+ ALL_HELM_RELEASES=$(helm ls -q)
for subchart in * ; do
- VAR="computed_${subchart}_enabled"
- COMMAND="$"$VAR
- eval "SUBCHART_ENABLED=$COMMAND"
- if [[ $SUBCHART_ENABLED == "true" ]]; then
- if [[ -z "$SUBCHART_RELEASE" || $SUBCHART_RELEASE == "$subchart" ]]; then
+ 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
- SUBCHART_OVERRIDES=$CACHE_SUBCHART_DIR/$subchart/subchart-overrides.yaml
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
+ if [[ $VERBOSE = "true" ]]; then
cat $LOG_FILE
else
- echo "release ${RELEASE}-${subchart} deployed"
+ echo "release \"${RELEASE}-${subchart}\" deployed"
+ fi
+ # Add annotation last-applied-configuration if set-last-applied flag is set
+ if [[ $SET_LAST_APPLIED = "true" ]]; then
+ helm get manifest "${RELEASE}-${subchart}" \
+ | kubectl apply set-last-applied --create-annotation -n onap -f - \
+ > $LOG_FILE.log 2>&1
fi
fi
+ if [[ $DELAY = "true" ]]; then
+ echo sleep 3m
+ sleep 3m
+ fi
else
- array=($(helm ls -q | grep "${RELEASE}-${subchart}"))
+ array=($(echo "$ALL_HELM_RELEASES" | grep "${RELEASE}-${subchart}"))
n=${#array[*]}
for (( i = n-1; i >= 0; i-- )); do
- helm del "${array[i]}" --purge
+ if [[ $HELM_VER = "v3."* ]]; then
+ helm del "${array[i]}"
+ else
+ helm del "${array[i]}" --purge
+ fi
done
fi
done
# report on success/failures of installs/upgrades
- helm ls | grep FAILED | grep $RELEASE
+ if [[ $HELM_VER = "v3."* ]]; then
+ helm ls --all-namespaces | grep -i FAILED | grep $RELEASE
+ else
+ helm ls | grep FAILED | grep $RELEASE
+ fi
}
+HELM_VER=$(helm version --template "{{.Version}}")
+echo $HELM_VER
case "${1:-"help"}" in
"help")
;;
esac
-exit 0
\ No newline at end of file
+exit 0