#!/bin/bash
# -----------------------------------------------------------------------------
# Applies the settings in the specified cell file or lists current cell
# definition if no cell file is given.
# -----------------------------------------------------------------------------

cell=$1
case "$cell" in
"borrow")
    aux="/tmp/cell-$$"
    curl -sS -X POST "http://$CELL_WARDEN:4321/?duration=${2:-0}&user=${3:-$(id -un)}" \
        -d "$(cat ~/.ssh/id_rsa.pub)" > $aux
    . $aux
    rm -f $aux
    export ONOS_INSTANCES=$(env | grep 'OC[0-9]*=' | sort | cut -d= -f2)
    setPrimaryInstance 1 >/dev/null
    onos-verify-cell
    ;;
"return")
    curl -sS -X DELETE "http://$CELL_WARDEN:4321/?user=${2:-$(id -un)}"
    unset ONOS_CELL ONOS_NIC ONOS_IP ONOS_APPS ONOS_BOOT_FEATURES
    unset OCI OCN OCT ONOS_INSTANCES ONOS_FEATURES
    unset $(env | sed -n 's:\(^OC[0-9]\{1,\}\)=.*:\1 :g p')
    ;;

"status")
    curl -sS "http://$CELL_WARDEN:4321/" | sort
    ;;

"")
    env | egrep "ONOS_CELL"
    env | egrep "OCI"
    env | egrep "OC[0-9]+" | sort
    env | egrep "OC[NT]"
    env | egrep "ONOS_" | egrep -v 'ONOS_ROOT|ONOS_CELL|ONOS_INSTANCES' | sort
    ;;

*)
    [ ! -f $ONOS_ROOT/tools/test/cells/$1 ] && \
        echo "No such cell: $1" >&2 && return 1
    unset ONOS_CELL ONOS_NIC ONOS_IP ONOS_APPS ONOS_BOOT_FEATURES
    unset OCI OCN OCT ONOS_INSTANCES ONOS_FEATURES
    unset $(env | sed -n 's:\(^OC[0-9]\{1,\}\)=.*:\1 :g p')
    export ONOS_USER=${ONOS_USER:-sdn}
    export ONOS_GROUP=${ONOS_GROUP:-sdn}
    export ONOS_WEB_USER=onos
    export ONOS_WEB_PASS=rocks
    export ONOS_CELL=$1
    . $ONOS_ROOT/tools/test/cells/$1
    export ONOS_INSTANCES=$(env | grep 'OC[0-9]*=' | sort | cut -d= -f2)
    setPrimaryInstance 1 >/dev/null
    cell
esac