You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

132 lines
4.4 KiB

#!/bin/sh
##
## soe.sh -- Systems of Engagement (SoE) utility
##
if [ $# -eq 0 ]; then
echo "USAGE: soe config"
echo "USAGE: soe start"
echo "USAGE: soe stop"
echo "USAGE: soe suspend"
echo "USAGE: soe resume"
exit 0
fi
nodeinfo () {
nodetype="unknown"
nodeaddr=""
hostname=`hostname`
i=0
while [ $i -lt 100 ]; do
h=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "platform.nodes.$i.host"`
if [ ".h" = ".$hostname" ]; then
nodetype="platform"
a1=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "platform.nodes.$i.addr.ext"`
a2=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "platform.nodes.$i.addr.int"`
nodeaddr="$a1,$a2"
break
fi
i=`expr $i + 1`
done
if [ ".$type" = ".unknown" ]; then
i=0
while [ $i -lt 100 ]; do
h=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "farm.nodes.$i.host"`
if [ ".h" = ".$hostname" ]; then
nodetype="farm"
a1=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "farm.nodes.$i.addr.ext"`
a2=`@l_prefix@/bin/yaml get @l_prefix@/etc/soe/soe.yaml "farm.nodes.$i.addr.int"`
nodeaddr="$a1,$a2"
break
fi
i=`expr $i + 1`
done
fi
echo "$nodetype,$nodeaddr"
}
cmd="$1"
shift
case "$cmd" in
status )
# show host status
echo "++ SoE: host status"
nodeinfo=`nodeinfo`
nodetype=`echo "$nodeinfo" | sed -e 's;,.*$;;'`
nodeaddrext=`echo "$nodeinfo" | sed -e 's;^[^,]*,;;' -e 's;,.*$;;'`
nodeaddrint=`echo "$nodeinfo" | sed -e 's;^[^,]*,[^,]*,;;'`
echo "-- hostname: `hostname`"
echo "-- nodetype: $nodetype"
echo "-- address: $nodeaddrext (external)"
echo "-- address: $nodeaddrint (internal)"
;;
config )
# configure all services
echo "++ SoE: edit configutation"
${EDITOR-vi} @l_prefix@/etc/soe/soe.yaml
nodeinfo=`nodeinfo`
nodetype=`echo "$nodeinfo" | sed -e 's;,.*$;;'`
nodeaddrext=`echo "$nodeinfo" | sed -e 's;^[^,]*,;;' -e 's;,.*$;;'`
nodeaddrint=`echo "$nodeinfo" | sed -e 's;^[^,]*,[^,]*,;;'`
if [ ".$type" = .unknown ]; then
echo "soe: ERROR: unable to determine SoE type of current host" 1>&2
exit 1
fi
tmpfile1=@l_prefix@/var/soe/tmp/soe.$$.1
tmpfile2=@l_prefix@/var/soe/tmp/soe.$$.2
( @l_prefix@/bin/yaml2json <@l_prefix@/etc/soe/soe.yaml
echo ""
echo "host:"
echo " arch: `uname -m`"
echo " os: `uname -s`"
echo " nodetype: $nodetype"
echo " hostname: `hostname`"
echo " addr:"
echo " ext: $nodeaddrext"
echo " int: $nodeaddrint"
) >$tmpfile1
echo "++ SoE: (re)configuring all services"
for name in `grep "^<file" @l_prefix@/etc/soe/soe.tmpl | sed -e 's;^.*name=";;' -e 's;".*$;;'`; do
name_escaped=`echo "$name" | sed -e 's;/;\\\\/;g'`
(echo ""; cat @l_prefix@/etc/soe/soe.tmpl; echo "") |\
sed -e "1,/^<file name=\"$name_escaped\"/d" -e "/<\/file>/,\$d" >$tmpfile2
nt=`grep "^<file name=\"$name_escaped\"" @l_prefix@/etc/soe/soe.tmpl | sed -e 's;^.*nodetype=";;' -e 's;".*$;;'`
if [ ".$nt" = ".$nodetype" ]; then
echo "-- generating: $name"
case "$name" in
@l_prefix@/etc/* ) ;;
* ) echo "soe: ERROR: invalid configuration file path \"$name\"" 1>&2; exit 1 ;;
esac
@l_prefix@/bin/njx -d $tmpfile1 -t $tmpfile2 >$name
fi
done
rm -f $tmpfile1
rm -f $tmpfile2
;;
start )
# start all services
echo "++ SoE: starting all services"
@l_prefix@/bin/openpkg rc all start
;;
suspend )
# suspend all services
echo "++ SoE: suspending all services"
# FIXME
;;
resume )
# resume all services
echo "++ SoE: resuming all services"
# FIXME
;;
stop )
# stop all services
echo "++ SoE: stopping all services"
@l_prefix@/bin/openpkg rc all stop
;;
esac