Files
Automatisation-Reseau/TP-02/scripts/run_netmiko.py
2025-11-14 21:30:34 +01:00

196 lines
6.0 KiB
Python

import json
from netmiko import ConnectHandler
def question_9(net_connect):
print(net_connect.__dict__)
print("Adresse IP :", net_connect.host)
print("Device type :", net_connect.device_type)
def question_10(net_connect):
output = net_connect.send_command("show ip interface brief")
print(output)
def question_11(net_connect):
output = net_connect.send_command("show ip interface brief", use_textfsm=True)
print(type(output))
def question_12(net_connect):
pass
def question_13(net_connect):
output = net_connect.send_command("show ip route", use_textfsm=True)
print(output)
print(type(output))
def question_14(net_connect):
interfaces_status = net_connect.send_command("show ip interface brief", use_textfsm=True)
print("État des interfaces du routeur R1 :")
#print(interfaces_status)
for iface in interfaces_status:
intf_name = iface['interface']
print(f"\nConfiguration de l'interface {intf_name} :")
config = net_connect.send_command(f"show run interface {intf_name}")
print(config)
def question_15(net_connect):
# Liste de commandes pour créer l'interface Loopback
loopback_cmds = [
"interface loopback1",
"ip address 192.168.1.1 255.255.255.255",
"description loopback interface from netmiko",
"no shutdown"
]
# Exécution des commandes en mode configuration
output = net_connect.send_config_set(loopback_cmds)
print("Résultat de la configuration :")
print(output)
# Sauvegarder la configuration
save_output = net_connect.save_config()
print("\nConfiguration sauvegardée :")
print(save_output)
def question_16(net_connect):
# Exécution en mode configuration
output = net_connect.send_config_set("no interface loopback1")
print("Résultat de la suppression de loopback1 :")
print(output)
# Sauvegarder la configuration
save_output = net_connect.save_config()
print("\nConfiguration sauvegardée après suppression :")
print(save_output)
def question_17(net_connect):
# Lire les commandes depuis le fichier
with open("config/loopback_R01.conf", "r") as f:
commands = [line.strip() for line in f if line.strip()] # ignore les lignes vides
# Exécuter les commandes en mode configuration
output = net_connect.send_config_set(commands)
print("Résultat de l'exécution des commandes :")
print(output)
# Sauvegarder la configuration
save_output = net_connect.save_config()
print("\nConfiguration sauvegardée :")
print(save_output)
def question_18(net_connect):
for i in range(1, 5):
loopback_name = f"loopback{i}"
commands = [f"no interface {loopback_name}"]
print(f"\nSuppression de l'interface {loopback_name} :")
output = net_connect.send_config_set(commands)
print(output)
# Sauvegarder la configuration
save_output = net_connect.save_config()
print("\nConfiguration sauvegardée :")
print(save_output)
def get_inventory():
"""
Lit le fichier inventory/hosts.json et retourne son contenu.
"""
inventory_file = "inventory/hosts.json"
try:
with open(inventory_file, "r") as f:
data = json.load(f)
return data
except FileNotFoundError:
print(f"Erreur : le fichier {inventory_file} n'existe pas.")
return []
def question_20():
pass
def question_21():
inventory = get_inventory()
for device in inventory:
print(f"\n=== Connexion au routeur {device['hostname']} ({device['ip']}) ===")
try:
# Connexion au routeur
net_connect = ConnectHandler(
device_type=device["device_type"],
host=device["ip"],
username=device["username"],
password=device["password"]
)
# Commande à exécuter
command = "show run interface GigabitEthernet0/0.99"
output = net_connect.send_command(command)
print(f"\nConfiguration de GigabitEthernet0/0.99 sur {device['hostname']} :\n")
print(output)
net_connect.disconnect()
except Exception as e:
print(f"❌ Erreur sur {device['hostname']} : {e}")
def question_22():
inventory = get_inventory()
for device in inventory:
# On ne traite pas les routeurs dont le hostname != 'R1' de ESW1
if 'R1' == device["hostname"] or 'ESW1' == device["hostname"]:
continue
print(f"\n=== Connexion au routeur {device['hostname']} ({device['ip']}) ===")
try:
# Paramètres de connexion
device_params = {
'device_type': device['device_type'],
'host': device['ip'],
'username': device['username'],
'password': device['password']
}
net_connect = ConnectHandler(**device_params)
net_connect.enable()
# affiche le hostname
print(f"Connexion réussie sur {device['hostname']}")
config_file = f'config/vlan_{device["hostname"]}.conf'
output = net_connect.send_config_from_file(config_file)
print(f"\nRésultat de l'application de la configuration sur {device['hostname']} :\n{output}")
# Sauvegarde la configuration
save_output = net_connect.save_config()
print(f"\nSauvegarde de la configuration sur {device['hostname']} :\n{save_output}")
net_connect.disconnect()
except Exception as e:
print(f"❌ Erreur sur {device['hostname']} : {e}")
if __name__ == "__main__":
#question_9(net_connect)
#question_10(net_connect)
#question_11(net_connect)
#question_12(net_connect)
#question_13(net_connect)
#question_14(net_connect)
#question_15(net_connect)
#question_16(net_connect)
#question_17(net_connect)
#question_18(net_connect)
hosts = get_inventory()
#print(hosts)
#question_20()
#question_21()
question_22()