#!/bin/bash
set -eu

## This script should die: https://bugs.launchpad.net/tripleo/+bug/1195046.

# generate ssh key directory if it doesn't exist
if [ ! -d ~/.ssh ]; then
    install --mode 700 -d ~/.ssh
fi

# generate ssh authentication keys if they don't exist
if [ ! -f ~/.ssh/id_rsa ]; then
    ssh-keygen -t rsa -N ""  -f ~/.ssh/id_rsa
fi

# Ensure the local id_rsa.pub is in .ssh/authorized_keys before that is copied
# into images via local-config. We are opening up ssh access to the host with
# a key that the user might not want, we should find another way to place the
# key onto the image. See https://bugs.launchpad.net/tripleo/+bug/1280052 for
# more details.
if ! grep "$(cat ~/.ssh/id_rsa.pub)" ~/.ssh/authorized_keys >/dev/null; then
    echo "Adding public key to ~/.ssh/authorized_keys"
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
fi

# Make sure permissions are correct for ssh authorized_keys file.
chmod 0600 ~/.ssh/authorized_keys

# packages
if [ "$TRIPLEO_OS_DISTRO" = "unsupported" ]; then
  echo This script has not been tested outside of Fedora, RHEL, and Ubuntu variants.
  echo Make sure you have installed all the needed dependencies or subsequent steps will fail.
fi

if [ "$TRIPLEO_OS_FAMILY" = "debian" ]; then
  if $(grep -Eqs 'Ubuntu 12.04' /etc/lsb-release); then
    #adding Ubuntu Cloud Archive Repository only if not present : bug https://bugs.launchpad.net/tripleo/+bug/1212237
    #Ubuntu 12.04 has a too-old libvirt-bin but a newer one is present in the Ubuntu cloud archive.
    sudo -E apt-get update
    DEBIAN_FRONTEND=noninteractive sudo -E apt-get install --yes ubuntu-cloud-keyring
    (grep -Eqs "precise-updates/grizzly" /etc/apt/sources.list.d/cloud-archive.list) || echo 'deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/grizzly main
' | sudo tee -a /etc/apt/sources.list.d/cloud-archive.list
    #adding precise-backports universe repository for jq package
    if ! command -v add-apt-repository; then
      DEBIAN_FRONTEND=noninteractive sudo -E apt-get install --yes python-software-properties
    fi
    sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ precise-backports universe"
  fi
  # packages
  sudo -E apt-get update
  DEBIAN_FRONTEND=noninteractive sudo -E apt-get install --yes python-lxml python-libvirt libvirt-bin qemu-utils qemu-system qemu-kvm git python-pip python-dev gcc python-virtualenv openvswitch-switch libssl-dev curl python-yaml parted lsb-release libxml2-dev libxslt1-dev jq openssh-server libffi-dev kpartx

  sudo service libvirt-bin restart
fi

if [ "$TRIPLEO_OS_FAMILY" = "redhat" ]; then
  # For RHEL/CentOS, python-pip is in EPEL
  if [ "$TRIPLEO_OS_DISTRO" = "redhat" -o "$TRIPLEO_OS_DISTRO" = "centos" ] && [ ! -f /etc/yum.repos.d/epel.repo ]; then
    echo EPEL repository is required to install python-pip for RHEL/CentOS.
    echo See http://fedoraproject.org/wiki/EPEL
    exit 1
  fi
  sudo -E yum install -y python-lxml libvirt-python libvirt qemu-img qemu-kvm git python-pip openssl-devel python-devel gcc audit python-virtualenv openvswitch python-yaml net-tools redhat-lsb-core libxslt-devel jq openssh-server libffi-devel which glusterfs-api

  sudo service libvirtd restart
  sudo service openvswitch restart
  sudo chkconfig openvswitch on
fi

if [ "$TRIPLEO_OS_FAMILY" = "suse" ]; then
  # Need these in path for sudo service & usermod to work
  PATH=/sbin:/usr/sbin:$PATH
  # TODO: this is a bit fragile, and assumes openSUSE, not SLES
  suse_version=$(awk '/VERSION/ { print $3 }' /etc/SuSE-release)
  if [ ! -f /etc/zypp/repos.d/Cloud_OpenStack_Master.repo ]; then
      # Add Cloud:OpenStack:Master (Project that follows master branch with daily updates)
      sudo -E zypper -n ar -f http://download.opensuse.org/repositories/Cloud:/OpenStack:/Master/openSUSE_$suse_version/Cloud:OpenStack:Master.repo
      sudo -E zypper -n --gpg-auto-import-keys ref
  fi
  sudo -E zypper --non-interactive install \
    python-lxml libvirt-python libvirt qemu-tools kvm git python-pip libopenssl-devel \
    python-devel gcc audit python-virtualenv openvswitch-switch python-PyYAML net-tools \
    lsb-release libxslt-devel jq libffi-devel
  sudo service libvirtd restart
  sudo service openvswitch-switch restart
fi
