#!/bin/bash

set -ex

if [ ! -z ${GEM_HOME} ]; then
    GEM_BIN_DIR=${GEM_HOME}/bin/
fi

export SCRIPT_DIR=$(readlink -f "$(dirname $0)")
export PUPPETFILE_DIR=${PUPPETFILE_DIR:-/etc/puppet/modules}

install_external() {
  PUPPETFILE=${SCRIPT_DIR}/Puppetfile1 ${GEM_BIN_DIR}r10k puppetfile install -v
}

install_openstack() {
  cat > clonemap.yaml <<EOF
clonemap:
  - name: '(.*?)/puppet-(.*)'
    dest: '$PUPPETFILE_DIR/\2'
EOF

  local project_names=$(awk '{ if ($1 == ":git") print $3 }' \
    ${SCRIPT_DIR}/Puppetfile0 | tr -d "'," | cut -d '/' -f 4- | xargs
  )
  /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml \
    --cache-dir /opt/git \
    --zuul-ref $ZUUL_REF \
    --zuul-branch $ZUUL_BRANCH \
    --zuul-url $ZUUL_URL \
    git://git.openstack.org $project_names
}

install_all() {
  PUPPETFILE=${SCRIPT_DIR}/Puppetfile ${GEM_BIN_DIR}r10k puppetfile install -v
}

gem install r10k --no-ri --no-rdoc

# make sure there is no puppet module pre-installed
rm -rf "${PUPPETFILE_DIR:?}/"*

# If zuul-cloner is there, have it install modules using zuul refs
if [ -e /usr/zuul-env/bin/zuul-cloner ] ; then
  csplit ${SCRIPT_DIR}/Puppetfile /'External modules'/ \
    --prefix ${SCRIPT_DIR}/Puppetfile \
    --suffix '%d'
  install_external
  install_openstack
else
  install_all
fi

puppet module list

if type "apt-get" 2>/dev/null; then
    # apt-get update needs to be run to be able (later) to install
    # ubuntu-cloud-keyring package with puppet
    /usr/bin/apt-get update

    # install rabbitmq-server from ubuntu repository until
    # rabbitmq repository contains the fix mentionned in:
    # https://github.com/rabbitmq/rabbitmq-server/issues/321
    /usr/bin/apt-get install -y rabbitmq-server
else
    # disable SElinux
    # something is python-cffi is preventing Nova & Keystone to
    # correctly run when SElinux is enforced. See bug:
    # https://bugzilla.redhat.com/show_bug.cgi?id=1249685
    # We use || true because if selinux is Disabled the following
    # command would fail
    /usr/sbin/setenforce 0 || true
fi