Dans le blog précédent, nous avons vu comment récupérer l’état des voisins OSPF pour un seul périphérique. Maintenant, nous allons appliquer la même logique mais pour plusieurs périphériques réseau en utilisant Netmiko.
Tout d’abord ! le cas brut sans parsers ! ensuite avec parsers et on termine avec un cas d’application pour récupérer quelques données utiles.
On va garder la même topologie. Voila le lien du blog précédent : https://community.cisco.com/t5/discussions-de-routage-et-commutation/quel-est-l-%C3%A9tat-des-voisins-ospf-de-vos-p%C3%A9riph%C3%A9riques-r%C3%A9seau/td-p/4923547
Voila le script pour le premier cas:
# Import the ConnectHandler Function to create an Object for R1
from netmiko import ConnectHandler
# Parameters of Devices
password = "cisco"
R1 = {
"device_type": "cisco_ios",
"host": "192.168.1.251",
"username": "Admin",
"password": password,
}
R2 = {
"device_type": "cisco_ios",
"host": "192.168.1.252",
"username": "Admin",
"password": password,
}
R3 = {
"device_type": "cisco_ios",
"host": "192.168.1.253",
"username": "Admin",
"password": password,
}
Devices=[R1, R2, R3]
# Connect to R1 via SSH
for Device in Devices:
net_connect = ConnectHandler(**Device)
# Retrieve the result of "show ip ospf neighbor" command with the hostname of each device and display it
print(net_connect.find_prompt()[:-1])
output = net_connect.send_command('show ip ospf neighbor')
print(output)
print(90*'*')
# End the SSH session
net_connect.disconnect()
Voilà le résultat !
Comme nous l’avons indiqué, cet affichage est bien adapté pour l’être humain ! Pour le cas d’applications, nous avons besoins des données structurées dans des conteneurs : donc l’utilisation des parsers !
Voila la modification du script précédent ! Notons qu’on utilise TextFSM:
# Import the ConnectHandler Function to create an Object for R1
from netmiko import ConnectHandler
from pprint import pprint
# Parameters of Devices
password = "cisco"
R1 = {
"device_type": "cisco_ios",
"host": "192.168.1.251",
"username": "Admin",
"password": password,
}
R2 = {
"device_type": "cisco_ios",
"host": "192.168.1.252",
"username": "Admin",
"password": password,
}
R3 = {
"device_type": "cisco_ios",
"host": "192.168.1.253",
"username": "Admin",
"password": password,
}
Devices=[R1, R2, R3]
# Connect to R1 via SSH
for Device in Devices:
net_connect = ConnectHandler(**Device)
# Retrieve the result of "show ip ospf neighbor" command with the hostname of each device and display it
print(net_connect.find_prompt()[:-1])
output = net_connect.send_command('show ip ospf neighbor', use_textfsm=True)
pprint(output)
print(90*'*')
# End the SSH session
net_connect.disconnect()
Et le résultat !
Maintenant, on va essayer d’appliquer le même résonnement qu’avec le blog précédent pour monter l’utilité des parsers ! Pour chaque routeur, on va récupérer le ID de ses voisins OSPF, les interfaces locales directement connectées aux voisins et les adresses IP des voisins pour leurs interfaces connectées au routeur cible en question ! Ce n’est pas compliqué, voilà le script !:
# Import the ConnectHandler Function to create an Object for R1
from netmiko import ConnectHandler
# Parameters of Devices
password = "cisco"
R1 = {
"device_type": "cisco_ios",
"host": "192.168.1.251",
"username": "Admin",
"password": password,
}
R2 = {
"device_type": "cisco_ios",
"host": "192.168.1.252",
"username": "Admin",
"password": password,
}
R3 = {
"device_type": "cisco_ios",
"host": "192.168.1.253",
"username": "Admin",
"password": password,
}
Devices=[R1, R2, R3]
# Connect to R1 via SSH
for Device in Devices:
net_connect = ConnectHandler(**Device)
# Retrieve the result of "show ip ospf neighbor" command with the hostname of each device and display it
print(120*'*')
print(net_connect.find_prompt()[:-1])
output = net_connect.send_command('show ip ospf neighbor', use_textfsm=True)
# For each neighbor N: access to its ID, Interface, Address and State
for N in output:
Id, Interface, Address, State=N.get('neighbor_id'), N.get('interface'), N.get('address'), ((N.get('state')).split('/'))[1]
print(f"Neighbor {Id}\n - Connected to it via the interface: {Interface} having the address: {Address}, its state is {State}")
# End the SSH session
net_connect.disconnect()
Et le résultat !
Dans le blog suivant, nous allons voir comment appliquer le même cas avec un autre framework! à bientôt !
Voilà le lien du répertoire sur Github: https://github.com/cherifimehdi/OSPF_neighbors_Netmiko_Multi_Devices
Like it et Star it sur Github si vous l'avez trouvé utile! Merci