Hello !

j'ai un script (non optimisé ) en expect afin de me connecter et pousser des firmwares sur des équipements réseau. Généralement, ça peut demander une interaction "humaine" afin de valider la commande, d'où la nécessité d'utiliser "expect".

Mon script fonctionne mais je me suis rendu compte que des équipements sont stackés et donc je pousse mon image sur le 1er équipement du stack mais pas sur les N autres vu que je ne teste pas avant de savoir combien j'ai d'équipements.

Question donc :

comment faire un test pour récupérer le nombre d'équipement que j'ai dans un slot afin de pouvoir récupérer cette valeur et après faire une boucle en fonction de la valeur X ?

mon script (pas du tout optimisé je pense, et je crois qu'il me pète une erreur à la fin mais ça fonctionne quand même, donc je suis preneur des modifications possibles) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/expect
#expect.sh
set username USER
set password PASSWORD
set image IMAGE
 
set ip_file "switches.txt"
set fid [open $ip_file r]
 
while {[gets $fid ip] != -1} {
 
 
 
spawn ssh $username@$ip
expect "password"
send "$password\n"
 
sleep 1
 
send "sys \n"
 
sleep 1
 
send "dns server XXX.XXX.XXX \n"
 
sleep 1
 
send "dns server XXX.XXX.XXX \n"
 
sleep 1
 
send "dns resolve \n"
 
sleep 1
 
send "quit \n"
 
sleep 1
 
send "delete /unreserved *.bin \n"
 
sleep 1
 
expect "Continue"
send "y\n"
 
sleep 1
 
send "tftp XXX.XXX.XXX get $image \n"
 
sleep 1
 
send "boot-loader file $image slot all main \n"
 
sleep 1
 
expect "Continue"
send "y\n"
 
sleep 1
 
send "save force \n"
 
sleep 1
 
send "quit \n"
 
interact
 
}
 
close $fid
ma commande que je tape pour voir le nombre de slot sur le stack :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
dis device | inc Slot
 Slot 1
 Slot 2
 Slot 3
 Slot 4
 Slot 5
donc comment en faire une condition pour pouvoir faire une boucle ?

merci pour vos retours avisés !