====== SAN config Upload Expect ====== #!/usr/bin/expect #Andrew Stringer, 09/09/2010 #Purpose is to automate saving SAN switch to backup02 server #This is to be run from within the backup shell script #variables are set in the scell script. #Completely rewritten to work with both firmware revisions #Sample transcript of the session to automate #Older firmware #[backupsan@monitor01 ~]$ ssh -l admin gy-fcs1-01 #admin@gy-fcs1-01's password: #gy-fcsw1-01:admin> configupload #Protocol (scp or ftp) [ftp]: scp #Server Name or IP Address [host]: gy--mon01 #User Name [user]: backupsan #File Name [config.txt]: /home/backupsan/backupfiles/ajs11.txt #backupsan@gy--mon01's password: #Upload complete #gy-fcs1-01:admin> exit #logout #Connection to gy-fcs1-01 closed. #[backupsan@gy--mon01 ~]$ #Newer firmware #[backupsan@monitor01 ~]$ ssh -l admin gy-fcs1-04 #admin@gy-fcs1-04's password: # #----------------------------------------------------------------- #gy-fcs1-04:FID128:admin> configupload #Protocol (scp, ftp, local) [ftp]: scp #Server Name or IP Address [host]: gy--mon01 #User Name [user]: backupsan #Path/Filename [/config.txt]: /home/backupsan/backupfiles/ajs12.txt #Section (all|chassis|FID# [all]): all #backupsan@gy--mon01's password: # #configUpload complete: All selected config parameters are uploaded #gy-fcs1-04:FID128:admin> set force_conservative 1 ;# set to 1 to force conservative mode even if ;# script wasn't run conservatively originally if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg } } # # Process the configupload commands set SWITCH [lindex $argv 0] set SWITCHUSER [lindex $argv 1] set SWITCHPASS [lindex $argv 2] set SWITCHLOGIN [lindex $argv 3] set SWITCHPROMPT [lindex $argv 4] set BACKUPHOST [lindex $argv 5] set BACKUPUSER [lindex $argv 6] set BACKUPPASS [lindex $argv 7] set BACKUPFILE [lindex $argv 8] set timeout 15 spawn $env(SHELL) match_max 100000 #Login send -- "ssh -l ${SWITCHUSER} ${SWITCH}\r" expect { default {exit 0} "Permission denied" {exit 1} "password:" {send -- "${SWITCHPASS}\r"} } #send -- "${SWITCHPASS}\r" #get prompt and start upload #gy-fcs1-01:admin> #or #gy-fcs1-04:FID128:admin> expect "admin>" send -- "configupload\r" #Choose scp from options #Protocol (scp or ftp) [ftp]: #or #Protocol (scp, ftp, local) [ftp]: scp expect "scp" send -- "scp\r" #host name for sending config file expect "host" send -- "${BACKUPHOST}\r" #Remote User name expect "user" send -- "${BACKUPUSER}\r" #send file and path remote expect "config.txt" send -- "${BACKUPFILE}.conf\r" #Only on later firmware, earlier firmware does not ask #Section (all|chassis|FID# [all]): all expect "all" {send -- "all\r"} #send remote password expect { default {exit 0} "failed" {exit 2} "password:" {send -- "${BACKUPPASS}\r"} } #All done, time to quit! expect { default {exit 3} "complete" } send -- "exit\r" exit 0