From b24aa5051db5d4bf9757efe7df06cb1892898382 Mon Sep 17 00:00:00 2001 From: Tar Committer Date: Thu, 3 Feb 2000 17:55:28 +0000 Subject: Imported from rancid-1.4.tar.gz. --- bin/control_rancid | 107 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 29 deletions(-) (limited to 'bin/control_rancid') diff --git a/bin/control_rancid b/bin/control_rancid index 89ec0df..0728e7e 100755 --- a/bin/control_rancid +++ b/bin/control_rancid @@ -52,26 +52,58 @@ fi # generate the list of routers we should try to fetch cd $DIR -rm -f $DIR/allrouters.new +grep -v '^#' router.db > routers.db +cut -d: -f1,2 routers.db | sort -u > routers.all.new +diff routers.all routers.all.new > /dev/null 2>&1; RALL=$? perl -F: -ane '{($F[0] =~ tr@A-Z@a-z@,print "$F[0]:$F[1]\n") - if ($F[2] =~ /^up$/i);}' $DIR/router.db | sort -u > $DIR/allrouters.new + if ($F[2] =~ /^down$/i);}' routers.db | sort -u > routers.down.new +diff routers.down routers.down.new > /dev/null 2>&1; RDOWN=$? +perl -F: -ane '{($F[0] =~ tr@A-Z@a-z@,print "$F[0]:$F[1]\n") + if ($F[2] =~ /^up$/i);}' routers.db | sort -u > routers.up.new +diff routers.up routers.up.new > /dev/null 2>&1; RUP=$? -if diff $DIR/allrouters $DIR/allrouters.new > $DIR/allrouters.diffs +if [ $RALL -ne 0 -o $RDOWN -ne 0 -o $RUP -ne 0 ] then - rm -f $DIR/allrouters.new -else ( - echo New routers: - comm -13 $DIR/allrouters $DIR/allrouters.new | sed -e 's/^/ /' -e 's/:.*$//' - echo - echo Deleted routers: - comm -23 $DIR/allrouters $DIR/allrouters.new | sed -e 's/^/ /' -e 's/:.*$//' - ) | Mail -s "changes in $GROUP routers" rancid-admin-$GROUP + if [ $RUP -ne 0 ] ; then + if [ $RUP -eq 1 ] ; then + echo Routers changed to up: + comm -13 routers.up routers.up.new | sed -e 's/^/ /' -e 's/:.*$//' + echo + elif [ -s routers.up.new ] ; then + echo Routers changed to up: + sed -e 's/^/ /' -e 's/:.*$//' routers.up.new + echo + fi + fi + if [ $RDOWN -ne 0 ] ; then + if [ $RDOWN -eq 1 ] ; then + echo Routers changed to down: + comm -13 routers.down routers.down.new | sed -e 's/^/ /' -e 's/:.*$//' + echo + elif [ -s routers.down.new ] ; then + echo Routers changed to down: + sed -e 's/^/ /' -e 's/:.*$//' routers.down.new + echo + fi + fi + WC=`wc -l routers.all | sed -e 's/^ *\([^ ]*\) .*$/\1/'` + WCNEW=`wc -l routers.all.new | sed -e 's/^ *\([^ ]*\) .*$/\1/'` + if [ $RALL -eq 1 -a $WC -gt $WCNEW ] ; then + echo Deleted routers: + comm -23 routers.all routers.all.new | sed -e 's/^/ /' -e 's/:.*$//' + fi + ) > routers.mail + + if [ -s routers.mail ] ; then + Mail -s "changes in $GROUP routers" rancid-admin-$GROUP < routers.mail + fi + rm -f routers.mail cd $DIR/configs # Add new routers to the CVS structure. - for router in `comm -13 $DIR/allrouters $DIR/allrouters.new` + for router in `comm -13 $DIR/routers.up $DIR/routers.up.new` do OFS=$IFS IFS=: @@ -87,14 +119,31 @@ else echo cd $DIR - mv $DIR/allrouters.new $DIR/allrouters fi -rm -f $DIR/allrouters.diffs $DIR/allrouters.new +mv routers.all.new routers.all +mv routers.down.new routers.down +mv routers.up.new routers.up +rm -f routers.db + +# cvs delete configs for routers not listed in routers.up. +cd $DIR/configs +for router in `find . \( -name \*.new -prune -o -name CVS -prune \) -o -type f -print | sed -e 's/^.\///'` ; do + grep "^$router:" ../router.db > /dev/null 2>&1 + if [ $? -eq 1 ]; then + rm -f $router + cvs delete $router + cvs commit -m 'deleted router' $router + echo "Deleted $router" + fi +done +cd $DIR # no routers, empty list or all 'down' -if [ ! -s $DIR/allrouters ] +if [ ! -s routers.up ] then - exit; + # commit router.db + cvs commit -m updates router.db > /dev/null + exit; fi # Now we can actually try to get the configs @@ -103,22 +152,19 @@ cd $DIR/configs # The number of processes running at any given time can be # tailored to the specific installation. echo "Trying to get all of the configs." -par -q -n $PAR_COUNT -c "rancid-fe \{}" $DIR/allrouters +par -q -n $PAR_COUNT -c "rancid-fe \{}" $DIR/routers.up # This section will generate a list of missed routers # and try to grab them again. It will run through # $pass times. pass=4 round=1 -if [ -f $DIR/allrouters.missed ]; then - rm -f $DIR/allrouters.missed +if [ -f $DIR/routers.up.missed ]; then + rm -f $DIR/routers.up.missed fi while [ $round -le $pass ] do - echo "=====================================" - echo "Getting missed routers: round $round." - - for router in `cat $DIR/allrouters` + for router in `cat $DIR/routers.up` do OFS=$IFS IFS=':' @@ -126,15 +172,17 @@ do IFS=$OFS router=$1; mfg=$2 - if [ ! -f $DIR/configs/$router.new ] + if [ ! -f $router.new ] then - echo "$router:$mfg" >> $DIR/allrouters.missed + echo "$router:$mfg" >> $DIR/routers.up.missed fi done - if [ -f $DIR/allrouters.missed ]; then - par -q -n $PAR_COUNT -c "rancid-fe \{}" $DIR/allrouters.missed - rm -f $DIR/allrouters.missed + if [ -f $DIR/routers.up.missed ]; then + echo "=====================================" + echo "Getting missed routers: round $round." + par -q -n $PAR_COUNT -c "rancid-fe \{}" $DIR/routers.up.missed + rm -f $DIR/routers.up.missed round=`expr $round + 1` else echo "All routers sucessfully completed." @@ -152,6 +200,7 @@ rename 's/.new$//' *.new cd $DIR #cvs diff -c3 >$TMP.diff #cvs diff -C 3 >$TMP.diff +# Change the output of a unified diff to make it a bit more readable. cat > $TMP.sedf << EOF /^RCS file: /d #/^retrieving revision /d @@ -180,7 +229,7 @@ fi cd $DIR/configs rm -f $DIR/routers.failed perl -F: -ane '{$t = (stat($F[0]))[9]; print `ls -ld $F[0]` - if (time() - $t >= 86400);}' $DIR/allrouters | sort -u > $DIR/routers.failed + if (time() - $t >= 86400);}' $DIR/routers.up | sort -u > $DIR/routers.failed if [ -s $DIR/routers.failed ] then ( -- cgit