#!/usr/bin/expect #Expect script to backup config of foundry devices #Joe McManus #Set some vars set timeout 60 set user "telnet" set password "password" set foundry "foundry.foo.bar.com" set basedir "/mnt/netapp/backups/foundry.foo.bar.com" set log "[timestamp -format %Y-%m-%d]-config.txt" set mailto "joe@foo.com" set mailsubject "Error: foundry backup failed [timestamp -format %Y-%m-%d] " set mailfail "" set prompt "telnet@FLS648" send_user "Foundry Backup Script\n" send_user "Connecting to $foundry\n" spawn telnet $foundry expect { "Password:" { send "$password\r" expect { "$prompt" { send_user "Connected" } "failure" { send_user "Invalid password, exiting" set mailfail "Invalid password, exiting" close } timeout { send_user "No prompt returned" set mailfail "No prompt returned" close } } } "No route to host" { send_user "Unable to connect to $foundry\n" set mailfail "Unable to connect to $foundry\n" } "Name or service not known" { send_user "Unable to connect to $foundry\n" set mailfail "Unable to connect to $foundry\n" } timeout{ send_user "Timeout conncting to $foundry" set mailfail "Timeout conncting to $foundry" close } } if { $mailfail != "" } { exec /bin/mail -s$mailsubject $mailto << " $mailfail" exit } #Now that that is over, continue #Disable the "more" prompt send "enable\r" expect { "$prompt Switch#" { send_user "Enabled" } default { send_user "Enable failed" set mailfail "ScreenOS did not except paging option." close } } if { $mailfail != "" } { exec /bin/mail -s$mailsubject $mailto << " $mailfail" exit } send "skip-page-display\r" expect { "Disable page display mode*$prompt" { send_user "\nPaging Disabled\n" } default { send "ScreenOS did not except paging option.\n" set mailfail "ScreenOS did not except paging option." close } timeout { send_user "ScreenOS did not except paging option\n" set mailfail "ScreenOS did not except paging option." close } } if { $mailfail != "" } { exec /bin/mail -s$mailsubject $mailto << " $mailfail" exit } send_user "Downloading Configuration\n" log_file $basedir/$log send "show running\r" expect { "$prompt" { log_file send_user "\nConfiguration Downloaded\n" } timeout { send_user "\nError during configuration download." set mailfail "Error during configuration download." } } close if { $mailfail != "" } { exec /bin/mail -s$mailsubject $mailto << " $mailfail" exit } set filesize [file size $basedir/$log] if { $filesize <= 512 } { send_user "Netscreen config is too small, please investigate\n" set mailfail "Netscreen config is too small, please investigate\n" exec /bin/mail -s$mailsubject $mailto << " $mailfail" exit } #Remove config older than 2 weeks exec find $basedir -name '*config.txt*' -mtime +14