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
Copyright © Cloud Software Group, Inc. All rights reserved.
