#!/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

if [ -f "/etc/httpd/conf.d/openshift/${uuid}_${old_namespace}_${application}.conf" ]
then
  sed -i "s/ServerName ${application}-${old_namespace}./ServerName ${application}-${new_namespace}./" /etc/httpd/conf.d/openshift/${uuid}_${old_namespace}_${application}/00000_default.conf
  sed -i "s/_${old_namespace}_${application}/_${new_namespace}_${application}/g" /etc/httpd/conf.d/openshift/${uuid}_${old_namespace}_${application}.conf
  mv /etc/httpd/conf.d/openshift/${uuid}_${old_namespace}_${application}.conf /etc/httpd/conf.d/openshift/${uuid}_${new_namespace}_${application}.conf
  mv /etc/httpd/conf.d/openshift/${uuid}_${old_namespace}_${application} /etc/httpd/conf.d/openshift/${uuid}_${new_namespace}_${application}
  restart_httpd_graceful
fi

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
