У меня есть два сценария, которые я использую вместе. Это потому, что у меня есть большое количество команд, которые необходимо отправлять маршрутизаторам / коммутаторам большими партиями.
Полное раскрытие Я не писал эти сценарии, они были написаны кем-то, кто больше не работает со мной, и я очень мало знаю об ожиданиях.
Первый сценарий (сценарий A) - это то, что позволяет мне выполнять сценарий сразу на нескольких устройствах из центрального блока, одновременно выводя результаты сценария в файл.
#!/bin/bash
let j=0;
let sleeptime=20;
let numberInstance=20;
if [ $# -lt "3" ]
then
echo "Missing Parameters:"
echo "start <script-name> <output-directory> <sites-file>"
exit 1
fi
for s in `cat ${3}`
do
echo Processing: $s on `date`;
./$1 ${s}${4} > ./$2/${s}-${4} &
let j+=1;
if [ `expr $j % $numberInstance` -eq 0 ]
then
echo sleeping for ${sleeptime} seconds...sites processed: $j;
sleep $sleeptime;
fi
done
Второй сценарий (сценарий B) - это ожидаемый сценарий, который порождает и запускает сеанс S SH на устройстве и отправляет список команд на устройство.
Это работает просто отлично, но в тех случаях, когда оно не может достичь Сценарий устройства A возвращает ошибку из сценария B:
$ ./start_sw_FAST LH108_S2 Results/LH108_S2 inputlist
Processing: Site1 on Thu Mar 19 14:31:07 EDT 2020
Processing: Site2 on Thu Mar 19 14:31:07 EDT 2020
Processing: Site3 on Thu Mar 19 14:31:07 EDT 2020
Processing: Site4 on Thu Mar 19 14:31:07 EDT 2020
$ can not find channel named ""
while executing
"send "edit\r""
(file "./LH108_S2" line 69)
can not find channel named ""
while executing
"send "edit\r""
(file "./LH108_S2" line 69)
can not find channel named ""
while executing
"send "edit\r""
(file "./LH108_S2" line 69)
В этом случае я знаю, что эти местоположения потерпят неудачу. Но когда я запускаю это на сотнях одновременно, мне бы хотелось, чтобы в подсказке было что-то вроде:
Failed to execute script on Site1.
Failed to execute script on Site2.
Failed to execute script on Site3.
Failed to execute script on Site4.
Я не уверен, как я могу заставить Сценарий А знать о Сценарии Сбои Б.
1017 * Ожидаемый сценарий:
#!/usr/bin/expect
proc _jgetRouterIPs {} {
set file [open router-list r]
while {![eof $file]} {
set buff [read $file ]
}
close $file
return $buff
}
proc ssh2rtr { rtr usr pwd } {
spawn ssh -l $usr $rtr;
set sess_id $spawn_id;
set ppret [ processPrompts $rtr $usr $pwd $sess_id 0 ];
if { $ppret == 0 } {
return $spawn_id;
else { return -1;}
}}
proc processPrompts { rtr usr pwd sess_id status } {
set timeout 666;
set spawn_id $sess_id;
set fw_prompt {\nuser@[0-9]{4}\-[A-Z]{2}-S2[>|#]{1}};
set fwprompt1 {user@[0-9]{4}-[A-Z]{2}-S2\%\s};
if { $status < 2 } {
expect {
-re $fw_prompt { return 0;}
-re $fwprompt1 {send "cli\r"; return 0;}
"no)?" { send "yes\r";
processPrompts $rtr $usr $pwd $sess_id 0;
}
"assword:" {
send "${pwd}\r";
if { $status} { return 1;}
processPrompts $rtr $usr $pwd $sess_id 1;
}
timeout { send_user "\nTimeout on SSH!!!\n"; return 8; } ;#no response from telnet/ssh
default { send_user "\nSSH Unknown Error!!!\n"; return 9; } ;#unknown error has occurred.
} ;#end expect
} ;#end if
}
set site [lindex $argv 0];
set sw1 "${site}s1";
set sw2 "${site}s2";
set fw "${site}fw1";
set fw_prompt {\nuser@[0-9]{4}\-[A-Z]{2}-S2[>#]{1}};
set fw_prompt1 {user@[0-9]{4}-[A-Z]{2}-S2%\s};
set sshret [ ssh2rtr $sw2 user NotMyPassword ]
if { $sshret != -1 } {
set spawn_id $sshret;
} else {
send_user "Error Connecting...!!!";
}
set timeout 666;
send "edit\r";
expect -re $fw_prompt;
send "rollback\r";
expect -re $fw_prompt;
*more commands will go here*