# Environmental defaults for ONOS build, package and test

# Root of the ONOS source tree
export ONOS_ROOT=${ONOS_ROOT:-~/onos}

# M2 repository and Karaf gold bits
export M2_REPO=${M2_REPO:-~/.m2/repository}
export KARAF_VERSION=${KARAF_VERSION:-3.0.2}
export KARAF_ZIP=${KARAF_ZIP:-~/Downloads/apache-karaf-$KARAF_VERSION.zip}
export KARAF_TAR=${KARAF_TAR:-~/Downloads/apache-karaf-$KARAF_VERSION.tar.gz}
export KARAF_DIST=$(basename $KARAF_ZIP .zip)

# Add ONOS-specific directories to the exectable PATH
export PATH="$PATH:$ONOS_ROOT/tools/dev/bin:$ONOS_ROOT/tools/test/bin"
export PATH="$PATH:$ONOS_ROOT/tools/build"

# Fallback build number us derived from from the user name & time
export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)~$(date +'%Y/%m/%d@%H:%M')}

# ONOS Version and onos.tar.gz staging environment
export ONOS_POM_VERSION="1.0.0-SNAPSHOT"
export ONOS_VERSION=${ONOS_VERSION:-1.0.0.$BUILD_NUMBER}
export ONOS_BITS=onos-${ONOS_VERSION%~*}
export ONOS_STAGE_ROOT=${ONOS_STAGE_ROOT:-/tmp}
export ONOS_STAGE=$ONOS_STAGE_ROOT/$ONOS_BITS
export ONOS_TAR=$ONOS_STAGE.tar.gz
export ONOS_ZIP=$ONOS_STAGE.zip

# Defaults for ONOS testing using remote machines.
# if [ -n "${ONOS_CELL}" -a -f $ONOS_ROOT/tools/test/cells/${ONOS_CELL} ]; then
#   . $ONOS_ROOT/tools/test/cells/${ONOS_CELL}
# fi
export ONOS_INSTALL_DIR="/opt/onos"     # Installation directory on remote
export OCI="${OCI:-192.168.56.101}"     # ONOS Controller Instance
export ONOS_USER="${ONOS_USER:-sdn}"    # ONOS user on remote system
export ONOS_PWD="rocks"                 # ONOS user password on remote system
