#!/bin/bash
# -----------------------------------------------------------------------------
# Remotely pushes bits to a remote node and installs ONOS on it.
# -----------------------------------------------------------------------------

function _usage () {
cat << _EOF_
usage:
 $(basename $0) [-fn] [-m] <settings> [node]

flags:
- -f            : forces uninstall of currently installed ONOS
- -u            : don't install onos.conf upstart configuration file
- -i            : don't install /etc/init.d/onos script (also used by onos.conf)
- -s            : don't install onos.service systemd configuration file
- -n            : don't try to start ONOS
- -m <settings> : pass <settings> XML file to remote maven installation

options:
- [node] : remote node to install ONOS on.

summary:
 Remotely pushes bits to a remote node and installs ONOS on it.

 The -u should be used on upstart-based systems.

 If [node] is not specified the default target is \$OCI.

_EOF_
}

[ "$1" = "-h" ] && _usage && exit 0

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

onos-check-bits

while getopts fnm: o; do
    case "$o" in
        f) uninstall=true;;
        u) noupstart=true; noinitd=true; nosysd=true;;
        i) noinitd=true; nosysd=true;;
        s) nosysd=true;;
        n) nostart=true;;
        m) mvn_settings=$OPTARG;;
    esac
done
let OPC=$OPTIND-1
shift $OPC

# If the -f was given, attempt uninstall first.
[ -n "$uninstall" ] && onos-uninstall ${1:-$OCI}

node=${1:-$OCI}
remote=$ONOS_USER@$node

$(dirname $0)/onos-push-bits $node

[ ! -z "$mvn_settings" ] && scp -q $mvn_settings $remote:/tmp/settings.xml

ssh -tt $remote "
    [ -d $ONOS_INSTALL_DIR/bin ] && echo \"ONOS is already installed\" && exit 1

    # Prepare a landing zone and unroll the bits
    sudo mkdir -p $ONOS_INSTALL_DIR && sudo chown ${ONOS_USER}:${ONOS_GROUP} $ONOS_INSTALL_DIR
    tar zxmf /tmp/$ONOS_BITS.tar.gz -C $ONOS_INSTALL_DIR --strip-components=1

    # Make a link to the log file directory and make a home for auxiliaries
    ln -s $ONOS_INSTALL_DIR/$KARAF_DIST/data/log /opt/onos/log
    ln -s $ONOS_INSTALL_DIR/$KARAF_DIST /opt/onos/karaf
    mkdir $ONOS_INSTALL_DIR/var
    mkdir $ONOS_INSTALL_DIR/config

    # Install the configuration file(s) and set up options for debugging
    [ -n $noupstart ] && sudo cp $ONOS_INSTALL_DIR/init/onos.conf /etc/init/onos.conf
    [ -n $noinitd ] && sudo cp $ONOS_INSTALL_DIR/init/onos.initd /etc/init.d/onos
    [ -n $nosysd ] && sudo cp $ONOS_INSTALL_DIR/init/onos.service /etc/systemd/system/onos.service
    echo 'export ONOS_OPTS=debug' > $ONOS_INSTALL_DIR/options

    # Set up correct user to run onos-service
    echo 'export ONOS_USER=$ONOS_USER' >> $ONOS_INSTALL_DIR/options

    # Remove any previous ON.Lab bits from ~/.m2 repo.
    rm -fr ~/.m2/repository/org/onosproject

    [ ! -z $mvn_settings ] && cp /tmp/settings.xml ~/.m2/settings.xml

    # Drop log level for the console
    echo 'log4j.logger.org.apache.sshd = WARN' \
        >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg

    # remove verbose bundle detail from log layout
    echo 'log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} | %m%n' \
        >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg

    # Set up the ONOS service on systemd-based systems
    sudo systemctl daemon-reload || true

"

# Configure the ONOS installation
onos-config $node

# Unless -n option was given, attempt to ignite the ONOS service.
[ -z "$nostart" ] && onos-service $node start || true