#!/bin/bash
################################################################################
#   Copyright (c) 2020 AT&T Intellectual Property.                             #
#                                                                              #
#   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.                                             #
################################################################################

echo "===> Starting at $(date)"

# to run in backgroudn nohup:
#   nohup bash -c "./install && date"  &


# where this scrpt is located
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
# where we are when starting
STARTDIR="$(pwd)"

if [ "$1" == "initlocalrepo" ]; then
  echo && echo "===> Initialize local Helm repo"
  rm -rf ~/.helm && helm init -c  # without this step helm serve may not work.
  helm serve &
  helm repo add local http://127.0.0.1:8879
fi

echo && echo "===> Cleaning up any previous deployment"
echo "======> Deleting all Helm deployments"
helm list | sed -e 1d | cut -f1 | xargs helm delete --purge

echo "======> Clearing out all ONAP deployment resources"
kubectl delete ns onap
kubectl get pv --all-namespaces |cut -f1 -d' ' |xargs kubectl delete pv 
kubectl get clusterrolebindings | grep onap | cut -f1 -d' '  |xargs kubectl delete clusterrolebindings 
rm -rf /dockerdata-nfs

echo "======> Clearing out all RICAUX deployment resources"
kubectl delete ns ricaux
kubectl delete ns ricinfra
rm -rf /opt/data/dashboard-data

echo "======> Clearing out all NONRTRIC deployment resources"
kubectl delete ns nonrtric

echo "======> Preparing for redeployment"
mkdir -p /dockerdata-nfs
mkdir -p /opt/data/dashboard-data
kubectl label --overwrite nodes "$(hostname)" local-storage=enable
kubectl label --overwrite nodes "$(hostname)" aaf-storage=enable
kubectl label --overwrite nodes "$(hostname)" portal-storage=enable

echo "======> Preparing working directory"
mkdir -p smo-deploy
cd smo-deploy
WORKINGDIR=$(pwd)
CURDIR="$(pwd)"


echo && echo "===> Deploying OAM (ONAP Lite)"
if [ ! -d smo-oom ]
then
  echo "======> Building ONAP helm charts.  !! This will take very long time (hours)."
  cat << EOF >> override-oam.yaml
global:
  aafEnabled: false
  masterPassword: Berlin1234!
cassandra:
  enabled: false
mariadb-galera:
  enabled: true
aaf:
  enabled: false
aai:
  enabled: false
appc:
  enabled: false
clamp:
  enabled: false
cli:
  enabled: false
consul:
  enabled: true
contrib:
  enabled: false
dcaegen2:
  enabled: false
dmaap:
  enabled: true
  message-router:
    enabled: true
  dmaap-bc:
    enabled: false
  dmaap-dr-node:
    enabled: false
  dmaap-dr-prov:
    enabled: false
esr:
  enabled: false
log:
  enabled: false
sniro-emulator:
  enabled: false
oof:
  enabled: false
msb:
  enabled: true
multicloud:
  enabled: false
nbi:
  enabled: false
policy:
  enabled: false
pomba:
  enabled: false
portal:
  enabled: false
robot:
  enabled: false
sdc:
  enabled: false
sdnc:
  enabled: true
  replicaCount: 1
  config:
    sdnr:
      sdnrwt: true 
      sdnronly: true
      sdnrmode: dm
      mountpointRegistrarEnabled: true
      mountpointStateProviderEnabled: true
  cds:
    enabled: false
  dmaap-listener:
    enabled: true
  ueb-listener:
    enabled: false
  sdnc-portal:
    enabled: false
  sdnc-ansible-server:
    enabled: false
  dgbuilder:
    enabled: false
  sdnc-web:
    enabled: false
so:
  enabled: false
uui:
  enabled: false
vfc:
  enabled: false
vid:
  enabled: false
vnfsdk:
  enabled: false
modeling:
  enabled: false
EOF

  git clone -b frankfurt http://gerrit.onap.org/r/oom --recurse-submodules smo-oom
  cd smo-oom
  REPOROOTDIR=$(git rev-parse --show-toplevel)
  git fetch "https://gerrit.onap.org/r/oom" refs/changes/31/106331/6 && git checkout FETCH_HEAD
  # HEAD is now at 275f7de9 [SDNC] oom for clustered disaggregated SDN-R
  cp -R ./kubernetes/helm/plugins/ ~/.helm

  cd kubernetes
  make all; make onap
  # take a coffee
  # should see 35 charts
  helm search onap

  cd $WORKINGDIR
fi

echo "======> Deploying ONAP-lite"
helm deploy dev local/onap --namespace onap -f ./override-oam.yaml

echo "======> Waiting for ONAP-lite to reach operatoinal state"
NUM_SDNR_RUNNING_PODS="0"
NUM_MR_RUNNING_PODS="0"

while [ "$NUM_MR_RUNNING_PODS" -lt "7" ] || [ "$NUM_SDNR_RUNNING_PODS" -lt "7" ]
do
  sleep 5
  NUM_SDNR_RUNNING_PODS=$(kubectl get pods --all-namespaces | grep "sdn[\/0-9a-z \-]*Running" | wc -l)
  NUM_SDNC_COMPLETED_JOBS=$(kubectl get pods --all-namespaces | grep "sdn[\/0-9a-z \-]*Completed" | wc -l)
  NUM_MR_RUNNING_PODS=$(kubectl get pods --all-namespaces | grep "message-router[\/0-9a-z \-]*Running" | wc -l)

  echo "${NUM_SDNR_RUNNING_PODS}/7 SDNC-SDNR pods and ${NUM_MR_RUNNING_PODS}/7 Message Router pods running"
done


echo && echo "===> Deploy NONRTRIIC"
git clone http://gerrit.o-ran-sc.org/r/it/dep smo-dep
cd smo-dep
REPOROOTDIR=$(git rev-parse --show-toplevel)

cd bin
./deploy-nonrtric -f ${REPOROOTDIR}/RECIPE_EXAMPLE/NONRTRIC/example_recipe.yaml 
echo "======> Waiting for NONRTRIC to reach operatoinal state"
NUM_A1C_RUNNING_PODS="0"
NUM_A1SIM_RUNNING_PODS="0"
NUM_CP_RUNNING_PODS="0"
NUM_DB_RUNNING_PODS="0"
NUM_PMS_RUNNING_PODS="0"

while [ "$NUM_A1C_RUNNING_PODS" -lt "1" ] || [ "$NUM_CP_RUNNING_PODS" -lt "1" ] || \
      [ "$NUM_DB_RUNNING_PODS" -lt "1" ]|| [ "$NUM_PMS_RUNNING_PODS" -lt "1" ] || \
      [ "$NUM_A1SIM_RUNNING_PODS" -lt "4" ]
do
  sleep 5
  NUM_A1C_RUNNING_PODS=$(kubectl get pods -n nonrtric | grep "a1controller[\/0-9a-z \-]*Running" | wc -l)
  NUM_A1SIM_RUNNING_PODS=$(kubectl get pods -n nonrtric | grep "a1-sim[\/0-9a-z \-]*Running" | wc -l)
  NUM_CP_RUNNING_PODS=$(kubectl get pods -n nonrtric  | grep "controlpanel[\/0-9a-z \-]*Running" | wc -l)
  NUM_DB_RUNNING_PODS=$(kubectl get pods -n nonrtric  | grep "db[\/0-9a-z \-]*Running" | wc -l)
  NUM_PMS_RUNNING_PODS=$(kubectl get pods -n nonrtric  | grep "policymanagementservice[\/0-9a-z \-]*Running" | wc -l)

  echo "${NUM_A1C_RUNNING_PODS}/1 A1Controller pods, ${NUM_CP_RUNNING_PODS}/1 ControlPanel pods, "
  echo "${NUM_DB_RUNNING_PODS}/1 DB pods, ${NUM_PMS_RUNNING_PODS}/1 PolicyManagementService pods, "
  echo "and ${NUM_A1SIM_RUNNING_PODS}/4 A1Sim pods  running"
done



echo && echo "===> Deploying VES collector and its ingress"
kubectl create ns ricinfra

cd ${REPOROOTDIR}/ric-aux/helm/infrastructure
helm dep update
cd ..
helm install -f ${REPOROOTDIR}/RECIPE_EXAMPLE/AUX/example_recipe.yaml --name bronze-infra --namespace ricaux ./infrastructure

cd ${REPOROOTDIR}/ric-aux/helm/ves
helm dep update
cd ..
helm install -f ${REPOROOTDIR}/RECIPE_EXAMPLE/AUX/example_recipe.yaml --name bronze-ves --namespace ricaux ./ves


# edit RECIPE_EXAMPLE/AUX/example_recipe.yaml file
#./bin/prepare-common-templates
#cd ric-aux/bin
#./install -f ${REPOROOTDIR}/RECIPE_EXAMPLE/AUX/example_recipe.yaml -c "ves"

cd $STARTDIR
kubectl get pods --all-namespaces

echo "===> Completing at $(date)"
