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

while getopts "V:h" o; do
    case "${o}" in
        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
    echo "DESCRIPTION:"
    echo "  Prepare current system to run SO and UI."
    echo
    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}"

curl http://repos.riftio.com/public/xenial-riftware-public-key | apt-key add -
echo "deb https://artifactory.riftio.com/debian-OSM xenial main" >/etc/apt/sources.list.d/rift.list

# Make the Rift repo a higher priority to work around version conflicts.
cat <<EOF > /etc/apt/preferences.d/rift
Package: *
Pin: origin artifactory.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

# Install libjuju
apt-get install -y python3-pip python3-setuptools

pip3 install juju
