Con

From Initech Technical Wiki
Revision as of 21:46, 9 May 2016 by Timprice (talk | contribs)
Jump to: navigation, search

If you initialise con with no arguments it gives you a full list of all devices registered in rancid.

con

Con.png


If you initialise it with a keyword it gives you a list of the devices which name or description match the keyword

con corp

Con-corp.png


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

$ 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