#!/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
#

HERE=$(realpath $(dirname $0))
OSM_JENKINS=$(dirname $HERE)
. $OSM_JENKINS/common/install_common

# 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.

###############################################################################
# Set up repo and version
PLATFORM_REPOSITORY=OSM3
PLATFORM_VERSION=5.2.0.0.71033

while getopts ":P:V:h" o; do
    case "${o}" in
        P)
            PLATFORM_REPOSITORY=${OPTARG}
            ;;
        V)
            PLATFORM_VERSION=${OPTARG}
            ;;
        h)
            usage
            exit 0
            ;;
        *)
            usage
            exit 1
            ;;
    esac
done

function usage() {
    echo
    echo "NAME:"
    echo "  $0"
    echo
    echo "SYNOPSIS:"
    echo "  $0 -h|--help"
    echo "  $0 -P <PLATFORM_REPOSITORY> -V <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
}


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

# enable the right repos
echo "### INSTALLING RIFT platform ${PLATFORM_VERSION} from repository ${PLATFORM_REPOSITORY}"

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}/

# Make the Rift repo a higher priority to work around version conflicts.
cat <<EOF > /etc/apt/preferences.d/rift
Package: *
Pin: origin repos.riftio.com
Pin-Priority: 600
EOF



#######################
# temp fix
# this is normally done by mkcontainer, but the last line is missing
# we can take this out when we update the RIFT platform 

cat <<EOF >>/etc/systemd/user.conf
DefaultLimitNOFILE=65536
DefaultLimitMSGQUEUE=8192000
DefaultLimitNPROC=65536
DefaultTasksMax=65536
EOF
cat <<EOF >>/etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitMSGQUEUE=8192000
DefaultLimitNPROC=65536
DefaultTasksMax=65536
EOF
systemctl daemon-reload

##################################


apt-get update

# and install the tools
apt remove -y 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 MANO-base,rw-platform --rw-version ${PLATFORM_VERSION}

# 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

apt-get update

apt-get install -y \
    rw.core.mano-mano \
    rw.core.mano-rwcal-plugin-aws \
    rw.core.mano-rwcal-plugin-cloudsim \
    rw.core.mano-rwcal-plugin-cloudsimproxy \
    rw.core.mano-rwcal-plugin-openmano-vimconnector \
    rw.core.mano-rwcal-plugin-openstack \
    rw.core.mano-rwcal-plugin-mock 




