pushd ~/test/ine.ccie.rsv5.workbook.initial.configs > /dev/null
CONFIG_DIR=""
CONFIG_DIR_PRE=""
LIST=($(dir | egrep "^" | awk -F. '{print $1}' | sort | uniq))
GNS3HOST=127.0.0.1
BASEPORT=2100
TFTPHOST=192.168.200.200
function sendconfig () {
pushd $CONFIG_DIR > /dev/null
ROUTER_NUM=`expr $(ls -l R*.cfg | wc -l) + 1`
expect -c "
match_max 20
set timeout 5
log_user 0
log_file -noappend -a /tmp/sendconfig.log
set i 1
while {\$i < $ROUTER_NUM} {
puts \"------------------------------------------------------------\"
puts [exec \"date\"]
send_user \"Send config to R\$i...\"
puts \"\r\n------------------------------------------------------------\"
set PORT [expr $BASEPORT + \$i]
spawn telnet $GNS3HOST \$PORT
set timeout 1
expect \"Connection refused\" {
send_user \"\\033\\[1;31m\"
send_user \"R\$i connect NG!\r\n\"
send_user \"\\033\\[0;39m\"
incr i 1
continue
}
#if {\$i==1} { exp_internal 1} else { exp_internal 0 }
send \"\r\n\"
expect \"R\$i\\u0007\"
send \"\r\n\r\n\"
expect \"\r\n\r\nR\$i#\"
set timeout 60
send \"config replace tftp://$TFTPHOST/$CONFIG_DIR.\$i.cfg force\r\n\"
expect {
\"\r\nError: \" {
send \"config replace tftp://$TFTPHOST/default.R\$i.cfg force\r\n\"
expect \"Rollback Done\"
set timeout 1
send \"\r\n\"
expect \"R\$i#\"
set fp [open \"R\$i.cfg\"]
while {! [eof \$fp]} {
gets \$fp line
send \"\$line\r\n\"
expect \"R\$i\(\"
}
close \$fp
expect \"R\$i#\"
set timeout 60
send \"\copy run tftp://$TFTPHOST/$CONFIG_DIR.\$i.cfg\r\n\"
expect \"]\"
send \"\r\n\"
expect \"]\"
send \"\r\n\"
expect \"R\$i#\"
close
}
\"\r\nRollback Done\" {
expect \"R\$i#\"
close
}
}
incr i 1
}
if {[file exists \"SW1.cfg\"]} {
set i 1
while {\$i < 5} {
puts \"------------------------------------------------------------\"
puts [exec \"date\"]
send_user \"Send config to SW\$i...\"
puts \"\r\n--------------------------------------------------------\"
set PORT [expr $BASEPORT + 10 + \$i]
spawn telnet $GNS3HOST \$PORT
send \"\r\n\r\n\"
expect \"SW\$i#\"
set fp [open \"SW\$i.cfg\"]
while {! [eof \$fp]} {
gets \$fp line
send \"\$line\r\n\"
expect \"SW\$i\(\"
}
close \$fp
expect \"SW\$i#\"
incr i 1
}
}
send_user \"send Configuration done.\r\n\"
exit
"
popd > /dev/null
}
if [ ! -z $1 ]; then
CONFIG_DIR=$1
echo ------------------------------------------------------------
echo SELECTED: [ $CONFIG_DIR ]
echo ------------------------------------------------------------
sendconfig
exit
fi
PS3="complete=0 > "
while :
do
clear
echo ------------------------------------------------------------
echo SELECTED: [ $CONFIG_DIR ]
echo ------------------------------------------------------------
if [ ${#LIST[*]} -eq 0 ]; then
break
fi
select SEL in ${LIST[*]}
do
if [ ${REPLY} = "q" ]; then
echo "Exit Menu."
exit 0;
else
case "${REPLY}" in
"t" )
echo "Goto Top."
CONFIG_DIR=""
NUMBER_OF_FIELD=0
break
;;
"u" )
if [ ${NUMBER_OF_FIELD} -gt 1 ]; then
let NUMBER_OF_FIELD=${NUMBER_OF_FIELD}-1
CONFIG_DIR=${CONFIG_DIR_PRE}
else
NUMBER_OF_FIELD=0
CONFIG_DIR=""
CONFIG_DIR_PRE=""
fi
break
;;
"0" )
if [ -d $CONFIG_DIR ]; then
break 2
fi
echo "### Directory NOT Exist! ###"
continue
;;
* )
if [ -z $SEL ]; then
if [ ! -z $CONFIG_DIR ] && [ -d $CONFIG_DIR ]; then
break 2
fi
echo "### Directory NOT Exist! ###"
continue 2
fi
if [ -z $CONFIG_DIR ]; then
NUMBER_OF_FIELD=1
CONFIG_DIR=${SEL}
else
CONFIG_DIR_PRE=${CONFIG_DIR}
CONFIG_DIR=${CONFIG_DIR}.${SEL}
NUMBER_OF_FIELD=`echo "$CONFIG_DIR" | awk -F. '{print NF}'`
fi
esac
fi
break
done
LIST=($(dir | egrep "^${CONFIG_DIR}" | awk -v NUMFIELD=$NUMBER_OF_FIELD -F. 'BEGIN{NUMFIELD = NUMFIELD + 1} {print $NUMFIELD}' | sort | uniq))
done
sendconfig
popd > /dev/null