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 <HOST> '<FEX_ID1 FEX_ID2 FEX_ID3...>'
#
# Example:
# ./cisco_show_interfaces_fex_mac-address_table.expect USA-SW-CLI04 "101 102 103"
#
# DISABLE OUTPUT BUFFERING
fconfigure stdout -buffering none
set timeout 10
set HOST [lindex $argv 0]
set FEX_ID_LIST [lindex $argv 1]
puts "HOST : $HOST"
puts "FEX_ID_LIST : $FEX_ID_LIST"
# SSH CONNECTION
spawn ssh cyconnect@$HOST
# WAIT FOR SWITCH PROMPT
expect "$HOST#"
# PROCESS EACH FEX
foreach FEX $FEX_ID_LIST {
puts ""
puts "===== FEX : $FEX ====="
# GET ENABLED INTERFACES
send "show interface status fex $FEX | include enabled\r"
expect "$HOST#"
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 "show mac-address interface $INTERFACE"
send "show mac-address interface $INTERFACE\r"
expect "$HOST#"
# PRINT COMMAND OUTPUT
puts $expect_out(buffer)
# DON'T SPAM THE SWITCH
sleep 1
}
}
# EXIT
send "exit\r"
expect eof
exit 0
