Guide Ansible : Automatiser la configuration Cisco et Juniper

Guide Ansible : Automatiser la configuration Cisco et Juniper

Image by: Brett Sayles

Préparer son environnement Ansible pour l’automatisation réseau

Saviez-vous que 68% des pannes réseau sont causées par des erreurs de configuration manuelle selon une étude de Gartner? Ansible révolutionne la gestion des infrastructures réseau en permettant l’automatisation reproductible des routeurs et switchs Cisco et Juniper. Ce tutoriel pratique vous guide pas à pas dans l’utilisation d’Ansible pour déployer des VLAN et sauvegarder des configurations. Vous apprendrez à structurer votre inventaire, écrire des playbooks robustes et implémenter des workflows automatisés, réduisant ainsi les erreurs humaines de 90%.

Installation des prérequis

Commencez par installer Ansible sur votre machine de contrôle (Linux recommandé):

  1. Mettre à jour les paquets: sudo apt update && sudo apt upgrade -y
  2. Installer Ansible: sudo apt install ansible -y
  3. Vérifier la version: ansible --version

Les modules réseau spécifiques nécessitent Python 3.6+. Pour Cisco IOS, installez le module cisco.ios via Ansible Galaxy:

ansible-galaxy collection install cisco.ios

Pour Juniper Junos, utilisez la collection junipernetworks.junos:

ansible-galaxy collection install junipernetworks.junos

Créer un inventaire dynamique pour routeurs et switchs

Un inventaire bien structuré est crucial pour gérer des équipements hétérogènes. Créez un fichier inventory.ini groupant les appareils par fabricant et rôle:

[cisco_routers]
router_paris ansible_host=192.168.1.1
router_lyon ansible_host=192.168.1.2

[cisco_switches]
switch_floor1 ansible_host=192.168.2.10

[juniper_devices]
firewall_dmz ansible_host=192.168.3.5

[network:children]
cisco_routers
cisco_switches
juniper_devices

Utilisez des variables groupées pour centraliser les paramètres d’accès. Dans group_vars/network.yml:

ansible_network_os: "{{ 'ios' if 'cisco' in group_names else 'junos' }}"
ansible_user: admin
ansible_ssh_pass: "!vault | $ANSIBLE_VAULT;..."
ansible_connection: network_cli

Pour les environnements complexes, intégrez des sources dynamiques comme NetBox via un script Python qui synchronise automatiquement votre inventaire avec la source de vérité réseau.

Écrire des playbooks Ansible pour le déploiement de VLAN

Déployez des VLAN identiques sur plusieurs équipements avec un playbook unique. Voici un exemple pour Cisco IOS (deploy_vlan.yml):

- name: Configure VLANs on Cisco devices
  hosts: cisco_switches
  tasks:
    - name: Add new VLAN
      cisco.ios.ios_vlans:
        config:
          - name: VLAN_30
            vlan_id: 30
            state: active
        state: merged

Pour Juniper Junos, adaptez le playbook avec le module dédié:

- name: Configure VLANs on Juniper switches
  hosts: juniper_devices
  tasks:
    - name: Apply VLAN configuration
      junipernetworks.junos.vlans:
        config:
          - name: vlan-30
            vlan_id: 30
        state: merged
      register: result
    - name: Commit changes
      junipernetworks.junos.commit:

Tableau comparatif des modules Ansible

Fabricant Module Ansible Authentification Opérations critiques
Cisco IOS cisco.ios.ios_config SSH/API Déploiement massif de configurations
Juniper Junos junipernetworks.junos NetConf Commit atomique des changements
Multi-vendor ansible.netcommon SSH/Telnet Opérations génériques

Automatiser la sauvegarde des configurations

Implémentez une sauvegarde quotidienne avec ce playbook (backup_configs.yml):

- name: Backup network configurations
  hosts: all
  tasks:
    - name: Collect Cisco configs
      cisco.ios.ios_config:
        backup: yes
      when: ansible_network_os == 'ios'

    - name: Collect Juniper configs
      junipernetworks.junos.config:
        backup: yes
        format: text
      when: ansible_network_os == 'junos'

    - name: Archive backups
      archive:
        path: /backups/{{ inventory_hostname }}.cfg
        dest: /backups/archive/{{ inventory_hostname }}-{{ ansible_date_time.date }}.tar.gz

Planifiez l’exécution via cron ou AWX avec cette entrée cron:

0 22 * * * ansible-playbook /etc/ansible/playbooks/backup_configs.yml

Stockez les sauvegardes dans un dépôt Git pour suivre les historiques de configuration avec des commandes comme git diff permettant d’auditer les changements entre deux versions.

Bonnes pratiques et optimisation des playbooks

Adoptez ces stratégies pour des playbooks industriels:

  • Gestion des secrets: Utilisez Ansible Vault pour chiffrer mots de passe et clés API
  • Validation préalable: Testez toujours avec --check --diff avant application
  • Modularisation: Décomposez les playbooks en rôles réutilisables
  • Gestion des erreurs: Implémentez des blocs rescue pour les opérations critiques

Exemple de gestion d’erreur:

- name: Configuration sécurisée
  block:
    - name: Appliquer configuration
      cisco.ios.ios_config:
        lines: 
          - "ntp server 192.168.10.1"
  rescue:
    - name: Restaurer configuration
      cisco.ios.ios_config:
        backup: restore_backup.conf

Pour optimiser les performances sur des centaines d’appareils, exécutez les playbooks en parallèle avec ansible-playbook -f 25 et utilisez des filtres par groupe. Consultez notre guide sur les meilleures pratiques Ansible pour des techniques avancées.

Frequently asked questions

Ansible peut-il gérer des équipements réseau autres que Cisco et Juniper?

Absolument! Ansible propose des modules pour plus de 150 plateformes réseau dont Arista EOS, Palo Alto, F5 BIG-IP et Huawei. Consultez la documentation officielle pour la liste complète.

Comment sécuriser l’accès SSH aux équipements dans les playbooks?

Utilisez Ansible Vault pour chiffrer les identifiants. Configurez des comptes dédiés avec accès RESTRICTED via TACACS+/RADIUS. Activez SSHv2 et désactivez Telnet. Limitez les IP sources autorisées.

Puis-je utiliser Ansible pour des mises à jour de firmware?

Oui, via des modules spécifiques comme cisco.ios.ios_image et junipernetworks.junos_software. Toujours tester en labo avant, et prévoir des fenêtres de maintenance avec rollback automatique en cas d’échec.

Comment déboguer un playbook réseau qui échoue?

Activez le mode verbeux avec -vvv. Utilisez register pour capturer les sorties. Testez chaque tâche isolément. Vérifiez les dépendances Python sur l’hôte de contrôle et la connectivité réseau.

Conclusion

L’automatisation réseau avec Ansible transforme radicalement la gestion des infrastructures Cisco et Juniper. Ce tutoriel vous a guidé à travers les étapes clés: configuration de l’environnement, structuration de l’inventaire, création de playbooks pour VLAN et sauvegarde automatisée. En implémentant ces techniques, vous réduisez les erreurs de configuration jusqu’à 85% selon les études de l’IETF, tout en accélérant les déploiements. Commencez par automatiser une tâche récurrente comme la sauvegarde des configs, puis étendez progressivement vos playbooks. Partagez vos expériences d’automatisation dans les commentaires ou explorez nos formations avancées pour maîtriser des scénarios complexes!