summaryrefslogtreecommitdiffstats
path: root/bin/control_rancid
diff options
context:
space:
mode:
authorTar Committer <tar@ocjtech.us>2000-11-19 22:01:05 +0000
committerTar Committer <tar@ocjtech.us>2000-11-19 22:01:05 +0000
commit1651adc35224e149715bd85af4ba108c5ee184bc (patch)
treef83b6af44ffb10f2c042b822b2f3469582a129ca /bin/control_rancid
parent3861ba4cf180eb01fd98a16f4502702ab217e56f (diff)
downloadrancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.gz
rancid-1651adc35224e149715bd85af4ba108c5ee184bc.tar.xz
rancid-1651adc35224e149715bd85af4ba108c5ee184bc.zip
Imported from rancid-2.0.tar.gz.rancid-2.0
Diffstat (limited to 'bin/control_rancid')
-rwxr-xr-xbin/control_rancid259
1 files changed, 0 insertions, 259 deletions
diff --git a/bin/control_rancid b/bin/control_rancid
deleted file mode 100755
index 2c367d6..0000000
--- a/bin/control_rancid
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/bin/sh
-##
-##
-## Copyright (C) 1996 by Henry Kilmer.
-## All rights reserved.
-##
-## This software may be freely copied, modified and redistributed without
-## fee for non-commerical purposes provided that this copyright notice is
-## preserved intact on all copies and modified copies.
-##
-## There is no warranty or other guarantee of fitness of this software.
-## It is provided solely "as is". The author(s) disclaim(s) all
-## responsibility and liability with respect to this software's usage
-## or its effect upon hardware, computer systems, other software, or
-## anything else.
-##
-##
-#
-# control_rancid $GROUP
-#
-
-# Number of things par should run in parallel.
-PAR_COUNT=5
-
-# Must specify a group to run rancid
-if [ $# -lt 1 ]; then
- echo 'must specify group'; exit 1
-else
- GROUP=$1
-fi
-TMP=/var/tmp/rancid.$GROUP.$$
-DIR=$BASEDIR/$GROUP
-
-# Bail if we do not have the necessary info to run
-if [ ! -d $DIR ]
-then
- (
- echo "$DIR does not exist."
- ) | Mail -s "no $GROUP directory" rancid-admin-$GROUP
- exit 1
-fi
-if [ ! -f $DIR/router.db ]
-then
- (
- echo "$DIR/router.db does not exist."
- ) | Mail -s "no $GROUP/router.db file" rancid-admin-$GROUP
- exit 1;
-elif [ ! -s $DIR/router.db ]
-then
- exit
-fi
-
-# generate the list of routers we should try to fetch
-cd $DIR
-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] =~ /^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 [ $RALL -ne 0 -o $RDOWN -ne 0 -o $RUP -ne 0 ]
-then
- (
- 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/routers.up $DIR/routers.up.new`
- do
- OFS=$IFS
- IFS=:
- set $router
- IFS=$OFS
- router=$1
-
- touch $router
- cvs add -ko $router
- cvs commit -m 'new router' $router
- echo "Added $router"
- done
- echo
- cd $DIR
-
-fi
-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 routers.up ]
-then
- # commit router.db
- cvs commit -m updates router.db > /dev/null
- exit;
-fi
-
-# Now we can actually try to get the configs
-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/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/routers.up.missed ]; then
- rm -f $DIR/routers.up.missed
-fi
-while [ $round -le $pass ]
-do
- for router in `cat $DIR/routers.up`
- do
- OFS=$IFS
- IFS=':'
- set $router
- IFS=$OFS
- router=$1; mfg=$2
-
- if [ ! -s $router.new ]
- then
- echo "$router:$mfg" >> $DIR/routers.up.missed
- rm -f $router.new
- fi
- done
-
- 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."
- round=`expr $pass + 1`
- fi
-done
-echo
-
-# Make sure that all of the new configs are not empty.
-for config in *.new
-do
- if [ ! -s $config ]
- then
- rm -f $config
- fi
-done
-
-# Now that we have the new configs, rename them to their proper
-# name.
-rename 's/.new$//' *.new
-
-# This has been different for different machines...
-# Diff the directory and then checkin.
-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
-/^--- /d
-/^+++ /d
-s/^\([-+ ]\)/\1 /
-EOF
-cvs -f diff -u -4 | sed -f $TMP.sedf >$TMP.diff
-rm -f $TMP.sedf
-
-cvs commit -m updates
-
-# Mail out the diffs (if there are any).
-if [ -s $TMP.diff ]; then
- sendmail -t <<EMAIL
-To: rancid-$GROUP
-Subject: $GROUP router config diffs
-Precedence: bulk
-
-`cat $TMP.diff`
-EMAIL
-fi
-
-# If any machines have not been reached within the last $OLDTIME
-# hours, mail out a list of them.
-cd $DIR/configs
-rm -f $DIR/routers.failed
-if [ "X$OLDTIME" = "X" ] ; then
- OLDTIME=24
-fi
-perl -F: -ane "{\$t = (stat(\$F[0]))[9]; print \`ls -ld \$F[0]\`
- if (time() - \$t >= $OLDTIME*60*60);}" $DIR/routers.up | sort -u > $DIR/routers.failed
-if [ -s $DIR/routers.failed ]
-then
- (
- cat <<END
-The following routers have not been successfully contacted for more
-than $OLDTIME hours.
-
-END
- cat $DIR/routers.failed
- ) | Mail -s "config fetcher problems - $GROUP" rancid-admin-$GROUP
-fi
-
-# Cleanup
-rm -f $TMP.diff $TMP.lst