Example Azure Sfengine Script

The following is an example of an Sfengine script for Azure

#!/bin/bash
### BEGIN INIT INFO
# Provides:          dsengine
# Required-Start:    $network nfs syslog network-remotefs
# Required-Stop:
# Default-Start:     3 4 5
# Default-Stop:      1 2
# Short-Description: engine daemon makes this host part of Tibco Silver private cloud
# Description:       The engine daemon logs into a Tibco Silver broker
#	and makes this host part of broker engine inventory.
### END INIT INFO


/bin/rm /var/log/sfengine.log
echo "$0 $1" >> /var/log/sfengine.log

CUSTOM_DATA=$(cat /var/lib/cloud/instance/user-data.txt)
echo "Custom Data : $CUSTOM_DATA" >> /var/log/sfengine.log

ASSET_MANAGER_ID=$(echo $CUSTOM_DATA | awk -F';' '{print $1}')
PUBLIC_HOSTNAME=$(echo $CUSTOM_DATA | awk -F';' '{print $2}')
INSTANCE_TYPE=$(echo $CUSTOM_DATA | awk -F';' '{print $3}')
LOCATION=$(echo $CUSTOM_DATA | awk -F';' '{print $4}')
VNET_NAME=$(echo $CUSTOM_DATA | awk -F';' '{print $5}')
SUBNET_NAME=$(echo $CUSTOM_DATA | awk -F';' '{print $6}')
GROUP=$(echo $CUSTOM_DATA | awk -F';' '{print $7}')


HOSTNAME=${PUBLIC_HOSTNAME}
export HOSTNAME
hostname $HOSTNAME

BROKER_OPTIONS=$(echo $CUSTOM_DATA | awk -F';' '{print $8}')

echo "Broker options: $BROKER_OPTIONS " >> /var/log/sfengine.log

RESOURCES_NFS_OPTIONS=$(echo $CUSTOM_DATA | awk -F';' '{print $9}')
echo "Resources nfs mount options: $RESOURCES_NFS_OPTIONS " >> /var/log/sfengine.log

RESOURCES_NFS_MOUNT=$(echo $CUSTOM_DATA | awk -F';' '{print $10}')
echo "Resources nfs local mount point: $RESOURCES_NFS_MOUNT " >> /var/log/sfengine.log

DATA_NFS_OPTIONS=$(echo $CUSTOM_DATA | awk -F';' '{print $11}')
echo "Data nfs options: $DATA_NFS_OPTIONS " >> /var/log/sfengine.log

DATA_NFS_MOUNT=$(echo $CUSTOM_DATA | awk -F';' '{print $12}')
echo "Data nfs mount: $DATA_NFS_MOUNT " >> /var/log/sfengine.log

RESOURCES2_NFS_OPTIONS=$(echo $CUSTOM_DATA | awk -F';' '{print $13}')
echo "Resources2 nfs options: $RESOURCES2_NFS_OPTIONS " >> /var/log/sfengine.log

RESOURCES2_NFS_MOUNT=$(echo $CUSTOM_DATA | awk -F';' '{print $14}')
echo "Resources2 nfs mount: $RESOURCES2_NFS_MOUNT " >> /var/log/sfengine.log

GROUP=$(echo $CUSTOM_DATA | awk -F';' '{print $15}')
echo "Group: $GROUP " >> /var/log/sfengine.log

DSENGINE=/opt/DSEngine
echo "DSEngine install dir is $DSENGINE " >> /var/log/sfengine.log
cd $DSENGINE

# Check for missing shell script
ENGINE_SH=engine.sh
test -x $ENGINE_SH || { echo "$ENGINE_SH not installed";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 5; fi; }

# Check for existence of needed config file
ENGINE_CONFIG=configure.sh
test -x $ENGINE_CONFIG || { echo "$ENGINE_CONFIG not existing";
        if [ "$1" = "stop" ]; then exit 0;
        else exit 6; fi; }

if [ "$1" == "start" -o "$1" == "restart" ]
then
	if [ "${BROKER_OPTIONS}" != "" ]
	then
		## Configure engine
		echo "configuring engine" >> /var/log/sfengine.log
        	sudo -u fabric ./$ENGINE_CONFIG ${BROKER_OPTIONS} >> /var/log/sfengine.log
	else
		echo "Error: no broker options found" >> /var/log/sfengine.log
        	exit 6
	fi
fi


# init status of this service
rc=0

case "$1" in
    start)
        echo "Starting engine " >> /var/log/sfengine.log

	# mount resources directory
	if [ "${RESOURCES_NFS_OPTIONS}" != "" ]
	then
		TEST_NFS=`service nfs status | grep -i warning`
		while [ "$TEST_NFS" != "" ]
		do
			sleep 5 
			TEST_NFS=`service nfs status | grep -i warning`
		done
		service nfs status >> /var/log/sfengine.log
		## NFS resources directory
		if  [ "${RESOURCES_NFS_MOUNT}" != "" ]
		then
			echo "Mounting ${RESOURCES_NFS_OPTIONS} " >> /var/log/sfengine.log
			mkdir -p $RESOURCES_NFS_MOUNT
			chown -R fabric $RESOURCES_NFS_MOUNT
			chgrp -R fabric $RESOURCES_NFS_MOUNT
			mount -t nfs ${RESOURCES_NFS_OPTIONS} ${RESOURCES_NFS_MOUNT}
		fi

	else
		## local resources directory
		mkdir -p /mnt/resources
		chown -R fabric /mnt/resources
		chgrp -R fabric /mnt/resources
		rm -rf ./resources
		ln -s /mnt/resources ./resources
	fi

	if [ "${DATA_NFS_OPTIONS}" != "" ]
	then
		## NFS resources directory
		if [ "${DATA_NFS_MOUNT}" != "" ]
		then
			mkdir -p $DATA_NFS_MOUNT
			chown -R fabric $DATA_NFS_MOUNT
			chgrp -R fabric $DATA_NFS_MOUNT
			echo "Mounting ${DATA_NFS_OPTIONS} " >> /var/log/sfengine.log
			mount -t nfs ${DATA_NFS_OPTIONS} ${DATA_NFS_MOUNT}
		fi
	fi

	if [ "${RESOURCES2_NFS_OPTIONS}" != "" ]
	then
		## NFS resources directory
		if [ "${RESOURCES2_NFS_MOUNT}" != "" ]
		then
			mkdir -p $RESOURCES2_NFS_MOUNT
			chown -R fabric $RESOURCES2_NFS_MOUNT
			chgrp -R fabric $RESOURCES2_NFS_MOUNT
			echo "Mounting ${RESOURCES2_NFS_OPTIONS} " >> /var/log/sfengine.log
			mount -t nfs ${RESOURCES2_NFS_OPTIONS} ${RESOURCES2_NFS_MOUNT}
		fi
	fi

	## cleanup
	/bin/rm -rf work data profiles boot.log .#dsDirID

	## setup engine session properties
	rm -rf ./engine-session.properties
	echo "azureLocation=$LOCATION" >> ./engine-session.properties
	echo "azureVmType=$INSTANCE_TYPE" >> ./engine-session.properties
	echo "azureVmName=$PUBLIC_HOSTNAME" >> ./engine-session.properties
	echo "azureVnetName=$VNET_NAME" >> ./engine-session.properties
	echo "azureSubnetName=$SUBNET_NAME" >> ./engine-session.properties
	echo "AssetManagerId=$ASSET_MANAGER_ID" >> ./engine-session.properties
	
	echo "alternateRoutingAddress=$PUBLIC_HOSTNAME" >> ./engine-session.properties
	echo "alternateRedirectAddress=$PUBLIC_HOSTNAME" >> ./engine-session.properties

	if [ "$GROUP" != "" ]
	then
		echo "Group=$GROUP" >> ./engine-session.properties
	fi

        ## Start engine
        sudo -u fabric ./$ENGINE_SH start >> /var/log/sfengine.log
	
        [ $? -ne 0 ] && rc=1 
        while [ ! -f profiles/${HOSTNAME}/pid.${HOSTNAME} ]
	do
		sleep 1
	done
        cp "profiles/${HOSTNAME}/pid.${HOSTNAME}" /opt/sfengine.pid
        ;;
    stop)
        echo "Stopping engine " >> /var/log/sfengine.log
        ## Stop engine
        sudo -u fabric ./$ENGINE_SH stop

	# umount nfs directories
	if [ "$RESOURCES_NFS_MOUNT" != "" ]
	then
		umount $RESOURCES_NFS_MOUNT
	fi

	if [ "$DATA_NFS_MOUNT" != "" ]
	then
		umount $DATA_NFS_MOUNT
	fi

	if [ "$RESOURCES2_NFS_MOUNT" != "" ]
	then
		umount $RESOURCES2_NFS_MOUNT
	fi

        # Remember status and be verbose
        [ $? -ne 0 ] && rc=1 
	rm -f /opt/sfengine.pid
        ;;
    restart)
        ## Stop the service and regardless of whether it was
        ## running or not, start it again.
        $0 stop
        $0 start

        # Remember status and be quiet
        [ $? -ne 0 ] && rc=1
        ;;
    reload)
        ## does not support reload:
        rc=3
        ;;
    status)
        echo "Checking for service engine " >> /var/log/sfengine.log
        ## Check status with checkproc(8), if process is running
        ## checkproc will return with exit status 0.

        # Return value is slightly different for the status command:
        # 0 - service up and running
        # 1 - service dead, but /var/run/  pid  file exists
        # 2 - service dead, but /var/lock/ lock file exists
        # 3 - service not running (unused)
        # 4 - service status unknown :-(
        # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

        # NOTE: checkproc returns LSB compliant status values.
        checkproc engine
        # NOTE: rc_status knows that we called this init script with
        # "status" option and adapts its messages accordingly.
        [ $? -ne 0 ] && rc=1
        ;;
    *)
        ## If no parameters are given, print which are avaiable.
        echo "Usage: $0 {start|stop|status|restart|reload}"
        rc=1
        ;;
esac

exit $rc