#!/usr/bin/env bash
# 
#   Copyright 2017 RIFT.IO Inc
#
#   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.
#
# Author(s): Jeremy Mordkoff
# Creation Date: 26 April 2017
# 
#

# INSTALL.sh
# install launchpad SO and all of its dependencies
#

# Defensive bash programming flags
set -o errexit    # Exit on any error
trap 'echo ERROR: Command failed: \"$BASH_COMMAND\"' ERR
set -o nounset    # Expanding an unset variable is an error.  Variables must be
                  # set before they can be used.

if [ $# -gt 0 ]; then
    case "$1" in
	-h|--help)
	    echo
	    echo "NAME:"
	    echo "  $0"
	    echo
	    echo "SYNOPSIS:"
	    echo "  $0 -h|--help"
	    echo "  $0 [PLATFORM_REPOSITORY] [PLATFORM_VERSION]"
	    echo
	    echo "DESCRIPTION:"
	    echo "  Prepare current system to run SO and UI."
	    echo
	    echo "  PLATFORM_REPOSITORY (optional): name of the RIFT.ware repository."
	    echo "  PLATFORM_VERSION (optional): version of the platform packages to be installed."
	    echo
	    exit 0;;
    esac
fi


###############################################################################
# Set up repo and version

PLATFORM_REPOSITORY=${1:-OSM}
PLATFORM_VERSION=${2:-4.4.2.1.60497}

###############################################################################
# Main block

# Disable apt-daily.service and apt-daily.timer

DAILY_TIMER='apt-daily.timer'
DAILY_SERVICE='apt-daily.service'
if [ $(systemctl is-active $DAILY_TIMER) = "active" ]
then
    systemctl stop $DAILY_TIMER
    systemctl disable $DAILY_TIMER
    systemctl disable $DAILY_SERVICE
fi

# enable the right repos
curl http://repos.riftio.com/public/xenial-riftware-public-key | apt-key add -
curl -o /etc/apt/sources.list.d/RIFT.list http://buildtracker.riftio.com/repo_file/ub16/${PLATFORM_REPOSITORY}/ 
apt-get update
        
# and install the tools
apt remove -y rw.toolchain-rwbase tcpdump
apt-get install -y --allow-downgrades rw.tools-container-tools=${PLATFORM_VERSION} rw.tools-scripts=${PLATFORM_VERSION} python 
/usr/rift/container_tools/mkcontainer --modes ext --modes platform --rw-version ${PLATFORM_VERSION}
pip3 install lxml==3.4.0


chmod 777 /usr/rift /usr/rift/usr/share

# now disable the RIFT OSM repo so that we'll get MANO from 
# the OSM repos
rm -f /etc/apt/sources.list.d/RIFT.list 
curl https://osm-download.etsi.org/repository/osm/debian/ReleaseTWO/OSM%20ETSI%20Release%20Key.gpg |apt-key add -
add-apt-repository -y "deb https://osm-download.etsi.org/repository/osm/debian/ReleaseTWO stable SO UI RO openvim"
apt-get update
    
apt-get install -y \
	     rw.core.mano-rwcal_yang_ylib-1.0 \
	     rw.core.mano-rwconfig_agent_yang_ylib-1.0 \
	     rw.core.mano-rwlaunchpad_yang_ylib-1.0 \
	     rw.core.mano-mano_yang_ylib-1.0 \
	     rw.core.mano-common-1.0 \
	     rw.core.mano-rwsdn_yang_ylib-1.0 \
	     rw.core.mano-rwsdnal_yang_ylib-1.0 \
	     rw.core.mano-mano-types_yang_ylib-1.0 \
	     rw.core.mano-rwcal-cloudsim-1.0 \
	     rw.core.mano-rwcal-1.0 \
	     rw.core.mano-rw_conman_yang_ylib-1.0 \
	     rw.core.mano-rwcalproxytasklet-1.0 \
	     rw.core.mano-rwlaunchpad-1.0 \
	     rw.core.mano-rwcal-openmano-vimconnector-1.0 \
	     rw.core.mano-lpmocklet_yang_ylib-1.0 \
	     rw.core.mano-rwmon-1.0 \
	     rw.core.mano-rwcloud_yang_ylib-1.0 \
	     rw.core.mano-rwcal-openstack-1.0 \
	     rw.core.mano-rw.core.mano_foss \
	     rw.core.mano-rwmon_yang_ylib-1.0 \
	     rw.core.mano-rwcm-1.0 \
	     rw.core.mano-rwcal-mock-1.0 \
#	     rw.core.mano-rwmano_examples-1.0 \
	     rw.core.mano-rwcal-cloudsimproxy-1.0 \
	     rw.core.mano-models-1.0 \
	     rw.core.mano-rwcal-aws-1.0
    
