Initial OpenECOMP policy/docker commit

Change-Id: Ib37c3693614ee21a78f838e63eb40319cc85bdc6
Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
diff --git a/policy-pe/docker-install.sh b/policy-pe/docker-install.sh
new file mode 100644
index 0000000..d85e359
--- /dev/null
+++ b/policy-pe/docker-install.sh
@@ -0,0 +1,674 @@
+#!/bin/bash
+
+#########################################################################
+##
+## Functions
+##
+#########################################################################
+
+function usage() {
+	echo -n "syntax: $(basename $0) "
+	echo -n "--debug ("
+	echo -n "[--install base|pap|pdp|pypdp|console|mysql|brmsgw|paplp|pdplp] | "
+	echo -n "[--configure base|pap|pdp|pypdp|console|mysql|brmsgw|paplp|pdplp] | "
+}
+
+function check_java() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	TARGET_JAVA_VERSION=$1
+	
+	if [[ -z ${JAVA_HOME} ]]; then
+		echo "error: ${JAVA_HOME} is not set"
+		return 1
+	fi
+	
+	if ! check_x_file "${JAVA_HOME}/bin/java"; then
+		echo "error: ${JAVA_HOME}/bin/java is not accessible"
+		return 1
+	fi
+	
+	INSTALLED_JAVA_VERSION=$("${JAVA_HOME}/bin/java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
+	if [[ -z $INSTALLED_JAVA_VERSION ]]; then
+		echo "error: ${JAVA_HOME}/bin/java is invalid"
+		return 1
+	fi
+	
+	if [[ "${INSTALLED_JAVA_VERSION}" != ${TARGET_JAVA_VERSION}* ]]; then
+		echo "error: java version (${INSTALLED_JAVA_VERSION}) does not"\
+			 "march desired version ${TARGET_JAVA_VERSION}"
+		return 1
+	fi 
+	
+	echo "OK: java ${INSTALLED_JAVA_VERSION} installed"
+	
+}
+
+function process_configuration() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	CONF_FILE=$1
+	while read line || [ -n "${line}" ]; do
+        if [[ -n ${line} ]] && [[ ${line} != \#* ]]; then
+	        name=$(echo "${line%%=*}")
+	        value=$(echo "${line#*=}")
+	        # escape ampersand so that sed does not replace it with the search string
+            value=${value//&/\\&}
+	        if [[ -z ${name} ]] || [[ -z $value ]]; then
+	        	echo "WARNING: ${line} missing name or value"
+	    	fi
+	    	export ${name}="${value}"
+	        eval "${name}" "${value}" 2> /dev/null
+        fi
+	done < "${CONF_FILE}"
+	return 0
+}
+
+function component_preconfigure() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+
+	/bin/sed -i -e 's!${{POLICY_HOME}}!'"${POLICY_HOME}!g" \
+		-e 's!${{FQDN}}!'"${FQDN}!g" \
+		*.conf > /dev/null 2>&1
+}
+
+function tomcat_component() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	TOMCAT_TARGET_INSTALL_DIR=${POLICY_HOME}/servers/${COMPONENT_TYPE}
+	if [[ -d ${TOMCAT_TARGET_INSTALL_DIR} ]]; then
+		echo "error: ${TOMCAT_TARGET_INSTALL_DIR} exists."
+		return 1
+	fi
+	
+	TOMCAT_INSTALL_DIR=${POLICY_HOME}/install/3rdparty/${TOMCAT_PACKAGE_NAME}/
+	if [[ -d ${TOMCAT_INSTALL_DIR} ]]; then
+		echo "error: ${TOMCAT_INSTALL_DIR} exists."
+		return 1		
+	fi
+	
+	tar -C "${POLICY_HOME}/servers" -xf "${POLICY_HOME}/install/3rdparty/${TOMCAT_PACKAGE_NAME}.tar.gz"
+	
+	mv "${POLICY_HOME}/servers/${TOMCAT_PACKAGE_NAME}" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+	/bin/cp "${POLICY_HOME}"/install/servers/common/tomcat/bin/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin"
+	/bin/cp "${POLICY_HOME}"/install/servers/common/tomcat/conf/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/conf"
+	
+	/bin/cp "${POLICY_HOME}/install/servers/common/tomcat/init.d/tomcatd" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}"
+	/bin/sed -i -e "s!\${{COMPONENT_TYPE}}!${COMPONENT_TYPE}!g" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}" >/dev/null 2>&1
+
+
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/webapps/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps"
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/bin/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin" >/dev/null 2>&1
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/conf/* "${POLICY_HOME}/servers/${COMPONENT_TYPE}/conf" >/dev/null 2>&1
+	
+	/bin/rm -fr "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/docs" \
+		 "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/examples" \
+		 "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/ROOT" \
+		 "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/manager" \
+		 "${POLICY_HOME}/servers/${COMPONENT_TYPE}/webapps/host-manager"
+	
+	if [[ ${COMPONENT_TYPE} == console ]]; then
+		install_ecomp_portal_settings
+	fi
+
+	return 0
+}
+
+function configure_tomcat_component() {
+	configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+}
+
+function configure_component() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+		
+	if ! process_configuration "${COMPONENT_TYPE}.conf"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
+		exit 1
+	fi
+	
+	CONF_FILE=$1
+	COMPONENT_ROOT_DIR=$2
+	
+	SED_LINE="sed -i"
+	SED_LINE+=" -e 's!\${{POLICY_HOME}}!${POLICY_HOME}!g' "
+	SED_LINE+=" -e 's!\${{POLICY_USER}}!${POLICY_USER}!g' "
+	SED_LINE+=" -e 's!\${{POLICY_GROUP}}!${POLICY_GROUP}!g' "
+	SED_LINE+=" -e 's!\${{KEYSTORE_PASSWD}}!${KEYSTORE_PASSWD}!g' "
+	SED_LINE+=" -e 's!\${{JAVA_HOME}}!${JAVA_HOME}!g' "
+	SED_LINE+=" -e 's!\${{COMPONENT_TYPE}}!${COMPONENT_TYPE}!g' "
+		
+	while read line || [ -n "${line}" ]; do
+        if [[ -n $line ]] && [[ $line != \#* ]]; then
+	        name=$(echo "${line%%=*}")
+	        value=$(echo "${line#*=}")
+	        # escape ampersand so that sed does not replace it with the search string
+        	value=${value//&/\\&}
+	    	if [[ -z ${name} ]] || [[ -z ${value} ]]; then
+	        	echo "WARNING: ${line} missing name or value"
+	    	fi
+	    	SED_LINE+=" -e 's!\${{${name}}}!${value}!g' "
+	        
+        fi
+	done < "$CONF_FILE"
+	
+	SED_FILES=""
+	for sed_file in $(find "${COMPONENT_ROOT_DIR}" -name '*.xml' -o -name '*.sh' -o -name '*.properties' -o -name '*.conf' -o -name '*.cfg' -o -name '*.template' -o -name '*.conf' -o -name '*.cron' -o -name '*.json' | grep -v /backup/); do
+		if fgrep -l '${{' ${sed_file} > /dev/null 2>&1; then
+			SED_FILES+="${sed_file} "
+		fi
+	done
+
+	if [[ -f $HOME/.m2/settings.xml ]]; then
+		SED_FILES+="$HOME/.m2/settings.xml "
+	fi
+	
+
+	if [[ -z ${SED_FILES} ]]; then
+		echo "WARNING: no xml, sh, properties, or conf files to perform configuration expansion"
+	else
+		SED_LINE+=${SED_FILES}
+		eval "${SED_LINE}"
+	fi
+
+	list_unexpanded_files ${POLICY_HOME}
+}
+
+function install_ecomp_portal_settings() {
+	echo "Install ecomp portal settings"
+
+	# unpack ecomp war file
+	mkdir -p "${POLICY_HOME}"/servers/console/webapps/ecomp
+	cd "${POLICY_HOME}"/servers/console/webapps/ecomp
+	unzip -q ../ecomp.war
+	cd ${INSTALL_DIR}
+
+	# copy over the configured settings
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/ecomp/* "${POLICY_HOME}/servers/console/webapps/ecomp"
+}
+
+function check_r_file() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+
+	FILE=$1
+	if [[ ! -f ${FILE} || ! -r ${FILE} ]]; then
+        return 1
+	fi
+
+	return 0
+}
+
+function check_x_file() {	
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+
+	FILE=$1
+	if [[ ! -f ${FILE} || ! -x ${FILE} ]]; then
+        return 1
+	fi
+
+	return 0
+}
+
+function install_prereqs() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	CONF_FILE=$1
+	
+	if ! check_r_file "${CONF_FILE}"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: ${CONF_FILE} is not accessible"
+		exit 1
+	fi
+	
+	if ! process_configuration "${CONF_FILE}"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${CONF_FILE}"
+		exit 1
+	fi
+	
+#	if ! check_java "1.8"; then
+#		echo "error: aborting ${COMPONENT_TYPE} installation: invalid java version"
+#		exit 1
+#	fi
+	
+	if [[ -z ${POLICY_HOME} ]]; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: ${POLICY_HOME} is not set"
+		exit 1	
+	fi
+
+	HOME_OWNER=$(ls -ld "${POLICY_HOME}" | awk '{print $3}')
+	if [[ ${HOME_OWNER} != ${POLICY_USER} ]]; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: ${POLICY_USER} does not own ${POLICY_HOME} directory"
+		exit 1
+	fi
+	
+	echo -n "Starting ${OPERATION} of ${COMPONENT_TYPE} under ${POLICY_USER}:${POLICY_GROUP} "
+	echo "ownership with umask $(umask)."
+}
+
+function list_unexpanded_files() {
+	ROOT_DIR=$1
+	SEARCH_LIST=$(find ${ROOT_DIR} -type f -name '*.properties' -o -name '*.sh'  -o -name '*.conf' -o -name '*.yml' -o -name '*.template' -o -name '*.xml' -o -name '*.cfg' -o -name '*.json' -o -path "${ROOT_DIR}/etc/init.d/*" | egrep -v '/m2/|/install/|/logs/')
+    NOT_EXPANDED_BASE_FILES=$(grep -l '${{' ${SEARCH_LIST} 2> /dev/null)
+	if [[ -n ${NOT_EXPANDED_BASE_FILES} ]]; then
+		echo "error: component installation has completed but some base files have not been expanded:"
+		echo "${NOT_EXPANDED_BASE_FILES}"
+		return 1
+	fi
+	return 0
+}
+
+function install_base() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	install_prereqs "${BASE_CONF}"
+	
+	if [[ -z ${POLICY_HOME} ]]; then
+		echo "error: ${POLICY_HOME} is not set"
+		exit 1
+	fi
+	
+	POLICY_HOME_CONTENTS=$(ls -A "${POLICY_HOME}" 2> /dev/null)
+	if [[ -n ${POLICY_HOME_CONTENTS} ]]; then
+		echo "error: aborting base installation: ${POLICY_HOME} directory is not empty"
+		exit 1
+	fi
+	
+	if [[ ! -d ${POLICY_HOME} ]]; then
+		echo "error: aborting base installation: ${POLICY_HOME} is not a directory."
+		exit 1
+	fi
+	
+	if ! /bin/mkdir -p "${POLICY_HOME}/servers/" > /dev/null 2>&1; then	
+		echo "error: aborting base installation: cannot create ${POLICY_HOME}/servers/"
+		exit 1
+	fi	
+	
+	if ! /bin/mkdir -p "${POLICY_HOME}/logs/" > /dev/null 2>&1; then	
+		echo "error: aborting base installation: cannot create ${POLICY_HOME}/logs/"
+		exit 1
+	fi	
+	
+	BASE_TGZ=$(ls base-*.tar.gz)
+	if [ ! -r ${BASE_TGZ} ]; then
+		echo "error: aborting base installation: ${POLICY_USER} cannot access tar file: ${BASE_TGZ}"
+		exit 1			
+	fi
+	
+	tar -tzf ${BASE_TGZ} > /dev/null 2>&1
+	if [[ $? != 0 ]]; then
+		echo >&2 "error: aborting base installation: invalid base package tar file: ${BASE_TGZ}"
+		exit 1
+	fi
+	
+	BASH_PROFILE_LINE=". ${POLICY_HOME}/etc/profile.d/env.sh"
+	PROFILE_LINE="ps -p \$\$ | grep -q bash || . ${POLICY_HOME}/etc/profile.d/env.sh"
+		
+	tar -C ${POLICY_HOME} -xf ${BASE_TGZ} --no-same-owner
+	if [[ $? != 0 ]]; then
+		# this should not happened
+		echo "error: aborting base installation: base package cannot be unpacked: ${BASE_TGZ}"
+		exit 1
+	fi
+
+	/bin/mkdir -p ${POLICY_HOME}/etc/ssl > /dev/null 2>&1
+	/bin/mkdir -p ${POLICY_HOME}/etc/init.d > /dev/null 2>&1
+	/bin/mkdir -p ${POLICY_HOME}/tmp > /dev/null 2>&1
+	/bin/mkdir -p ${POLICY_HOME}/var > /dev/null 2>&1
+			
+	#list_unexpanded_files ${POLICY_HOME}
+}
+
+
+function configure_base() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	# check if fqdn is set in base.conf and use that value if set
+	if [[ -z ${INSTALL_FQDN} ]]
+	then
+		echo "FQDN not set in config...using the default FQDN ${FQDN}"
+	else
+		echo "Using FQDN ${INSTALL_FQDN} from config"
+		FQDN=${INSTALL_FQDN}
+	fi
+
+	configure_component "${BASE_CONF}" "${POLICY_HOME}"
+	
+	BASH_PROFILE_LINE=". ${POLICY_HOME}/etc/profile.d/env.sh"
+	PROFILE_LINE="ps -p \$\$ | grep -q bash || . ${POLICY_HOME}/etc/profile.d/env.sh"
+	
+	if ! fgrep -x "${BASH_PROFILE_LINE}" "${HOME}/.bash_profile" >/dev/null 2>&1; then
+		echo "${BASH_PROFILE_LINE}" >> "${HOME}/.bash_profile"
+	fi
+	
+	if ! fgrep -x "${PROFILE_LINE}" "${HOME}/.profile" >/dev/null 2>&1; then
+		echo "${PROFILE_LINE}" >> "${HOME}/.profile"
+	fi
+}
+
+function install_tomcat_component() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	install_prereqs "${BASE_CONF}"
+
+	if ! process_configuration "${COMPONENT_TYPE}.conf"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
+		exit 1
+	fi
+	
+	if ! tomcat_component; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: tomcat installation failed."
+		exit 1			
+	fi
+	
+}
+
+# This function installs mysql related shell scripts and sql files in the proper locations
+# under $POLICY_HOME. It also adds the MySQL client bin to the PATH based on configuration.
+#
+function install_mysql() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	install_prereqs "${BASE_CONF}"
+
+	if ! process_configuration "${COMPONENT_TYPE}.conf"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
+		exit 1
+	fi
+	
+	MYSQL_DATA_PATH=${POLICY_HOME}/data/mysql
+	/bin/mkdir -p ${MYSQL_DATA_PATH} > /dev/null 2>&1
+	
+	/bin/cp -f "${POLICY_HOME}"/install/mysql/data/* "${MYSQL_DATA_PATH}"
+	/bin/chmod 555 "${MYSQL_DATA_PATH}"/*
+	
+	MYSQL_BIN_SOURCE=${POLICY_HOME}/install/mysql/bin
+	/bin/mkdir -p ${POLICY_HOME}/bin > /dev/null 2>&1
+	for script in $(/bin/ls "${MYSQL_BIN_SOURCE}"); do
+		/bin/cp ${MYSQL_BIN_SOURCE}/${script} ${POLICY_HOME}/bin
+		/bin/chmod 555 "${POLICY_HOME}/bin/${script}"
+	done
+}
+
+function configure_mysql() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	# nothing to do
+}
+
+# This function installs brmsgw related shell scripts and config files in the proper
+# locations under $POLICY_HOME. 
+#
+
+function install_brmsgw() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	install_prereqs "${BASE_CONF}"
+
+	if ! process_configuration "${COMPONENT_TYPE}.conf"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
+		exit 1
+	fi
+	
+	if [ -z "$M2_HOME" ]; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: M2_HOME must be set in brmsgw.conf"
+		exit 1
+	fi
+	
+	echo "export M2_HOME=$M2_HOME" >>$POLICY_HOME/etc/profile.d/env.sh
+
+	/bin/cp -f "${POLICY_HOME}/install/servers/brmsgw/init.d/brmsgw" "${POLICY_HOME}/etc/init.d/brmsgw"
+	
+	if ! /bin/mkdir -p "${POLICY_HOME}/servers/${COMPONENT_TYPE}" > /dev/null 2>&1; then	
+		echo "error: aborting base installation: cannot create ${POLICY_HOME}/servers/${COMPONENT_TYPE}"
+		exit 1
+	fi	
+	
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/BRMSGateway.jar "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/*.properties "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/config "${POLICY_HOME}/servers/${COMPONENT_TYPE}"
+	
+	/bin/mv $POLICY_HOME/m2 $HOME/.m2
+
+	return 0
+}
+
+
+function install_logparser() {
+	if [[ $DEBUG == y ]]; then
+		echo "-- ${FUNCNAME[0]} $@ --"
+		set -x
+	fi
+	
+	install_prereqs "${BASE_CONF}"
+
+	if ! process_configuration "${COMPONENT_TYPE}.conf"; then
+		echo "error: aborting ${COMPONENT_TYPE} installation: cannot process configuration ${COMPONENT_TYPE}.conf"
+		exit 1
+	fi
+	
+	LP_TARGET_DIR=${POLICY_HOME}/servers/${COMPONENT_TYPE}
+	/bin/mkdir -p ${LP_TARGET_DIR}/bin > /dev/null 2>&1
+	/bin/mkdir -p ${LP_TARGET_DIR}/logs > /dev/null 2>&1
+	
+	# copy binaries, initialization script and configuration
+	/bin/cp "${POLICY_HOME}"/install/servers/common/logparser/bin/*jar "${LP_TARGET_DIR}/bin"
+	/bin/cp "${POLICY_HOME}/install/servers/common/logparser/init.d/logparserd" "${POLICY_HOME}/etc/init.d/${COMPONENT_TYPE}"
+	/bin/cp "${POLICY_HOME}/install/servers/${COMPONENT_TYPE}/bin/parserlog.properties" "${LP_TARGET_DIR}/bin"
+	/bin/cp -fr "${POLICY_HOME}"/install/servers/${COMPONENT_TYPE}/bin/config "${POLICY_HOME}/servers/${COMPONENT_TYPE}/bin"
+	
+}
+
+#########################################################################
+##
+## script execution body
+##
+#########################################################################
+
+
+OPERATION=none
+COMPONENT_TYPE=none
+DEBUG=n
+
+BASE_CONF=base.conf
+
+TOMCAT_PACKAGE_NAME=apache-tomcat-8.0.23
+
+INSTALL_DIR="$(pwd)"
+
+export POLICY_USER=$(/usr/bin/id -un)
+
+# command line options parsing
+until [[ -z "$1" ]]; do
+	case $1 in
+		-d|--debug) 	DEBUG=y
+						set -x
+						;;
+		-i|--install) 	OPERATION=install
+						shift
+						COMPONENT_TYPE=$1
+						;;
+		-c|--configure)	OPERATION=configure
+						shift
+						COMPONENT_TYPE=$1
+						;;
+		*)				usage
+						exit 1
+						;;
+	esac
+	shift
+done
+
+# component-type validation
+case $COMPONENT_TYPE in
+	base)	;;
+	pypdp)	;;
+	pdp)	;;
+	pap)	;;
+	console)	;;
+	mysql)	;;
+	brmsgw)	;;
+	paplp)	;;
+	pdplp)	;;
+	skip)	;;
+	*)		echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pypdp|pdp|pap|console|mysql|brmsgw|paplp|pdplp}";
+			usage
+			exit 1
+			;;
+esac
+
+# operation validation
+case $OPERATION in
+	install|configure)	;;
+	*)		echo "invalid operation (${OPERATION}): must be in {install|configure}";
+			usage
+			exit 1
+			;;
+esac
+
+if [[ -n ${POLICY_GROUP} ]]; then
+	groups=$(groups)
+	if ! echo ${groups} | grep -qP "\b${POLICY_GROUP}"; then
+		echo "error: ${POLICY_GROUP} is not a valid group for account ${POLICY_USER}"
+		exit 1
+	fi
+fi
+
+if [[ -z ${POLICY_GROUP} ]]; then
+	numGroups=$(groups | sed "s/^.*: *//g" | wc -w)
+	if [ ${numGroups} -eq 1 ]; then
+		export POLICY_GROUP=$(groups ${POLICY_USER} | sed "s/^.*: *//g")
+	else
+		echo "error: ${POLICY_USER} belongs to multiple groups, one group \
+              must be provided for the installation"
+		usage
+		exit 1
+	fi
+fi
+
+if [[ -z ${POLICY_GROUP} ]]; then
+	echo "error: installation of root section must not provide the \
+	      installation group owner argument."
+	usage
+	exit 1
+fi
+
+FQDN=$(hostname -f 2> /dev/null)
+if [[ $? != 0 || -z ${FQDN} ]]; then
+	echo "error: cannot determine the FQDN for this host $(hostname)."
+	exit 1
+fi
+
+if [[ ${OPERATION} == install ]]; then
+	case $COMPONENT_TYPE in
+		base)	
+			install_base
+			;;
+		pypdp)
+			install_tomcat_component
+			;;
+		pdp)	
+			install_tomcat_component
+			;;
+		pap)
+			install_tomcat_component
+			;;
+		console)
+			install_tomcat_component
+			;;
+		mysql)
+			install_mysql
+			;;
+		brmsgw)
+			install_brmsgw
+			;;
+		paplp|pdplp)
+			install_logparser
+			;;
+		*)		
+			echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pypdp|pdp|pap|console|mysql|brmsgw|paplp|pdplp}";
+			usage
+			exit 1
+			;;
+	esac
+fi
+if [[ ${OPERATION} == configure ]]; then
+
+	install_prereqs "${BASE_CONF}"
+
+	case $COMPONENT_TYPE in
+		base)	
+			configure_base
+			component_preconfigure
+			;;
+		pypdp)
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		pdp)	
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		pap)
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		console)
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		mysql)
+			configure_mysql
+			;;
+		brmsgw)
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		paplp|pdplp)
+			configure_component "${COMPONENT_TYPE}.conf" "${POLICY_HOME}/servers/${COMPONENT_TYPE}/"
+			;;
+		*)		
+			echo "invalid component type (${COMPONENT_TYPE}): must be in {base|pypdp|pdp|pap|console|mysql|brmsgw|paplp|pdplp}";
+			usage
+			exit 1
+			;;
+	esac
+fi
+
+
+echo -n "Successful ${OPERATION} of ${COMPONENT_TYPE} under ${POLICY_USER}:${POLICY_GROUP} "
+echo "ownership with umask $(umask)."