#!/bin/bash
#
# Copyright 2013 Red Hat, Inc.
# All Rights Reserved.
#
# 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.

set -e
set -o pipefail

SCRIPT_NAME=$(basename $0)
SCRIPT_HOME=$(dirname $0)

function show_options {
    echo "Usage: $SCRIPT_NAME [options] FILENAME"
    echo
    echo "Write devtest defined environment variables to a file."
    echo
    echo "Creates a tripleorc file that can be sourced later to restore"
    echo "environment variables that are defined by devtest.md"
    echo
    echo "Options:"
    echo "    -f, --file        -- Noop. For backwards compatibility only"
    echo "    -o, --overwrite   -- Overwrite file if it already exists."
    exit $1
}

FILE=

TEMP=`getopt -o hof -l help,overwrite,file -n $SCRIPT_NAME -- "$@"`
if [ $? != 0 ]; then
    echo "Terminating..." >&2;
    exit 1;
fi

# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"

while true ; do
    case "$1" in
        -f | --file) shift 1 ;;
        -o | --overwrite) OVERWRITE=--overwrite; shift 1 ;;
        -h | --help) show_options 0;;
        --) shift ; break ;;
        *) echo "Error: unsupported option $1." ; exit 1 ;;
    esac
done

FILE=${FILE:-$1}

if [ -z "$FILE" ]; then
    echo "ERROR: Must provide a filename"
    exit 1
fi

OVERWRITE=${OVERWRITE:-""}

# Don't overwrite $FILE if it already exists and the overwrite option
# wasn't provided.
if [ -f $FILE -a -z "$OVERWRITE" ]; then
    echo $FILE exists, not overwriting.
    echo Either delete the file first, or specify -o
    exit 1
fi

rm -f $FILE
touch $FILE

ENV_VARS="
DEPLOY_IMAGE_ELEMENT
DEPLOY_NAME
DIB_COMMON_ELEMENTS
ELEMENTS_PATH
LIBVIRT_DEFAULT_URI
LIBVIRT_DISK_BUS_TYPE
LIBVIRT_NIC_DRIVER
LIBVIRT_VOL_POOL
NODE_CNT
NODE_DIST
OVERCLOUD_BLOCKSTORAGE_DIB_EXTRA_ARGS
OVERCLOUD_BLOCKSTORAGESCALE
OVERCLOUD_COMPUTE_DIB_EXTRA_ARGS
OVERCLOUD_COMPUTESCALE
OVERCLOUD_CONTROL_DIB_EXTRA_ARGS
OVERCLOUD_CONTROLSCALE
OVERCLOUD_LIBVIRT_TYPE
ROOT_DISK
SEED_DIB_EXTRA_ARGS
TE_DATAFILE
TRIPLEO_ROOT
UNDERCLOUD_DIB_EXTRA_ARGS
USE_UNDERCLOUD_UI"

for env_var in $ENV_VARS; do
    if [ ! -z "${!env_var}" ]; then
        echo export $env_var=\"${!env_var}\" >> $FILE
    fi
done

# Also write out updated $PATH and $ELEMENTS_PATH
if [ -n "$TRIPLEO_ROOT" ]; then

    # Add a newline for some clarity in the tripleorc file.
    echo >> $FILE

    # When tripleorc is later sourced, we only want to update $PATH and
    # $ELEMENTS_PATH if they haven't already been updated.  Otherwise, we will
    # keep making them longer each time tripleorc is sourced.
    cat >> $FILE <<EOF
SCRIPTS_PATH=\$TRIPLEO_ROOT/tripleo-incubator/scripts
if [[ ! "\$PATH" =~ (^|:)"\$SCRIPTS_PATH"(:|$) ]]; then
    export PATH=\$TRIPLEO_ROOT/tripleo-incubator/scripts:\$PATH
fi

TIE_PATH=\$TRIPLEO_ROOT/tripleo-image-elements/elements
if [[ "\${ELEMENTS_PATH:-}" !~ (^|:)"\$TIE_PATH"(:|$) ]]; then
    export ELEMENTS_PATH=\$TIE_PATH\${ELEMENTS_PATH:+":\$ELEMENTS_PATH"}
fi

source devtest_variables.sh
EOF

fi
