# 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=4.2.14
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="$ONOS_ROOT/tools/dev/bin:$ONOS_ROOT/tools/test/bin:$PATH"
export PATH="$ONOS_ROOT/tools/build:$PATH"

# Fallback build number us derived from from the user name
export BUILD_NUMBER=${BUILD_NUMBER:-$(id -un)}

# ONOS Version and onos.tar.gz staging environment
export ONOS_POM_VERSION="2.5.7-rc2"
export ONOS_VERSION=${ONOS_VERSION:-2.5.7-rc2.$BUILD_NUMBER}

# ONOS production bits (onos.tar.gz, onos.zip, onos.deb, onos.rpm) staging environment
export ONOS_BITS=onos-${ONOS_VERSION%~*}
export ONOS_STAGE_ROOT=${ONOS_STAGE_ROOT:-/tmp}
export ONOS_STAGE=$ONOS_STAGE_ROOT/$ONOS_BITS
export ONOS_DEB_ROOT=$ONOS_STAGE_ROOT/deb
export ONOS_DEB=$ONOS_STAGE.deb
export ONOS_RPM_ROOT=$ONOS_STAGE_ROOT/rpm
export ONOS_RPM=$ONOS_STAGE.rpm
export ONOS_RPM_VERSION=${ONOS_POM_VERSION//-/.}
export ONOS_TAR=$ONOS_STAGE.tar.gz
export ONOS_ZIP=$ONOS_STAGE.zip

BAZEL_TAR=$ONOS_ROOT/bazel-bin/onos.tar.gz
if [ -f $BAZEL_TAR ] && [ $BAZEL_TAR -nt $ONOS_TAR ]; then
    rm -f $ONOS_TAR >/dev/null; ln -s $BAZEL_TAR $ONOS_TAR
fi

# ONOS test bits (onos-test.tar.gz) staging environment
export ONOS_TEST_BITS=onos-test-${ONOS_VERSION%~*}
export ONOS_TEST_TAR=$ONOS_STAGE_ROOT/$ONOS_TEST_BITS.tar.gz

# ONOS admin bits (onos-admin.tar.gz) staging environment
export ONOS_ADMIN_BITS=onos-admin-${ONOS_VERSION%~*}
export ONOS_ADMIN_TAR=$ONOS_STAGE_ROOT/$ONOS_ADMIN_BITS.tar.gz

export ONOS_INSTALL_DIR="${ONOS_INSTALL_DIR:-/opt/onos}"     # Installation directory on remote
export ATOMIX_INSTALL_DIR="${ATOMIX_INSTALL_DIR:-/opt/atomix}" # Installation directory for Atomix
export OCI="${OCI:-localhost}"          # ONOS Controller Instance
export ONOS_USER="${ONOS_USER:-sdn}"    # ONOS user on remote system
export ONOS_GROUP="${ONOS_GROUP:-sdn}"  # ONOS group on remote system
export ONOS_PWD="${ONOS_PWD:-rocks}"                 # ONOS user password on remote system
export ONOS_SCENARIOS=$ONOS_ROOT/tools/test/scenarios

export ONOS_CLUSTER_KEY_FILE="/tmp/onos.jks"
export ONOS_CLUSTER_KEY_PASSWORD="changeit"
