EXPECT - cisco show fex mac-address table.expect
From IT-Arts.net
#!/usr/bin/expect -f
#
# USAGE:
# ./cisco_show_interfaces_fex_mac-address_table.expect <IP> <USER> <PASSWORD> '<FEX_ID1 FEX_ID2 FEX_ID3...>'
#
# Example:
# ./cisco_show_interfaces_fex_mac-address_table.expect 1.2.3.4 ADMIN PASSWORD "101 102 103"
#
# DISABLE OUTPUT BUFFERING
fconfigure stdout -buffering none
set timeout 10
set IP [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWORD [lindex $argv 2]
set FEX_ID_LIST [lindex $argv 3]
# puts "FEX_ID_LIST : $FEX_ID_LIST"
# SSH CONNECTION
spawn ssh $USER@$IP
expect "*assword: "
send "$PASSWORD\r"
expect "#"
# WAIT FOR SWITCH PROMPT
expect "#"
# PROCESS EACH FEX
foreach FEX $FEX_ID_LIST {
puts ""
puts "===== FEX : $FEX ====="
# GET CONNECTED INTERFACES
send "show interface status fex $FEX | include connected\r"
expect "#"
set RAW_UP_INTERFACE_LIST $expect_out(buffer)
# BUILD THE INTERFACE LIST
set UP_INTERFACE_LIST {}
foreach line [split $RAW_UP_INTERFACE_LIST "\n"] {
# REMOVE CARRIAGE RETURNS
regsub -all {\r} $line "" line
# MATCH INTERFACE NAME AT BEGINNING OF LINE
if {[regexp {^(Eth[0-9/]+)} $line -> iface]} {
lappend UP_INTERFACE_LIST $iface
}
}
puts "Interfaces found:"
puts $UP_INTERFACE_LIST
# QUERY MAC ADDRESSES ON EACH INTERFACE
foreach INTERFACE $UP_INTERFACE_LIST {
puts ""
puts "===== show mac address-table interface $INTERFACE ====="
send "show mac address-table interface $INTERFACE\r"
expect "#"
# DON'T SPAM THE SWITCH
sleep 1
# PRINT COMMAND OUTPUT
# puts $expect_out(buffer)
}
}
# EXIT
send "exit\r"
expect eof
exit 0
