Merge "[INT] Add driver script for vnf lifecycle validation"
diff --git a/instantiate-k8s.sh b/instantiate-k8s.sh
new file mode 100755
index 0000000..ff730c9
--- /dev/null
+++ b/instantiate-k8s.sh
@@ -0,0 +1,150 @@
+#!/bin/bash
+# Copyright 2019 AT&T Intellectual Property. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+NAMESPACE=
+FOLDER=
+POLL=0
+
+function check_required_parameter() {
+  # arg1 = parameter
+  # arg2 = parameter name
+  if [ -z "$1" ]; then
+    echo "$2 was not was provided. This parameter is required."
+    exit 1
+  fi
+}
+
+function check_optional_paramater() {
+  # arg1 = parameter
+  # arg2 = parameter name
+  if [ -z $1 ]; then
+    echo "$2"
+  else
+    echo "$1"
+  fi
+}
+
+while test $# -gt 0; do
+  case "$1" in
+    -h|--help)
+      echo "./instantiate-k8s.sh [options]"
+      echo " "
+      echo "required:"
+      echo "-n, --namespace <namespace>       namespace that robot pod is running under."
+      echo "-f, --folder <folder>             path to folder containing heat templates, preloads, and vnf-details.json."
+      echo " "
+      echo "additional options:"
+      echo "-p, --poll                        some cloud environments (like azure) have a short time out value when executing"
+      echo "                                  kubectl. If your shell exits before the testsuite finishes, using this option"
+      echo "                                  will poll the testsuite logs every 30 seconds until the test finishes."
+      echo " "
+      echo "This script executes the VNF instantiation robot testsuite."
+      echo "- It copies the VNF folder to the robot container that is part of the ONAP deployment."
+      echo "- It models, distributes, and instantiates a heat-based VNF."
+      echo "- It copies the logs to an output directory, and creates a tarball for upload to the OVP portal."
+      echo ""
+      exit 0
+      ;;
+    -n|--namespace)
+      shift
+      NAMESPACE=$1
+      shift
+      ;;
+    -f|--folder)
+      shift
+      FOLDER=$1
+      shift
+      ;;
+    -p|--poll)
+      shift
+      POLL=1
+      ;;
+    *)
+      echo "Unknown Argument $1. Try running with --help."
+      exit 0
+      ;;
+  esac
+done
+
+check_required_parameter "$NAMESPACE" "--namespace"
+check_required_parameter "$FOLDER" "--folder"
+
+TAG="instantiate_vnf_ovp"
+
+if [ ! -d "$FOLDER" ]; then
+  echo "VNF folder $FOLDER does not exist, exiting."
+  exit 1
+fi
+
+BUILDNUM="$$"
+OUTPUT_DIRECTORY=/tmp/vnfdata.${BUILDNUM}
+
+set -x
+
+POD=$(kubectl --namespace $NAMESPACE get pods | sed 's/ .*//'| grep robot)
+export GLOBAL_BUILD_NUMBER=$(kubectl --namespace $NAMESPACE exec  ${POD}  -- bash -c "ls -1q /share/logs/ | wc -l")
+TAGS="-i $TAG"
+ETEHOME=/var/opt/ONAP
+OUTPUT_FOLDER=$(printf %04d $GLOBAL_BUILD_NUMBER)_ete_instantiate_vnf
+DISPLAY_NUM=$(($GLOBAL_BUILD_NUMBER + 90))
+VARIABLEFILES="-V /share/config/robot_properties.py"
+VARIABLES="$VARIABLES -v GLOBAL_BUILD_NUMBER:${BUILDNUM}"
+
+echo "Copying the VNF folder into robot pod..."
+kubectl --namespace $NAMESPACE cp $FOLDER ${POD}:/tmp/vnfdata.${BUILDNUM}
+
+
+echo "Executing instantiation..."
+
+if [ $POLL = 1 ]; then
+  kubectl --namespace $NAMESPACE exec ${POD} -- bash -c "${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --listener ${ETEHOME}/robot/library/listeners/OVPListener.py --display $DISPLAY_NUM > /tmp/vnf_instantiation.$BUILDNUM.log 2>&1 &" 
+
+  pid=`kubectl --namespace $NAMESPACE exec ${POD} -- bash -c "pgrep runTags.sh -n"` 
+
+  if [ -z "$pid" ]; then
+    echo "robot testsuite unable to start"
+    exit 1
+  fi
+
+  kubectl --namespace $NAMESPACE exec ${POD} -- bash -c "while ps -p \"$pid\" --no-headers | grep -v defunct; do echo \$'\n\n'; echo \"Testsuite still running \"\`date\`; echo \"LOG FILE: \"; tail -10 /tmp/vnf_instantiation.$BUILDNUM.log; sleep 30; done"
+
+else
+  kubectl --namespace $NAMESPACE exec ${POD} -- bash -c "${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --listener ${ETEHOME}/robot/library/listeners/OVPListener.py --display $DISPLAY_NUM" 
+fi
+
+set +x 
+
+echo "testsuite has finished"
+
+mkdir -p "$OUTPUT_DIRECTORY"
+echo "Copying Results from pod..."
+
+kubectl --namespace $NAMESPACE cp ${POD}:share/logs/$OUTPUT_FOLDER/summary/report.json "$OUTPUT_DIRECTORY"/report.json
+kubectl --namespace $NAMESPACE cp ${POD}:share/logs/$OUTPUT_FOLDER/summary/stack_report.json "$OUTPUT_DIRECTORY"/stack_report.json
+kubectl --namespace $NAMESPACE cp ${POD}:share/logs/$OUTPUT_FOLDER/summary/results.json "$OUTPUT_DIRECTORY"/results.json
+kubectl --namespace $NAMESPACE cp ${POD}:share/logs/$OUTPUT_FOLDER/log.html "$OUTPUT_DIRECTORY"/log.html
+
+pushd .
+
+# echo -e "import hashlib\nwith open(\"README.md\", \"r\") as f: bytes = f.read()\nreadable_hash = hashlib.sha256(bytes).hexdigest()\nprint(readable_hash)" | python
+
+cd "$OUTPUT_DIRECTORY"
+tar -czvf vnf_heat_results.tar.gz *
+
+popd
+
+echo "VNF test results: $OUTPUT_DIRECTORY/vnf_heat_results.tar.gz"