#!/bin/bash if grep -q union=aufs /proc/cmdline || grep -q aufs /proc/filesystems ; then export UNIONFS=aufs else export UNIONFS=unionfs fi UMASK_SAVE_G=`umask` umask 0111 XORPLOGFILE=/tmp/xorp_tmpl_tool.log touch ${XORPLOGFILE} umask 0002 #need to pass in value to change... as part of set command... ## cli ENV_EDIT_LEVEL export VYATTA_EDIT_LEVEL=/; ## cli ENV_TEMPLATE_LEVEL export VYATTA_TEMPLATE_LEVEL=/; ## cli ENV_A_DIR export VYATTA_ACTIVE_CONFIGURATION_DIR=/opt/vyatta/config/active; mkdir -p $VYATTA_ACTIVE_CONFIGURATION_DIR #now need to grab the parent pid. ## XXX eventually, we will use each session's bash shell pid for this. ## however, for now, to interact with XORP we will rely on a global lock ## instead of separate config dirs. #export VTID=$PPID export VTID=XORP # lock for XORP export XORP_LOCK="/opt/vyatta/config/active/.xorp.lck" ## cli ENV_C_DIR export VYATTA_CHANGES_ONLY_DIR=/opt/vyatta/config/tmp/changes_only_$VTID; mkdir -p $VYATTA_CHANGES_ONLY_DIR ## cli ENV_M_DIR export VYATTA_TEMP_CONFIG_DIR=/opt/vyatta/config/tmp/new_config_$VTID; if [ ! -d $VYATTA_TEMP_CONFIG_DIR ] then mkdir -p $VYATTA_TEMP_CONFIG_DIR sudo mount -t $UNIONFS -o dirs=${VYATTA_CHANGES_ONLY_DIR}=rw:/opt/vyatta/config/active=ro $UNIONFS ${VYATTA_TEMP_CONFIG_DIR} fi ## cli ENV_TMP_DIR export VYATTA_CONFIG_TMP=/opt/vyatta/config/tmp/tmp_$VTID; mkdir -p $VYATTA_CONFIG_TMP RET_STATUS=0 #this needs to be the array string of commands, something like $[*] or whatever echo "Command: ${@}" | grep -v -i password >> ${XORPLOGFILE} #echo "ConfigDirectories BEFORE ========>>>>>>" >> ${XORPLOGFILE} #find /opt/vyatta/config -name "*" -print | grep interface >> ${XORPLOGFILE} #echo "<=========ConfigDirectories BEFORE" >> ${XORPLOGFILE} ## for tracing command-line XRL calls. ## 1 => info level ## 2 => warning level #export CL_XRLTRACE=2 UMASK_SAVE=`umask` umask 0111 MYCMDERRLOGFILE=/tmp/my_cmd_err_${RANDOM}.log rm -rf ${MYCMDERRLOGFILE} umask ${UMASK_SAVE} case "$1" in set) /opt/vyatta/sbin/my_set "${@:2}" >>${XORPLOGFILE} 2>>${MYCMDERRLOGFILE} RET_STATUS=$? if [ $RET_STATUS != 0 ]; then rm -rf $XORP_LOCK >&/dev/null fi ;; delete) /opt/vyatta/sbin/my_delete "${@:2}" >>${XORPLOGFILE} 2>>${MYCMDERRLOGFILE} RET_STATUS=$? if [ $RET_STATUS != 0 ]; then rm -rf $XORP_LOCK >&/dev/null fi ;; commit) /opt/vyatta/sbin/my_commit >>${XORPLOGFILE} 2>>${MYCMDERRLOGFILE} RET_STATUS=$? rm -rf $XORP_LOCK >&/dev/null ;; test) "${@:2}" RET_STATUS=$? ;; cleanup) LOCKTRYCOUNTER=0 LOCKTRYSTATUS=-1 while [[ ${LOCKTRYCOUNTER} -lt 60 && ${LOCKTRYSTATUS} -ne 0 ]] ; do if mkdir $XORP_LOCK >&/dev/null ; then LOCKTRYSTATUS=0 else LOCKTRYCOUNTER=`expr ${LOCKTRYCOUNTER} + 1` sleep 1; fi done if [ ${LOCKTRYCOUNTER} -ge 60 ] ; then echo "Cannot unlock configuration" >> ${MYCMDERRLOGFILE} rm -rf ${XORP_LOCK} mkdir $XORP_LOCK >&/dev/null fi sudo umount ${VYATTA_TEMP_CONFIG_DIR} sudo rm -rf $VYATTA_CHANGES_ONLY_DIR/* $VYATTA_CHANGES_ONLY_DIR/.modified sudo mount -t $UNIONFS -o dirs=${VYATTA_CHANGES_ONLY_DIR}=rw:/opt/vyatta/config/active=ro $UNIONFS ${VYATTA_TEMP_CONFIG_DIR} RET_STATUS=0 ;; end_loading) sudo umount ${VYATTA_TEMP_CONFIG_DIR} sudo rm -rf ${VYATTA_CHANGES_ONLY_DIR} sudo rm -rf ${VYATTA_CONFIG_TMP} sudo rm -rf ${VYATTA_TEMP_CONFIG_DIR} RET_STATUS=0 ;; rtrmgr_indirect_cleanup) # do nothing now that we handle XORP interaction differently. RET_STATUS=0 ;; *) rm -rf ${MYCMDERRLOGFILE} exit 1 ;; esac if [ -f ${MYCMDERRLOGFILE} ] ; then echo -n "STDERR:" >>${XORPLOGFILE} cat ${MYCMDERRLOGFILE} >>${XORPLOGFILE} echo "end of STDERR" >>${XORPLOGFILE} cat ${MYCMDERRLOGFILE} 1>&2 rm -rf ${MYCMDERRLOGFILE} fi #echo "ConfigDirectories AFTER ========>>>>>>" >> ${XORPLOGFILE} #find /opt/vyatta/config -name "*" -print | grep interface >> ${XORPLOGFILE} #echo "<=========ConfigDirectories AFTER" >> ${XORPLOGFILE} echo "ret=${RET_STATUS}" >> ${XORPLOGFILE} umask ${UMASK_SAVE_G} exit $RET_STATUS # Local Variables: # mode: shell-script # sh-indentation: 4 # End: