#!/bin/bash
################################################################################
#   Copyright (c) 2019 AT&T Intellectual Property.                             #
#   Copyright (c) 2019 Nokia.                                                  #
#                                                                              #
#   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 script deploys RIC platform components automatically

if [ "$#" -eq 1 ]; then
    OVERRIDEYAML=$1
else

    while [ -n "$1" ]; do # while loop starts

        case "$1" in

        -f) OVERRIDEYAML=$2
            shift
            ;;
        *) echo "Option $1 not recognized" ;; # In case you typed a different option other than a,b,c

        esac

        shift

    done
fi


if [ -z "$OVERRIDEYAML" ];then
    echo "****************************************************************************************************************"
    echo "                                                     ERROR                                                      "
    echo "****************************************************************************************************************"
    echo "RIC deployment without deployment recipe is currently disabled. Please specify an recipe with the -f option."
    echo "****************************************************************************************************************"
    exit 1
fi



ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"

# Start Helm local repo if there isn't one
HELM_REPO_PID=$(ps -x | grep  "helm serve" | grep -v "grep" | awk '{print $1}')
if [ -z "$HELM_REPO_PID" ]; then
    nohup helm serve >& /dev/null &
fi

# Package ric-common and serve it using Helm local repo
HELM_HOME=$(helm home)
COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/ric-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/ric-common
cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $HELM_HOME/repository/local/
helm repo index $HELM_HOME/repository/local/


# Make sure that helm local repo is added
helm repo remove local
helm repo add local http://127.0.0.1:8879/charts



$ROOT_DIR/../ric-dep/bin/install -f $OVERRIDEYAML




