Supplémentaire - Configuration Réseau avec les Modèles Jinja

Lire ceci dans d’autres langues : uk English, japan 日本語,Español Español.

Table des Matières

Objectif

Démonstration de la génération d’une configuration réseau et de son application sur un appareil

Guide

Étape 1 - Création des variables de groupe

Cette étape couvre la création de variables Ansible pour un Playbook Ansible. Cet exercice utilisera le schéma d’adresse IP suivant pour les adresses loopback sur rtr1 et rtr2 :

Appareil Adresse IP Loopback100
rtr1 192.168.100.1/32
rtr2 192.168.100.2/32

Les informations des variables peuvent être stockées dans host_vars et group_vars. Pour cet exercice, créez un dossier nommé group_vars :

Les informations sur l’interface et l’adresse IP ci-dessus doivent être stockées en tant que variables afin que le playbook Ansible puisse les utiliser. Commencez par créer un dictionnaire YAML simple qui stocke le tableau listé ci-dessus. Utilisez une variable de haut niveau (par exemple nodes) afin de pouvoir effectuer une recherche basée sur le inventory_hostname :

nodes:
  rtr1:
    Loopback100: "192.168.100.1"
  rtr2:
    Loopback100: "192.168.100.2"

Copiez le dictionnaire YAML que nous avons créé ci-dessus dans le fichier group_vars/all.yml et enregistrez le fichier.

Tous les appareils font partie du groupe all par défaut. Si nous créons un groupe nommé cisco, seuls les appareils réseau appartenant à ce groupe pourront accéder à ces variables.

Étape 2 - Création d’un modèle Jinja2

Créez un nouveau fichier appelé template.j2 dans le répertoire network-workshop. Faites un clic droit sur la barre d’outils Explorer à gauche de Visual Studio Code et sélectionnez New File. La structure du répertoire ressemblera à ceci :

├── group_vars
│   └── all.yml
├── template.j2

Copiez ce qui suit dans le fichier template.j2 :

{% for interface,ip in nodes[inventory_hostname].items() %}
interface {{interface}}
  ip address {{ip}} 255.255.255.255
{% endfor %}

Enregistrez le fichier.

Étape 3 - Exploration du modèle Jinja2

Cette étape expliquera et élaborera chaque partie du fichier template.j2 nouvellement créé.

{% for interface,ip in nodes[inventory_hostname].items() %}

La variable inventory_hostname est considérée comme une variable magique automatiquement fournie.

interface {{ interface }}
  ip address {{ i }} 255.255.255.255

Enfin :

{% endfor %}

Étape 4 - Création d’un playbook

---
- name: configure network devices
  hosts: rtr1,rtr2
  gather_facts: false
  tasks:
    - name: configure device with config
      cli_config:
        config: "{{ lookup('template', 'template.j2') }}"

Étape 5 - Exécution du Playbook Ansible

Utilisez la commande ansible-navigator pour exécuter le playbook :

[student@ansible network-workshop]$ ansible-playbook config.yml

La sortie ressemblera à ceci :

[student@ansible-1 network-workshop]$ ansible-navigator run config.yml --mode stdout

PLAY [configure network devices] ***********************************************

TASK [configure device with config] ********************************************
changed: [rtr1]
changed: [rtr2]

PLAY RECAP *********************************************************************
rtr1                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
rtr2                       : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Étape 6 - Vérification de la configuration

Utilisez la commande show ip int br pour vérifier que les adresses IP ont été confirmées sur les appareils réseau.

[student@ansible network-workshop]$ ssh rtr1

rtr1#show ip int br | include Loopback100
Loopback100            192.168.100.1   YES manual up                    up

Points à retenir

Solution

Le Playbook Ansible final est fourni ici comme référence : config.yml.

Le modèle Jinja2 fourni est disponible ici : template.j2.

Terminer

Vous avez terminé cet exercice de laboratoire.


Cliquez ici pour revenir au Workshop d’Automatisation de Réseaux Ansible