Con
From Initech Technical Wiki
If you initialise con with no arguments it gives you a full list of all devices registered in rancid.
con
If you initialise it with a keyword it gives you a list of the devices which name or description match the keyword
con corp
Either way selecting a device and pressing enter will login to that device by automatically figuring out the correct login binary to use.
The code below is the bash script itself, it requires the 'dialog' package to be installed (yum install dialog)
$ cat /usr/local/bin/con
#!/bin/bash
if [ `whoami` != "rancid" ]; then
echo "You must be the rancid user to run this, exiting"
exit
fi
if [ ! -z "$1" ] && [ -z `echo $1 | sed -r -e "s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])//g"` ]; then
if egrep -q "\s$1\s" ~rancid/.cloginrc; then
IP=$1
else
dialog --yesno "That IP address doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0
if [ "$?" != "0" ]; then
clear
exit
else
IP=$1
fi
fi
elif [ ! -z "$1" ] && egrep -q "\s$1\$" /etc/hosts ; then
if egrep -q "\s$1\s" ~rancid/.cloginrc; then
IP=$1
else
dialog --yesno "That hostname, while existing in the /etc/hosts file, doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0
if [ "$?" != "0" ]; then
clear
exit
else
IP=$1
fi
fi
else
if [ -z "$1" ] ; then
IP_LIST=`cat ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"`
else
IP_LIST=`egrep -i -A 1 $1 ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"`
fi
if [ -z "$IP_LIST" ]; then
dialog --yesno "Couldn't find anything that matched that term, would you like a full list instead?" 0 0
if [ "$?" = "0" ]; then
$0
fi
clear
exit
fi
declare -a MENU_OPTIONS
COUNT=0
for IP in $IP_LIST
do
DESC=`egrep -B 1 "\s$IP\s" ~rancid/.cloginrc | egrep "^(\s*)?#" | sed -r -e "s/(\s*)?#(\s*)?//g"`
MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${IP}" )
MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${DESC}" )
COUNT=$((COUNT+1))
done
if [ "$COUNT" -gt "1" ] ; then
dialog --menu "The following devices match your search term of $1 please select one to connect" 0 0 0 "${MENU_OPTIONS[@]}" 2>/tmp/menu-selection
if [ "$?" != "0" ]; then
clear
exit
else
IP=$(</tmp/menu-selection)
unlink /tmp/menu-selection
fi
fi
fi
for GROUP in `grep '^LIST_OF_GROUPS' /etc/rancid/rancid.conf | sed -r -e "s/LIST_OF_GROUPS(\s*)?=(\s*)?\"(.*)\"/\3/"`
do
TYPE=`grep "^${IP}:" ~rancid/${GROUP}"/router.db" | awk -F: '{print $2}'`
if [ -z $TYPE ]; then
dialog --yesno "Couldn't find a manufacturer type for $IP in any router.db file, you should probably add it. If you want i can assume that it's a Cisco and try and connect anyway?" 0 0
if [ "$?" != "0" ]; then
clear
exit
else
clear
clogin $IP
fi
else
LOGIN_COMMAND=`egrep "\s"\'"${TYPE}"\'"\s" ~rancid/bin/rancid-fe | awk '{print $3}' |sed -r -e s/\'\(,\)\?//g | xargs -I arg1 egrep "\s*open\(INPUT,\".*login " ~rancid/bin/arg1 |awk '{print $1}' |sed -e s/open\(INPUT,\"//`
fi
$LOGIN_COMMAND $IP
done