#!/bin/bash

##
# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
# This file is part of openvim
# 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.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact with: nfvlabs@tid.es
##

#This script can be used as a basic test of openvim 
#stopping on an error
#WARNING: It destroy the database content

DIRNAME=$(readlink -f ${BASH_SOURCE[0]})
DIRNAME=$(dirname $DIRNAME )

function usage(){
    echo -e "usage: ${BASH_SOURCE[0]} [OPTIONS] <action>\n  Deletes openvim content and add fake hosts, networks"
    echo -e "  <action> is a list of the following items (by default 'reset create')"
    echo -e "    reset     reset the openvim database content"
    echo -e "    create    creates fake hosts and networks"
    echo -e "    delete    delete created items"
    echo -e "    delete-all delete vms. flavors, images, ..."
    echo -e "  OPTIONS:"
    echo -e "    -f --force : does not prompt for confirmation"
    echo -e "    -d --delete : same to action delete-all"
    echo -e "    -p --port PORT : port to start openvim service"
    echo -e "    -P --admin-port PORT : administrator port to start openvim service"
    echo -e "    --screen-name NAME : screen name to launch openvim (default vim)"
    echo -e "    --dbname NAME : database name to use (default vim_db)"
    echo -e "    --insert-bashrc  insert the created tenant variables at"
    echo -e "                     ~/.bashrc to be available by openvim CLI"
    echo -e "    -h --help  : shows this help"
}

function is_valid_uuid(){
    echo "$1" | grep -q -E '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$' && return 0
    return 1
}


#detect if is called with a source to use the 'exit'/'return' command for exiting
[[ ${BASH_SOURCE[0]} != $0 ]] && _exit="return" || _exit="exit"


#process options
source ${DIRNAME}/get-options.sh \
    "force:f delete:d delete-all port:p= admin-port:P= screen-name= help:h dbname= insert-bashrc" $* || $_exit 1

#check correct arguments
action_list=""
for param in $params
do
    if [[ "$param" == reset ]] || [[ "$param" == create ]] || [[ "$param" == delete ]] || [[ "$param" == delete-all ]]
    then
        action_list="$action_list $param"
        continue
    else
        echo "invalid argument '$param'?  Type -h for help" >&2 && $_exit 1
    fi
done

#help
[[ -n "$option_help" ]] && usage   && $_exit 0

#check numeric values for port
[[ -n "$option_port" ]] && ( [[ "$option_port" -lt 1 ]] || [[ "$option_port" -gt 65535 ]] ) &&
    echo "Option '-p' or '--port' requires a valid numeric argument" >&2  && $_exit 1
[[ -n "$option_admin_port" ]]  && ( [[ "$option_admin_port" -lt 1 ]] || [[ "$option_admin_port" -gt 65535 ]] ) &&
    echo "Option '-P' or '--admin-port' requieres a valid numeric argument"  >&2 && $_exit 1

[[ -n "$option_screen_name" ]] && screen_name="$option_screen_name" && screen_name_param=" --screen-name $screen_name"
[[ -z "$option_screen_name" ]] && screen_name=vim                   && screen_name_param="" #default value

[[ -n "$option_delete" ]] &&   action_list="delete-all $action_list"

openvim_param=" --"
[[ -n "$option_port" ]]       && openvim_param="$openvim_param -p $option_port"
[[ -n "$option_admin_port" ]] && openvim_param="$openvim_param -P $option_admin_port"
[[ -n "$option_dbname" ]]     && openvim_param="$openvim_param --dbname $option_dbname"
[[ $openvim_param = " --" ]]  && openvim_param=""
db_name=vim_db  #default value 
[[ -n "$option_dbname" ]]     && db_name="$option_dbname"

DIRNAME=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
DIRvim=$(dirname $DIRNAME)
export OPENVIM_HOST=localhost
[[ -n "$option_port" ]]       && export OPENVIM_PORT=$option_port
[[ -n "$option_admin_port" ]] && export OPENVIM_ADMIN_PORT=$option_admin_port

[[ -n "$option_insert_bashrc" ]] && echo -e "\nexport OPENVIM_HOST=localhost"  >> ~/.bashrc
[[ -n "$option_insert_bashrc" ]] && echo -e "\nexport OPENVIM_PORT=9080"  >> ~/.bashrc
#by default action should be reset and create
[[ -z "$action_list" ]]  && action_list="reset create"


for action in $action_list
do
if [[ $action == "reset" ]]
then
    #ask for confirmation if argument is not -f --force
    force_="y"
    [[ -z "$option_force" ]] && read -e -p "WARNING: openvim database content will be lost!!!  Continue(y/N)" force_
    [[ $force_ != y ]] && [[ $force_ != yes ]] && echo "aborted!" && $_exit
    echo "deleting deployed vm"
    ${DIRvim}/openvim vm-delete -f | grep -q deleted && sleep 10 #give some time to get virtual machines deleted
    echo "Stopping openvim${screen_name_param}${openvim_param}"
    $DIRNAME/service-openvim stop${screen_name_param}${openvim_param}
    echo "Initializing databases $db_name"
    $DIRvim/database_utils/init_vim_db.sh -u vim -p vimpw -d $db_name
    echo "Starting openvim${screen_name_param}${openvim_param}"
    $DIRNAME/service-openvim start${screen_name_param}${openvim_param}

elif [[ $action == delete-all ]] 
then
    for t in `${DIRvim}/openvim tenant-list |
        awk '/^ *[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12} +/{printf("%s:%s",$1,$2)}'`
    do
        t_id=${t%%:*}
        t_name=${t#*:}
        [[ -z $t_id ]] && continue 
        export OPENVIM_TENANT=${t_id}
        for what in vm image flavor port net
        do
            items=`${DIRvim}/openvim $what-list | awk '/^ *[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12} +/{print $1}'`
            if [[ -n $items ]]
            then 
                [[ $option_force == "-" ]] && echo deleting openvim ${what}s from tenant ${t_name}
                [[ $option_force != "-" ]] && read -e -p "Delete openvim ${what}s from tenant ${t_name}?(y/N) " force_
                [[ $force_ != y ]] && [[ $force_ != yes ]] && echo "aborted!" && $_exit
                for item in $items
                do
                    echo -n "$item   "
                    ${DIRvim}/openvim $what-delete -f $item  || ! echo "fail" >&2 || $_exit 1
                done
            fi
        done
        ${DIRvim}/openvim tenant-delete -f $t_id  || ! echo "fail" >&2 || $_exit 1
        for what in host
        do
            items=`${DIRvim}/openvim $what-list | awk '/^ *[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12} +/{print $1}'`
            if [[ -n $items ]]
            then
                [[ $option_force == "-" ]] && echo deleting openvim ${what}s
                [[ $option_force != "-" ]] && read -e -p "Delete openvim ${what}s?(y/N) " force_
                [[ $force_ != y ]] && [[ $force_ != yes ]] && echo "aborted!" && $_exit
                for item in $items
                do
                    echo -n "$item   "
                    ${DIRvim}/openvim $what-delete -f $item  || ! echo "fail" >&2 || $_exit 1
                done
            fi
        done

    done
elif [[ $action == "delete" ]]
then
    ${DIRvim}/openvim net-delete -f mgmt              || echo "fail"
    # ${DIRvim}/openvim net-delete -f default           || echo "fail"
    # ${DIRvim}/openvim net-delete -f macvtap:em1       || echo "fail"
    # ${DIRvim}/openvim net-delete -f shared_bridge_net || echo "fail"
    # ${DIRvim}/openvim net-delete -f data_net          || echo "fail"
    ${DIRvim}/openvim host-remove -f fake-host-0      || echo "fail"
    ${DIRvim}/openvim host-remove -f fake-host-1      || echo "fail"
    ${DIRvim}/openvim host-remove -f fake-host-2      || echo "fail"
    ${DIRvim}/openvim host-remove -f fake-host-3      || echo "fail"
    ${DIRvim}/openvim image-delete -f cirros034       || echo "fail"
    result=`openvim tenant-list osm`
    vimtenant=`echo $result |gawk '{print $1}'`
    #check a valid uuid is obtained
    is_valid_uuid $vimtenant || ! echo "Tenant 'osm' not found. Already delete?" >&2 || $_exit 1
    export OPENVIM_TENANT=$vimtenant
    ${DIRvim}/openvim tenant-delete -f osm     || echo "fail"
    echo

elif [[ $action == "create" ]]
then
    echo "Adding example hosts"
    ${DIRvim}/openvim host-add $DIRvim/test/hosts/host-example0.yaml || ! echo "fail" >&2 || $_exit 1
    ${DIRvim}/openvim host-add $DIRvim/test/hosts/host-example1.yaml || ! echo "fail" >&2 || $_exit 1
    ${DIRvim}/openvim host-add $DIRvim/test/hosts/host-example2.yaml || ! echo "fail" >&2 || $_exit 1
    ${DIRvim}/openvim host-add $DIRvim/test/hosts/host-example3.yaml || ! echo "fail" >&2 || $_exit 1
    echo "Adding example nets"
    # ${DIRvim}/openvim net-create $DIRvim/test/networks/net-example0.yaml || ! echo "fail" >&2 || $_exit 1
    # ${DIRvim}/openvim net-create $DIRvim/test/networks/net-example1.yaml || ! echo "fail" >&2 || $_exit 1
    # ${DIRvim}/openvim net-create $DIRvim/test/networks/net-example2.yaml || ! echo "fail" >&2 || $_exit 1
    # ${DIRvim}/openvim net-create $DIRvim/test/networks/net-example3.yaml || ! echo "fail" >&2 || $_exit 1
    ${DIRvim}/openvim net-create $DIRvim/test/networks/net-example4.yaml || ! echo "fail" >&2 || $_exit 1

    printf "%-50s" "Creating openvim tenant 'osm': "
    result=`${DIRvim}/openvim tenant-create '{tenant: {name: osm, description: admin}}'`
    vimtenant=`echo $result |gawk '{print $1}'`
    #check a valid uuid is obtained
    ! is_valid_uuid $vimtenant && echo "FAIL" && echo "    $result" && $_exit 1
    echo "  $vimtenant"
    export OPENVIM_TENANT=$vimtenant
    [[ -n "$option_insert_bashrc" ]] && echo -e "\nexport OPENVIM_TENANT=$vimtenant" >> ~/.bashrc

    printf "%-50s" "Adding example image 'cirros034': "
    result=`${DIRvim}/openvim image-create --name cirros034 \
        --path http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img \
        --description "cirros from web"`
    image=`echo $result |gawk '{print $1}'`
    ! is_valid_uuid $image && echo "FAIL" && echo "    $result" && $_exit 1
    echo "  $image"


    echo
    #echo "Check virtual machines are deployed"
    #vms_error=`openvim vm-list | grep ERROR | wc -l`
    #vms=`openvim vm-list | wc -l`
    #[[ $vms -ne 8 ]]       &&  echo "WARNING: $vms VMs created, must be 8 VMs" >&2 && $_exit 1
    #[[ $vms_error -gt 0 ]] &&  echo "WARNING: $vms_error VMs with ERROR" >&2       && $_exit 1
fi
done

echo
echo DONE
#echo "Listing VNFs"
#openvim vnf-list
#echo "Listing scenarios"
#openvim scenario-list
#echo "Listing scenario instances"
#openvim instance-scenario-list


