#!/bin/bash
#   Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
#
#   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.

function usage(){
    echo -e "usage: $0 [OPTIONS]"
    echo -e "Install OSM from source code"
    echo -e "  OPTIONS"
    echo -e "     --uninstall:   uninstall OSM: remove the containers and delete NAT rules"
    echo -e "     --develop:     install OSM from source code using the master branch"
    echo -e "     --nat:         install only NAT rules"
    echo -e "     -h / --help:   print this help"
}

UNINSTALL=""
DEVELOP=""
NAT=""
while getopts ":h-:" o; do
    case "${o}" in
        h)
            usage && exit 0
            ;;
        -)
            [ "${OPTARG}" == "help" ] && usage && exit 0
            [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
            [ "${OPTARG}" == "uninstall" ] && UNINSTALL="y" && continue
            [ "${OPTARG}" == "nat" ] && NAT="y" && continue
            echo -e "Invalid option: '--$OPTARG'\n" >&2
            usage && exit 1
            ;;
        \?)
            echo -e "Invalid option: '-$OPTARG'\n" >&2
            usage && exit 1
            ;;
        *)
            usage && exit 1
            ;;
    esac
done

echo -e "\nCreating temporary dir for OSM installation"
TEMPDIR="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
trap 'rm -rf "$TEMPDIR"' EXIT

echo -e "\nCloning devops repo temporarily"
git clone https://osm.etsi.org/gerrit/osm/devops.git $TEMPDIR
RC_CLONE=$?

OSM_DEVOPS=$TEMPDIR

if [ -n "$UNINSTALL" ]; then
    if $RC_CLONE; then
        $OSM_DEVOPS/jenkins/host/clean_container RO
        $OSM_DEVOPS/jenkins/host/clean_container VCA
        $OSM_DEVOPS/jenkins/host/clean_container SO
        #$OSM_DEVOPS/jenkins/host/clean_container UI
    else
        lxc stop RO && lxc delete RO
        lxc stop VCA && lxc delete VCA
        lxc stop SO-ub && lxc delete SO-ub
    fi
    exit 0
fi

if [ -n "$NAT" ]; then
    $OSM_DEVOPS/installers/nat-osm || FATAL "Failed to run nat-osm"
fi

#Installation starts here
echo -e "\nInstalling required packages: git, wget, curl, tar"
echo -e "\n   Required root privileges"
sudo apt install -y git wget curl tar

echo -e "\nCreating the containers and building ..."
. $OSM_DEVOPS/jenkins/common/all_funcs
$OSM_DEVOPS/jenkins/host/start_build RO
$OSM_DEVOPS/jenkins/host/start_build VCA
$OSM_DEVOPS/jenkins/host/start_build SO
$OSM_DEVOPS/jenkins/host/start_build UI

#Configure NAT rules
echo -e "\nConfiguring NAT rules"
echo -e "\n   Required root privileges"
sudo $OSM_DEVOPS/installers/nat-osm

#Configure components
# TO BE DONE
echo -e "\nConfiguring components"
. $OSM_DEVOPS/installers/export_ips

echo -e "\n       Configuring RO"
#RO_TENANT_ID=`lxc exec RO -- openmano tenant-create osm |awk '{print $1}'`

echo -e "\n       Configuring VCA"
#JUJU_PASSWD=`date +%s | sha256sum | base64 | head -c 32`
#lxc exec VCA -- juju change-user-password $JUJUPASSWD
#JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`

echo -e "\n       Configuring SO"
#sudo route add -net $JUJU_CONTROLLER_IP/32 gw $VCA_CONTAINER_IP
#lxc exec SO-ub -- sudo -H /usr/rift/rift-shell -r -i /usr/rift -a /usr/rift/.artifacts -- ./demos/launchpad.py --use-xml-mode --test-name "launchpad"
#sleep 2
#lxc exec SO-ub -- resource-orchestrator name openmano account-type openmano openmano host $RO_CONTAINER_IP tenant-id $RO_TENANT_ID port 9090
#lxc exec SO-ub -- config-agent account juju account-type juju juju ip-address $JUJU_CONTROLLER_IP port 17070 user admin secret $JUJU_PASSWD

echo "\nDONE"


