#!/bin/sh

set -e

ME=$(basename $0)

### ARGS PARSING ###
usage (){
	echo "${ME} <enable/disable> [--service-plugin <PLUGIN>] [--l3-extension <L3-EXT>]" >/dev/stderr
	exit 1
}

if [ "${1}" = "enable" ] ; then
	MODE=enable
elif [ "${1}" = "disable" ] ; then
	MODE=disable
else
	echo "Please use enable or disable as first arg." >/dev/stderr
	usage
fi
shift

SERVICE_PLUGIN=NONE
L3_EXT=NONE
for i in $@ ; do
    case "${1}" in
    "--service-plugin")
    	SERVICE_PLUGIN=${2}
    	shift
    	shift
    ;;
    "--l3-extension")
    	L3_EXT=${2}
    	shift
    	shift
    ;;
    *)
    ;;
    esac
done

if [ "${SERVICE_PLUGIN}" = "NONE" ] && [ "${L3_EXT}" = "NONE" ] ; then
	echo "No --service-plugin or --l3-extension." >/dev/stderr
	usage
fi

if ! [ -r /usr/share/openstack-pkg-tools/pkgos_func ] ; then
	echo "Please install openstack-pkg-tools." >/dev/stderr
	usage
fi

. /usr/share/openstack-pkg-tools/pkgos_func

# Adds a plugin to a directive if it isn't there yet
npm_enable_plugin (){
	local NPM_CONF_PATH NPM_SECTION NPM_DIRECTIVE NPM_VALUE
	NPM_CONF_PATH=$1
	NPM_SECTION=$2
	NPM_DIRECTIVE=$3
	NPM_VALUE=$4
	pkgos_inifile get ${NPM_CONF_PATH} ${NPM_SECTION} ${NPM_DIRECTIVE}
	if [ "${RET}" != "NOT_FOUND" ] ; then
		CUR="${RET}"
		VAL=$(echo $RET | sed -e 's/,/ /g')
		IS_PRESENT=no
		for i in $VAL ; do
			if [ "${i}" = "${NPM_VALUE}" ] ; then
				IS_PRESENT=yes
			fi
		done
		if [ "${IS_PRESENT}" = "no" ] ; then
			NEED_RESTART=yes
			CUR="${CUR},${NPM_VALUE}"
			pkgos_inifile set ${NPM_CONF_PATH} ${NPM_SECTION} ${NPM_DIRECTIVE} "${CUR}"
		fi
	fi
}

# Remove a plugin from a directive
npm_disable_plugin (){
	local NPM_CONF_PATH NPM_SECTION NPM_DIRECTIVE NPM_VALUE
	NPM_CONF_PATH=$1
	NPM_SECTION=$2
	NPM_DIRECTIVE=$3
	NPM_VALUE=$4
	pkgos_inifile get ${NPM_CONF_PATH} ${NPM_SECTION} ${NPM_DIRECTIVE}
	if [ "${RET}" != "NOT_FOUND" ] ; then
		NEW=""
		VAL=$(echo $RET | sed -e 's/,/ /g')
		for i in $VAL ; do
			if [ "${i}" != "${NPM_VALUE}" ] ; then
				if [ -z "${NEW}" ] ; then
					NEW="${i}"
				else
					NEW="${NEW},${i}"
				fi
			else
				NEED_RESTART=yes
			fi
		done
		pkgos_inifile set ${NPM_CONF_PATH} ${NPM_SECTION} ${NPM_DIRECTIVE} "${NEW}"
	fi
}

CONF="/etc/neutron/neutron.conf"
L3_INI="/etc/neutron/l3_agent.ini"

NEED_RESTART=no

if [ "${MODE}" = "enable" ] ; then
	if [ "${SERVICE_PLUGIN}" != "NONE" ] ; then
		npm_enable_plugin ${CONF} DEFAULT service_plugins ${SERVICE_PLUGIN}
	fi
	if [ "${L3_EXT}" != "NONE" ] ; then
		npm_enable_plugin ${L3_INI} agent extensions ${L3_EXT}
	fi
else
	if [ "${SERVICE_PLUGIN}" != "NONE" ] ; then
		npm_disable_plugin ${CONF} DEFAULT service_plugins ${SERVICE_PLUGIN}
	fi
	if [ "${L3_EXT}" != "NONE" ] ; then
		npm_disable_plugin ${L3_INI} agent extensions ${L3_EXT}
	fi
fi

if [ "${NEED_RESTART}" = "yes" ] ; then
	systemctl restart neutron-rpc-server neutron-l3-agent 2>/dev/null || true
fi
