Script Python réseau : Comment automatiser vos switchs Cisco

Script Python réseau : Comment automatiser vos switchs Cisco

Image by: Brett Sayles

Pourquoi automatiser la configuration des commutateurs Cisco ?

Imaginez devoir configurer manuellement 50 commutateurs Cisco après une panne réseau majeure. Selon Cisco, 95% des interruptions réseau sont causées par des erreurs humaines lors de configurations répétitives. L’automatisation n’est plus un luxe mais une nécessité pour les ingénieurs réseau. Ce tutoriel vous montrera comment concevoir un script Python robuste pour automatiser la configuration de commutateurs Cisco, éliminant les erreurs manuelles et gagnant un temps précieux. Vous apprendrez à maîtriser les bibliothèques spécialisées, sécuriser vos accès et gérer les imprévus efficacement.

L’automatisation apporte des bénéfices tangibles :

  • Réduction de 70% du temps de déploiement (étude Gartner)
  • Diminution de 80% des erreurs de configuration
  • Homogénéité des paramètres sur l’ensemble du parc

Un cas réel : un technicien réseau a automatisé la configuration VLAN sur 200 switches, passant de 8 heures à 15 minutes d’intervention. Cette efficacité transforme radicalement la gestion d’infrastructures critiques.

Présentation des bibliothèques Netmiko et Napalm

Deux bibliothèques Python dominent l’automatisation réseau : Netmiko et Napalm. Netmiko, extension de Paramiko, simplifie les connexions SSH aux équipements. Napalm (Network Automation and Programmability Abstraction Layer) offre une couche d’abstraction unifiée avec des fonctions avancées. Voici leur comparaison technique :

Fonctionnalité Netmiko Napalm
Protocoles supportés SSH, Telnet SSH, API REST
Constructeurs de commandes Bas niveau Abstraction multi-vendor
Rollback automatique Non Oui
Temps d’apprentissage 1-2 jours 3-5 jours
Support Cisco IOS Excellent Bon

Netmiko excelle pour l’envoi direct de commandes CLI, tandis que Napalm brille dans les opérations complexes comme les sauvegardes de configuration ou les comparaisons d’états. Pour débuter l’automatisation de commutateurs Cisco, Netmiko est plus accessible selon l’expert Kirk Byers, créateur de la bibliothèque. Napalm nécessite une courbe d’apprentissage plus raide mais offre une gestion unifiée des équipements multi-vendeurs.

Cas d’utilisation typiques

Avec Netmiko :

  1. Configuration basique VLAN/ports
  2. Collecte d’informations (show interfaces, show version)
  3. Déploiement massif de configurations similaires

Avec Napalm :

  1. Gestion des configurations avec validation
  2. Surveillance des performances réseau
  3. Intégration avec des outils comme Ansible

Mise en place d’un script Python avec Netmiko

Implémentons un script d’automatisation de base pour configurer un commutateur Cisco 2960. Première étape : installer Netmiko via pip (pip install netmiko). Créez un fichier configurateur.py avec cette structure :

from netmiko import ConnectHandler
cisco_switch = {
  ‘device_type’: ‘cisco_ios’,
  ‘host’: ‘192.168.1.1’,
  ‘username’: ‘admin’,
  ‘password’: ‘secret’,
  ‘port’: 22
}
connection = ConnectHandler(**cisco_switch)

Pour configurer un VLAN et activer un port :

  • Préparez les commandes dans une liste Python
  • Envoyez-les avec connection.send_config_set()
  • Toujours fermer la session avec connection.disconnect()

Exemple complet :

config_commands = [‘vlan 100’, ‘name Serveurs’, ‘interface gig0/1’, ‘switchport access vlan 100’]
output = connection.send_config_set(config_commands)
print(output)
connection.disconnect()

Ce script basique réduit une tâche récurrente de 10 minutes à 2 secondes. Pour gérer plusieurs appareils, utilisez une boucle sur un fichier CSV d’adresses IP. Consultez notre guide complet sur Python réseau pour des cas complexes.

Gestion sécurisée des identifiants et des erreurs

Stocker des mots de passe en clair dans un script est une faille critique. Utilisez plutôt :

  1. Le module getpass pour saisie interactive
  2. Le chiffrement avec cryptography.fernet
  3. Les variables d’environnement (dotenv)

Implémentation sécurisée type :

from os import getenv
from dotenv import load_dotenv
load_dotenv()
password = getenv(‘SWITCH_PASSWORD’)

Pour la gestion d’erreurs, encapsulez les opérations dans des blocs try/except :

try:
  connection.send_command(‘bad_command’)
except NetmikoTimeoutException:
  print(« Échec de connexion »)
except NetmikoAuthenticationException:
  print(« Erreur d’authentification »)

Ajoutez toujours un timeout (ex: global_delay_factor=2) pour éviter les blocages. Un bon script doit gérer ces scénarios :

  • Équipement non joignable
  • Commande non supportée
  • Dépassement de capacité mémoire

Des outils comme Python logging journalisent les incidents pour audit. Notre guide de bonnes pratiques couvre ces techniques en détail.

Avancé : Utilisation de Napalm pour une gestion plus robuste

Napalm apporte une approche déclarative à l’automatisation de commutateurs Cisco. Après l’installation (pip install napalm), utilisez les drivers IOS :

from napalm import get_network_driver
driver = get_network_driver(‘ios’)
device = driver(‘192.168.1.1’, ‘admin’, ‘secret’)
device.open()

Avantages clés :

  • Comparaison de configurations avec device.compare_config()
  • Rollback automatique en cas d’échec
  • Collecte structurée de données (JSON)

Exemple de déploiement avec validation :

device.load_merge_candidate(filename=’new_config.txt’)
diff = device.compare_config()
if diff:
  print(diff)
  device.commit_config()
else:
  device.discard_config()

Pour les environnements complexes, intégrez Napalm avec Ansible ou SaltStack. Cela permet des déploiements à l’échelle du datacenter avec des playbooks réutilisables. Napalm supporte aussi les appareils Juniper et Arista, idéal pour les réseaux multi-vendeurs.

Frequently asked questions

Quelle bibliothèque choisir entre Netmiko et Napalm pour débuter ?

Netmiko est recommandée pour les débutants grâce à sa simplicité d’utilisation et sa documentation abondante. Commencez par automatiser des tâches ponctuelles (sauvegarde de config, déploiement VLAN) avant de passer à Napalm pour des workflows complexes.

Comment tester mes scripts sans risquer d’affecter le réseau ?

Utilisez GNS3 ou Cisco Packet Tracer pour simuler un environnement réseau complet. Pour les tests en production, appliquez toujours le mode dry-run (–dry-run dans Napalm) et commencez hors des heures de pointe. Les labs virtuels EVE-NG sont aussi excellents pour valider vos scripts.

Python est-il suffisant pour automatiser un réseau entier ?

Python est idéal pour des automatisations ciblées, mais pour les grands réseaux, intégrez-le à des outils comme Ansible ou Terraform. Ces plateformes gèrent mieux l’orchestration, l’inventaire et les dépendances entre équipements, comme le recommande l’approche d’automatisation réseau.

Comment sécuriser l’accès aux commutateurs dans mes scripts ?

Privilégiez les comptes à privilèges limités avec accès uniquement aux commandes nécessaires. Combine cela avec : 1) Chiffrement AES-256 des identifiants, 2) Rotation automatique des mots de passe, 3) Authentification par clé SSH plutôt que mots de passe. Jamais de credentials en clair dans le code !

Conclusion

L’automatisation Python des commutateurs Cisco via Netmiko et Napalm transforme radicalement l’efficacité des ingénieurs réseau. En maîtrisant les techniques présentées – connexion sécurisée, gestion d’erreurs et déploiement déclaratif – vous réduirez les erreurs de configuration jusqu’à 80% tout en accélérant les déploiements. Commencez par automatiser une tâche récurrente simple (comme les sauvegardes de configuration), puis étendez progressivement vos scripts à des workflows complexes. Partagez vos expériences d’automatisation dans les commentaires et consultez notre bibliothèque de scripts réseau pour gagner des heures de travail chaque semaine !