Hey all. Sometimes I'm tasked to change some router configs for the entire network (over 3,000 Cisco routers). Most of the time its a global config parameter so its done with a loop and an IP list as its the same configuration change for all routers. This is working OK.
However, sometimes an expect script must be generated for ALL routers since the config changes are different for each router. The way we approach it, we divide the routers per regional domains (6 in total), and produce 1 expect script per regional domain. The problem I'm having is that when I schedule these type of expect scripts to run via crontab, they usually get hung anytime a router fails to respond (maintenance, outage, etc). How can I make the script go to the next router if a router cannot be reached? Here's a sample line of the 20K lines:
....
#
set timeout 10
spawn telnet 10.156.112.1
match_max 100000
expect Username:
sleep .1
send -s -- "username\r"
expect Password:
sleep .1
send -s -- "passwordstring\r"
expect *
sleep .1
send -s -- "conf t\r"
expect *
sleep .2
send -s -- "no ip flow-export destination 172.17.187.127 9995\r"
expect *
sleep .2
send -s -- "no ip flow-export destination 10.24.180.110 9995\r"
expect *
sleep .2
send -s -- "ip flow-export destination 172.17.187.188 9995\r"
expect *
sleep .2
send -s -- "ip flow-export destination 10.24.180.110 9995\r"
expect *
sleep .2
send -s -- "end\r"
expect *
sleep .4
send -s -- "wr mem\r"
expect *
sleep .2
send -s -- "exit\r"
expect eof
#
#
set timeout 10
spawn telnet 10.156.112.2
match_max 100000
expect Username:
sleep .1
send -s -- "username\r"
expect Password:
sleep .1
send -s -- "passwordstring\r"
expect *
sleep .1
send -s -- "conf t\r"
expect *
sleep .2
send -s -- "no ip flow-export destination 172.17.187.127 9995\r"
expect *
sleep .2
send -s -- "no ip flow-export destination 10.24.180.110 9995\r"
expect *
sleep .2
send -s -- "ip flow-export destination 172.17.187.188 9995\r"
expect *
sleep .2
send -s -- "ip flow-export destination 10.24.180.110 9995\r"
expect *
sleep .2
send -s -- "end\r"
expect *
sleep .4
send -s -- "wr mem\r"
expect *
sleep .2
send -s -- "exit\r"
expect eof
#
#
Thanks!
Marcos