#!/bin/bash
#   Copyright 2017
#
#   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.
#
# 01 May 2017 -- Michael Marchetti -- adapted from template
#

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

INFO "Installing packages"
apt-get update
apt-get install -y lxd

INFO "Configuring LXD"
# ZFS doesn't work inside a nested container. ZFS should be configured in the host LXD.
lxd init --auto
lxd waitready
systemctl stop lxd-bridge
systemctl --system daemon-reload
cat <<EOF > /etc/default/lxd-bridge
USE_LXD_BRIDGE="true"
LXD_BRIDGE="lxdbr0"
UPDATE_PROFILE="true"
LXD_CONFILE=""
LXD_DOMAIN="lxd"
LXD_IPV4_ADDR="10.44.126.1"
LXD_IPV4_NETMASK="255.255.255.0"
LXD_IPV4_NETWORK="10.44.126.1/24"
LXD_IPV4_DHCP_RANGE="10.44.126.2,10.44.126.254"
LXD_IPV4_DHCP_MAX="252"
LXD_IPV4_NAT="true"
LXD_IPV6_ADDR=""
LXD_IPV6_MASK=""
LXD_IPV6_NETWORK=""
LXD_IPV6_NAT="false"
LXD_IPV6_PROXY="false"
EOF

systemctl enable lxd-bridge
systemctl start lxd-bridge

apt-get install -y python-pip python python-pycurl charm-tools python-pytest

apt-get install -y python-osmclient

export OSM_USE_LOCAL_DEVOPS=true
echo "devops/installers/install_osm.sh --test $*"
devops/installers/install_osm.sh --test $*
RC=$?

# workaround.  for upload packages, lxdbr0 needs to be promiscuous
# as the upload calls back to the UI server so the lxdbr0 needs
# to operate as a bridge
ifconfig lxdbr0 promisc

if [ $RC == 0 ]; then
   # success. find all the resulting containers
   . devops/installers/export_ips

   TO_ADD="export OSM_HOSTNAME=$SO_CONTAINER_IP"
   grep -q OSM_HOSTNAME ~/.bashrc && sed -i "s/.*OSM_HOSTNAME.*/$TO_ADD/" ~/.bashrc || echo -e "$TO_ADD\n$(cat ~/.bashrc)" > ~/.bashrc
   TO_ADD="export OSM_RO_HOSTNAME=$RO_CONTAINER_IP"
   grep -q OSM_RO_HOSTNAME ~/.bashrc && sed -i "s/.*OSM_RO_HOSTNAME.*/$TO_ADD/" ~/.bashrc || echo -e "$TO_ADD\n$(cat ~/.bashrc)" > ~/.bashrc
fi

INFO "done, RC=$RC"
exit $RC
