L’automatisation réseau avec Python a explosé ces dernières années. Trois bibliothèques dominent l’écosystème : Netmiko, NAPALM et Nornir. Chacune répond à un besoin différent.
Netmiko : SSH multi-vendor simplifié
Netmiko est une couche d’abstraction sur Paramiko qui prend en charge les particularités de chaque équipementier (Cisco IOS, Juniper, Arista, HP…).
from netmiko import ConnectHandler
device = {
'device_type': 'cisco_ios',
'host': '192.168.1.1',
'username': 'admin',
'password': 'secret',
}
with ConnectHandler(**device) as conn:
output = conn.send_command('show ip interface brief')
print(output)
# Configurer
commands = [
'interface GigabitEthernet0/1',
'description Uplink-vers-core',
'no shutdown',
]
conn.send_config_set(commands)
Idéal pour : les opérations ponctuelles, les scripts de collecte de données, les environnements multi-vendor sans API REST disponible.
NAPALM : abstraction multi-OS orientée état
NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support) propose une API unifiée qui abstrait les différences entre OS réseau.
from napalm import get_network_driver
driver = get_network_driver('eos') # Arista EOS
device = driver('192.168.1.1', 'admin', 'secret')
device.open()
# Récupérer l'état — même API pour Cisco, Juniper, Arista
facts = device.get_facts()
interfaces = device.get_interfaces()
# Comparer la configuration actuelle avec celle désirée
device.load_merge_candidate(filename='desired.cfg')
diff = device.compare_config()
print(diff)
device.commit_config()
device.close()
Idéal pour : la validation de configuration, la comparaison avant/après changement, les workflows de change management.
Nornir : orchestration multi-équipements parallèle
Nornir est un framework d’orchestration qui exécute des tâches sur des inventaires d’équipements en parallèle. Là où Netmiko gère un équipement à la fois, Nornir en gère des centaines simultanément.
from nornir import InitNornir
from nornir_netmiko.tasks import netmiko_send_command
from nornir_utils.plugins.functions import print_result
nr = InitNornir(config_file="config.yaml")
# Filtrer par groupe ou tag
core_switches = nr.filter(role="core")
# Exécuter en parallèle sur tous les équipements filtrés
result = core_switches.run(
task=netmiko_send_command,
command_string="show version"
)
print_result(result)
Idéal pour : les opérations à grande échelle, l’audit de parc réseau, les déploiements de configuration en masse.
Quelle bibliothèque choisir ?
Besoin ponctuel / petit parc → Netmiko
Validation d'état / change management → NAPALM
Large parc / opérations en masse → Nornir
Les trois ne s’excluent pas : Nornir peut utiliser Netmiko et NAPALM comme backends. Une architecture courante : Nornir pour l’orchestration + NAPALM pour l’abstraction multi-vendor.
Notre formation Python pour l’automatisation inclut un module réseau avec des labs sur ces trois bibliothèques.