#!/bin/bash

# Update the namespace of the application

# Exit on any errors
set -e

source "/etc/openshift/node.conf"
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util
source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/apache

function print_help {
    echo "Usage: $0 app-name new_namespace old_namespace uuid"

    echo "$0 $@" | logger -p local0.notice -t openshift_origin_httpd_update_namespace
    exit 1
}

function mv_symlink {
    # Check if CREATE_APP_SYMLINKS is set in /etc/openshift/node.conf
    # If it is set, move symlink

    old_namespace=$1
    new_namespace=$2
    appname=$3

    if [ $CREATE_APP_SYMLINKS -eq 1 ] && [ -h ${GEAR_BASE_DIR}/${appname}-${old_namespace} ]
    then
        mv "${GEAR_BASE_DIR}/${appname}-${old_namespace}" "${GEAR_BASE_DIR}/${appname}-${new_namespace}"
    fi
}

function get_list_of_cartridges_on_gear {
    cartlist=()
    for f in `ls $OPENSHIFT_HOMEDIR/`; do
        if [[ -d "$OPENSHIFT_HOMEDIR/$f"  &&
              ( -d "$CARTRIDGE_BASE_PATH/$f"  ||
                -d "CARTRIDGE_BASE_PATH/embedded/$f" ) ]]; then
            cartlist=("${cartlist[@]}" "$f")
        fi
    done

    echo ${cartlist[@]}
}

[ $# -eq 4 ] || print_help

new_namespace=`basename $2`
old_namespace=`basename $3`
application="$1"
uuid=$4

setup_basic_vars

. $APP_HOME/.env/OPENSHIFT_HOMEDIR

mv_symlink $old_namespace $new_namespace $application

if [ -f $APP_HOME/.env/OPENSHIFT_GEAR_DNS ]
then
    echo "export OPENSHIFT_GEAR_DNS='${application}-${new_namespace}.${CLOUD_DOMAIN}'" > $APP_HOME/.env/OPENSHIFT_GEAR_DNS
fi

if [ -f $APP_HOME/.env/OPENSHIFT_APP_DNS ]
then
    sed -i "s/-${old_namespace}.${CLOUD_DOMAIN}/-${new_namespace}.${CLOUD_DOMAIN}/g" $APP_HOME/.env/OPENSHIFT_APP_DNS
fi

oo-frontend-update-namespace \
    --with-container-uuid "$uuid" \
    --with-namespace "$old_namespace" \
    --with-container-name "$application" \
    --with-new-namespace "$new_namespace"


for cart in $(get_list_of_cartridges_on_gear); do
    CART_INFO_DIR=$CARTRIDGE_BASE_PATH/$cart/info
    if [ -f $CART_INFO_DIR/bin/update_namespace.sh ]; then
        # Parameters: $application $new_namespace $old_namespace $uuid
        $CART_INFO_DIR/bin/update_namespace.sh "$@"
    fi
done
