Lire ceci dans d’autres langues : English,
日本語,
Español.
Démonstration de la génération d’une configuration réseau et de son application sur un appareil
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
:
Créez un nouveau dossier appelé group_vars
. Faites un clic droit sur la barre d’outils Explorer à gauche de Visual Studio Code et sélectionnez New Folder
Créez un nouveau fichier appelé all.yml
. Faites un clic droit sur la barre d’outils Explorer à gauche de Visual Studio Code et sélectionnez New File dans le répertoire 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.
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.
Cette étape expliquera et élaborera chaque partie du fichier template.j2 nouvellement créé.
{% for interface,ip in nodes[inventory_hostname].items() %}
Les morceaux de code dans un modèle Jinja sont échappés avec {%
et %}
. La déclaration interface,ip
décompose le dictionnaire en une clé nommée interface
et une valeur nommée ip
.
Le nodes[inventory_hostname]
effectue une recherche de dictionnaire dans le fichier group_vars/all.yml
. La variable inventory_hostname est le nom de l’hôte configuré dans le fichier d’inventaire d’Ansible. Lorsque le playbook est exécuté contre rtr1
, inventory_hostname sera rtr1
, et pour rtr2
, ce sera rtr2
, etc.
La variable inventory_hostname est considérée comme une variable magique automatiquement fournie.
items()
retourne une liste de dictionnaires. Dans ce cas, la clé du dictionnaire est le nom de l’interface (par exemple Loopback100) et la valeur est une adresse IP (par exemple 192.168.100.1)interface {{ interface }}
ip address {{ i }} 255.255.255.255
Enfin :
{% endfor %}
config.yml
. Faites un clic droit sur la barre d’outils Explorer à gauche de Visual Studio Code et sélectionnez New File. Copiez le playbook ci-dessous ou tapez-le :---
- name: configure network devices
hosts: rtr1,rtr2
gather_facts: false
tasks:
- name: configure device with config
cli_config:
config: "{{ lookup('template', 'template.j2') }}"
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
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
config
(par exemple cisco.ios.config
, arista.eos.config
) et cli_config peuvent utiliser un fichier de modèle Jinja2 et l’appliquer directement sur un appareil. Si vous souhaitez simplement générer une configuration localement sur le nœud de contrôle, utilisez le module template.group_vars
et host_vars
. Cet exemple court n’a utilisé que group_vars.Le Playbook Ansible final est fourni ici comme référence : config.yml.
Le modèle Jinja2 fourni est disponible ici : template.j2.
Vous avez terminé cet exercice de laboratoire.
Cliquez ici pour revenir au Workshop d’Automatisation de Réseaux Ansible