deploy.sh does not work on Mac os x because untar directory is created before helm...
[oom.git] / kubernetes / helm / plugins / deploy / deploy.sh
index c92bc6e..bb98a3b 100755 (executable)
@@ -39,6 +39,7 @@ Flags:
       --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
 }
 
@@ -51,7 +52,7 @@ 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
@@ -108,6 +109,18 @@ deploy() {
     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"
@@ -127,21 +140,17 @@ deploy() {
   # actual upgrade/install of parent and subcharts.
   DEPLOY_FLAGS=$(resolve_deploy_flags "$FLAGS")
 
- # determine if upgrading individual subchart or entire parent + 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
@@ -157,6 +166,9 @@ deploy() {
     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/
@@ -189,10 +201,19 @@ deploy() {
     else
       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
 
   # 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
     SUBCHART_OVERRIDES=$CACHE_SUBCHART_DIR/$subchart/subchart-overrides.yaml
 
@@ -215,9 +236,19 @@ deploy() {
         else
           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