#!/bin/bash

build_default_image () {
    if [ -f /usr/share/openstack-tripleo-common/common/container-images/container_image_prepare_defaults.yaml ]; then
        local default_file=/usr/share/openstack-tripleo-common/common/container-images/container_image_prepare_defaults.yaml
    elif [ -f ${BASH_SOURCE%/*}/../container-images/container_image_prepare_defaults.yaml ]; then
        local default_file=${BASH_SOURCE%/*}/../container-images/container_image_prepare_defaults.yaml
    else
        echo "docker.io/openshift/origin-ansible:latest"
        exit
    fi
    local namespace=$(awk '/openshift_namespace:/ {print $2}' $default_file)
    local prefix=$(awk '/openshift_prefix:/ {print $2}' $default_file)
    local tag=$(awk '/openshift_tag:/ {print $2}' $default_file)
    echo ${namespace}/${prefix}-ansible:${tag}
}

OPENSHIFT_ANSIBLE_DEFAULT_IMAGE=$(build_default_image)

: ${PLAN_NAME:=openshift}
: ${CONFIG_DOWNLOAD_DIR:=}
: ${OPENSHIFT_PLAYBOOK:=}
: ${OPENSHIFT_ANSIBLE_IMAGE:=$OPENSHIFT_ANSIBLE_DEFAULT_IMAGE}
: ${OPENSHIFT_ANSIBLE_DIR:=}

usage () {
    echo "Usage: $0 [options] [extra_ansible_options...]"
    echo ""
    echo "Options:"
    echo "  -i, --image                the openshift-ansible image tag to use. Defaults to"
    echo "                             $OPENSHIFT_ANSIBLE_DEFAULT_IMAGE"
    echo "  -d, --config-download-dir  the path to the config-download directory for openshift"
    echo "                             DEPRECATED use --plan instead"
    echo "  -n, --plan                 the plan name. Defaults to $PLAN_NAME"
    echo "  -p, --playbook             the path of the playbook to run. Defaults to"
    echo "                             openshift/playbook.yml in the config-download directory"
    echo "  --osa                      the path to openshift-ansible directory. Mutually"
    echo "                             exclusive with --image"
    echo "  -h, --help                 print this help and exit"
}

OPTS=`getopt -o hd:n:i:p: --long help,config-download-dir:,plan:,image:,playbook:,osa: -- "$@"`
eval set -- "$OPTS"

while true; do
    case "$1" in
        -h | --help)
            usage; exit ;;
        -d | --config-download-dir)
            echo "--config-download-dir is deprecated, use --plan instead"
            shift
            export CONFIG_DOWNLOAD_DIR=$1; shift ;;
        -n | --plan)
            shift
            export PLAN_NAME=$1
            shift ;;
        -p | --playbook)
            shift
            export OPENSHIFT_PLAYBOOK=$1; shift ;;
        -i | --image)
            shift
            export OPENSHIFT_ANSIBLE_IMAGE=$1; shift ;;
        --osa)
            shift
            export OPENSHIFT_ANSIBLE_DIR=$1; shift ;;
        --) shift ; break ;;
        * ) break ;;
    esac
done

if [[ -z $CONFIG_DOWNLOAD_DIR ]]; then
    export CONFIG_DOWNLOAD_DIR=/var/lib/mistral/${PLAN_NAME}
fi
if [[ ! -d $CONFIG_DOWNLOAD_DIR ]]; then
    echo "Config-download directory doesn't exist at ${CONFIG_DOWNLOAD_DIR}"
    exit
fi

if [[ -z $OPENSHIFT_PLAYBOOK ]]; then
    export OPENSHIFT_PLAYBOOK=${CONFIG_DOWNLOAD_DIR}/openshift/playbook.yml
fi

ANSIBLE_OPTS="-e @${CONFIG_DOWNLOAD_DIR}/openshift/global_vars.yml"
if [[ -f ${CONFIG_DOWNLOAD_DIR}/openshift/global_gluster_vars.yml ]]; then
    ANSIBLE_OPTS="${ANSIBLE_OPTS} -e @${CONFIG_DOWNLOAD_DIR}/openshift/global_gluster_vars.yml"
fi
ANSIBLE_OPTS="${ANSIBLE_OPTS} $@"

if [ -z $OPENSHIFT_ANSIBLE_DIR ]; then
    sudo podman run \
        --net=host \
        -u `id -u` \
        -v ${CONFIG_DOWNLOAD_DIR}:${CONFIG_DOWNLOAD_DIR}:z \
        -w ${CONFIG_DOWNLOAD_DIR} \
        -e ANSIBLE_HOST_KEY_CHECKING=False \
        -e ANSIBLE_CONFIG=${CONFIG_DOWNLOAD_DIR}/ansible.cfg \
        -e INVENTORY_DIR=${CONFIG_DOWNLOAD_DIR}/openshift/inventory \
        -e PLAYBOOK_FILE=${OPENSHIFT_PLAYBOOK} \
        -e OPTS="${ANSIBLE_OPTS}" \
        -t ${OPENSHIFT_ANSIBLE_IMAGE}
else
    pushd ${CONFIG_DOWNLOAD_DIR}
    ANSIBLE_HOST_KEY_CHECKING=False \
    ANSIBLE_CONFIG=${CONFIG_DOWNLOAD_DIR}/ansible.cfg \
    ansible-playbook \
        -i ${CONFIG_DOWNLOAD_DIR}/openshift/inventory \
        ${ANSIBLE_OPTS} \
        ${OPENSHIFT_PLAYBOOK}
    popd
fi
