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




