13
Pour cet exemple réseau, nous allons mettre en place cette architecture composée de deux routeurs Cisco, d’un switch Cisco, d’un serveur Ansible, et avec comme objectif de mettre en place l’automatisation du déploiement des Vlans et des adresses HSRP pour les routeurs.
Le Switch Cisco s’appelle SW-1 et les routeurs se nomment R1 et R2. Le commutateur Ethernetswitch et la fonction NAT ne font pas partie des objectifs de cet exemple et ne seront donc pas détaillés.
Une fois la configuration de base des commutateurs et des routeurs effectuée et les adaptations et activations SSH nécessaires, Ansible peut être utilisé.
Pour cet exemple nous créons un « Role » confCisco et un « Playbook » cisco.yml pour le lancer.
Cisco.yml
--- - hosts: ios gather_facts: false connection: local roles: - confCisco
Comme vu dans les autres chapitres, ce « Playbook » va permettre d’exécuter le « Role » sur l’ensemble des hosts contenus dans le groupe [ios]. Ce groupe comprend à la fois les commutateurs et les routeurs Cisco.
Fichier hosts utilisé par Ansible
[ios_switch] SW-1 [ios_router] R1 R2 [ios:children] ios_switch ios_router
Nous introduisons ici la notion de « Children », dans le fichier hosts, permettant de créer un groupe comprenant plusieurs groupes, plutôt que de dupliquer des entrées dans le fichier Ansible hosts.
Nous allons détailler les fichiers de variables nécessaires au fonctionnement du « Playbook ». Le fichier group_vars/all/vars.yml contient toutes les variables chargées pour l’ensemble des « Playbooks ».
Fichier group_vars/all/vars.yml
--- provider: host: "{{ ansible_host }}" username: myuser password: mypassword transport: cli
Dans le fichier de variable all/vars.yml nous chargeons l’ensemble des variables nécessaires pour la connexion aux équipements Cisco.
Depuis la version Ansible 2.4, vous n’êtes plus obligé de renseigner ces paramètres, mais utiliser les options « -u < username > -k » qui permettront de se connecter avec le login et le mot de passe.
Fichier group_vars/ios_switch/vlans.yml
--- vlans : - { id: 100 , name: "test", address: "192.168.100.1", mask: "255.255.255.0" } - { id: 200 , name: "test", address: "192.168.200.1", mask: "255.255.255.0" }
Dans ce fichier, on liste l’ensemble des vlans que l’on souhaite créer, incluant dans notre exemple une adresse IP et le masque associé.
Fichier group_vars/ios_router/hsrp.yml
hsrp: - { interface: 1, group: 100, network: 192.168.100, address: 3, priority : 100 }
Dans ce fichier nous renseignons les paramètres nécessaires à la mise en place du protocole HSRP (protocole propriétaire Cisco ayant pour équivalent le protocole standard VRRP). Nous renseignons l’interface sur laquelle nous souhaitons mettre en place HSRP, le groupe correspondant au numéro du vlan, le réseau et l’adresse IP virtuelle HRSP, ainsi que la priorité.
Fichier « Task » roles/confCisco/tasks/main.yml
--- # tasks file for confCisco - name: Generate vlans from template vlans.yml template: src=vlans.j2 dest=./configCisco/vlans.cfg delegate_to: localhost when: inventory_hostname in groups['ios_switch'] - name: Generate HSRP configuration from template hsrp.yml template: src=hsrp.j2 dest=./configCisco/hsrp.cfg delegate_to: localhost when: inventory_hostname in groups['ios_router'] - name: Deploy vlans on switchs ios_config: src=./configCisco/vlans.cfg when: inventory_hostname in groups['ios_switch'] - name: Deploy HSRP configuration on routers ios_config: src=./configCisco/hsrp.cfg when: inventory_hostname in groups['ios_router']
Dans ce fichier nous demandons à Ansible de générer les fichiers de configuration vlans.cfg et hsrp.cfg puis de les déployer respectivement sur les switchs et les routeurs.
« Template » roles/confCisco/templates/vlans.j2
{% for vlan in vlans %} vlan {{ vlan.id }} name {{ vlan.name }} interface vlan {{ vlan.id }} ip address {{ vlan.address }} {{ vlan.mask }} no shutdown exit {% endfor %}
« Template » roles/confCisco/templates/hsrp.j2
{% for hsrp in hsrp %} int fa0/{{ hsrp.interface }} standby {{ hsrp.group }} ip {{ hsrp.network }}.{{ hsrp.address }} standby {{ hsrp.group }} preempt standby priority {{ hsrp.priority }} no shutdown {% endfor %}
Une fois le « Playbook » écrit, nous pouvons l’exécuter avec la commande suivante :
ansible-playbook cisco.yml -u < username > -k
Outre l’exécution du playbook, cette commande va générer les configurations précédentes et les déployer sur les équipements.
Il est important de noter que certains modules Cisco comme ios_command peuvent être utilisés pour d’autres constructeurs. Cependant, certains concurrents, comme Juniper, se sont lancés aussi dans le domaine de l’automatisation et ont développé leurs propres modules.