From 24193daf6532376aac4afe68fc1a63d176b96ded Mon Sep 17 00:00:00 2001 From: jfbourque Date: Fri, 7 Feb 2025 17:31:23 -0500 Subject: [PATCH 1/5] Add french translations for the ansible network workshop --- .../ansible_network/1-explore/README.fr.md | 303 ++++++++++ .../2-first-playbook/README.fr.md | 245 ++++++++ .../ansible_network/3-facts/README.fr.md | 211 +++++++ .../4-resource-module/README.fr.md | 334 +++++++++++ .../5-explore-controller/README.fr.md | 154 +++++ .../6-controller-job-template/README.fr.md | 148 +++++ .../7-controller-survey/README.fr.md | 209 +++++++ .../8-controller-rbac/README.fr.md | 230 +++++++ .../9-controller-workflow/README.fr.md | 211 +++++++ exercises/ansible_network/README.fr.md | 34 ++ .../4-resource-module-cisco/README.fr.md | 273 +++++++++ .../ansible_network/supplemental/README.fr.md | 19 + .../supplemental/jinja/README.fr.md | 197 ++++++ .../supplemental/resource/README.fr.md | 561 ++++++++++++++++++ 14 files changed, 3129 insertions(+) create mode 100644 exercises/ansible_network/1-explore/README.fr.md create mode 100644 exercises/ansible_network/2-first-playbook/README.fr.md create mode 100644 exercises/ansible_network/3-facts/README.fr.md create mode 100644 exercises/ansible_network/4-resource-module/README.fr.md create mode 100644 exercises/ansible_network/5-explore-controller/README.fr.md create mode 100644 exercises/ansible_network/6-controller-job-template/README.fr.md create mode 100644 exercises/ansible_network/7-controller-survey/README.fr.md create mode 100644 exercises/ansible_network/8-controller-rbac/README.fr.md create mode 100644 exercises/ansible_network/9-controller-workflow/README.fr.md create mode 100644 exercises/ansible_network/README.fr.md create mode 100644 exercises/ansible_network/supplemental/4-resource-module-cisco/README.fr.md create mode 100644 exercises/ansible_network/supplemental/README.fr.md create mode 100644 exercises/ansible_network/supplemental/jinja/README.fr.md create mode 100644 exercises/ansible_network/supplemental/resource/README.fr.md diff --git a/exercises/ansible_network/1-explore/README.fr.md b/exercises/ansible_network/1-explore/README.fr.md new file mode 100644 index 000000000..960e95c2d --- /dev/null +++ b/exercises/ansible_network/1-explore/README.fr.md @@ -0,0 +1,303 @@ +# Exercice 1 - Exploration de l'environnement de laboratoire + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 1 - Exploration de l'environnement de laboratoire](#exercice-1---exploration-de-lenvironnement-de-laboratoire) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Diagramme](#diagramme) + - [Guide](#guide) + - [Étape 1 - Connexion via VS Code](#étape-1---connexion-via-vs-code) + - [Étape 2 - Utilisation du terminal](#étape-2---utilisation-du-terminal) + - [Étape 3 - Examen des environnements d'exécution](#étape-3---examen-des-environnements-dexécution) + - [Étape 4 - Examen de la configuration d'ansible-navigator](#étape-4---examen-de-la-configuration-dansible-navigator) + - [Étape 5 - Examen de l'inventaire](#étape-5---examen-de-linventaire) + - [Étape 6 - Compréhension de l'inventaire](#étape-6---compréhension-de-linventaire) + - [Étape 7 - Utilisation d'ansible-navigator pour explorer l'inventaire](#étape-7---utilisation-dansible-navigator-pour-explorer-linventaire) + - [Étape 8 - Connexion aux périphériques réseau](#étape-8---connexion-aux-périphériques-réseau) + - [Conclusion](#conclusion) + +## Objectif + +Explorer et comprendre l'environnement de laboratoire. + +Les premiers exercices de ce laboratoire permettront d'explorer les utilitaires en ligne de commande de la plateforme d'automatisation Ansible. Cela inclut : + +- [ansible-navigator](https://github.com/ansible/ansible-navigator) - un utilitaire en ligne de commande et une interface utilisateur textuelle (TUI) pour exécuter et développer du contenu d'automatisation Ansible. +- [ansible-core](https://docs.ansible.com/core.html) - l'exécutable de base qui fournit le cadre, le langage et les fonctions soutenant la plateforme d'automatisation Ansible. Il inclut également divers outils CLI tels que `ansible`, `ansible-playbook` et `ansible-doc`. Ansible Core fait le lien entre la communauté open source et l'offre d'automatisation d'entreprise de Red Hat. +- [Environnements d'exécution](https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html) - non spécifiquement couverts dans cet atelier car les environnements intégrés incluent déjà toutes les collections prises en charge par Red Hat utilisées ici. Les environnements d'exécution sont des images de conteneurs utilisées pour exécuter Ansible. +- [ansible-builder](https://github.com/ansible/ansible-builder) - également non couvert ici, c'est un utilitaire CLI pour automatiser la création d'environnements d'exécution. + +Pour plus d'informations sur les nouveaux composants de la plateforme d'automatisation Ansible, vous pouvez consulter cette page [https://red.ht/AAP-20](https://red.ht/AAP-20). + +> Rejoignez notre forum communautaire ! +> +> Avant de commencer, rejoignez-nous sur https://forum.ansible.com/. Cela vous permettra d'obtenir de l'aide après les ateliers. + +## Diagramme + +![Red Hat Ansible Automation](https://github.com/ansible/workshops/raw/devel/images/ansible_network_diagram.png) + +## Guide + +### Étape 1 - Connexion via VS Code + + + + + + + +
Il est fortement recommandé d'utiliser Visual Studio Code pour réaliser les exercices de l'atelier. Visual Studio Code offre : +
    +
  • Un explorateur de fichiers
  • +
  • Un éditeur de texte avec mise en surbrillance de la syntaxe
  • +
  • Un terminal intégré
  • +
+ Un accès SSH direct est disponible en solution de secours, ou si Visual Studio Code ne convient pas. Une courte vidéo YouTube est disponible pour plus de clarté : Ansible Workshops - Accéder à votre environnement de travail. +
+ +- Connectez-vous à Visual Studio Code depuis la page de lancement de l'atelier (fournie par votre instructeur). Le mot de passe est indiqué sous le lien WebUI. + + ![page de lancement](images/launch_page.png) + +- Entrez le mot de passe fourni pour vous connecter. + + ![connexion vs code](images/vscode_login.png) + +- Ouvrez le répertoire `network-workshop` dans Visual Studio Code : + + ![explorateur de fichiers](images/vscode-networkworkshop.png) + +- Cliquez sur `playbook.yml` pour voir le contenu. + + ![playbook](images/vscode-playbook.png) + +### Étape 2 - Utilisation du terminal + +- Ouvrez un terminal dans Visual Studio Code : + + ![nouveau terminal](images/vscode-new-terminal.png) + +Naviguez jusqu'au répertoire `network-workshop` sur le terminal du noeud de contrôle Ansible. + +```bash +[student@ansible-1 ~]$ cd ~/network-workshop/ +[student@ansible-1 network-workshop]$ pwd +/home/student/network-workshop +[student@ansible-1 network-workshop]$ +``` + +* `~` - le tilde dans ce contexte est un raccourci pour le répertoire personnel, c'est-à-dire `/home/student` +* `cd` - commande Linux pour changer de répertoire +* `pwd` - commande Linux pour afficher le répertoire de travail actuel + +### Étape 3 - Examen des environnements d'exécution + +Exécutez la commande `ansible-navigator` avec l'argument `images` pour examiner les environnements d'exécution configurés sur le noeud de contrôle : + +```bash +$ ansible-navigator images +``` + +![ansible-navigator images](images/navigator-images.png) + +> Note +> +> La sortie que vous voyez peut différer de celle ci-dessus. + +Cette commande vous donne des informations sur tous les environnements d'exécution actuellement installés (ou EEs pour "Execution Environments"). Examinez un EE en appuyant sur le numéro correspondant. Par exemple, en appuyant sur **0** dans l'exemple ci-dessus, vous ouvrirez l'environnement d'exécution `network-ee` : + +![menu principal ee](images/navigator-ee-menu.png) + +La sélection de `2` pour `Version et collections Ansible` affichera toutes les collections Ansible installées sur cet EE particulier, ainsi que la version de `ansible-core` : + +![info ee](images/navigator-ee-collections.png) + +### Étape 4 - Examen de la configuration d'ansible-navigator + +Utilisez Visual Studio Code pour ouvrir ou utilisez la commande `cat` pour afficher le contenu du fichier `ansible-navigator.yml`. Le fichier est situé dans le répertoire personnel : + +```bash +$ cat ~/.ansible-navigator.yml +--- +ansible-navigator: + ansible: + inventory: + entries: + - /home/student/lab_inventory/hosts + + execution-environment: + image: quay.io/acme_corp/network-ee:latest + enabled: true + container-engine: podman + pull: + policy: missing + volume-mounts: + - src: "/etc/ansible/" + dest: "/etc/ansible/" +``` + +Notez les paramètres suivants dans le fichier `ansible-navigator.yml` : + +* `inventories` : montre l'emplacement de l'inventaire Ansible utilisé +* `execution-environment` : où l'environnement d'exécution par défaut est défini + +Pour une liste complète de toutes les options configurables, consultez la [documentation](https://ansible-navigator.readthedocs.io/en/latest/settings/). + +### Étape 5 - Examen de l'inventaire + +La portée d'un `play` dans un `playbook` est limitée aux groupes d'hôtes déclarés dans un **inventaire** Ansible. Ansible prend en charge plusieurs [types d'inventaire](http://docs.ansible.com/ansible/latest/intro_inventory.html). Un inventaire peut être un simple fichier plat contenant une collection d'hôtes ou un script dynamique (interrogeant potentiellement une base de données CMDB) générant une liste de dispositifs pour exécuter le playbook. + +Dans ce laboratoire, vous travaillerez avec un inventaire basé sur fichier au format **ini**. Utilisez Visual Studio Code pour ouvrir ou utilisez la commande `cat` pour afficher le contenu du fichier `~/lab_inventory/hosts`. + +```bash +$ cat ~/lab_inventory/hosts +``` + +```bash +[all:vars] +ansible_ssh_private_key_file=~/.ssh/aws-private.pem + +[routers:children] +cisco +juniper +arista + +[cisco] +rtr1 ansible_host=18.222.121.247 private_ip=172.16.129.86 +[arista] +rtr2 ansible_host=18.188.194.126 private_ip=172.17.158.197 +rtr4 ansible_host=18.221.5.35 private_ip=172.17.8.111 +[juniper] +rtr3 ansible_host=3.14.132.20 private_ip=172.16.73.175 + +[cisco:vars] +ansible_user=ec2-user +ansible_network_os=ios +ansible_connection=network_cli + +[juniper:vars] +ansible_user=ec2-user +ansible_network_os=junos +ansible_connection=netconf + +[arista:vars] +ansible_user=ec2-user +ansible_network_os=eos +ansible_connection=network_cli +ansible_become=true +ansible_become_method=enable + +[dc1] +rtr1 +rtr3 + +[dc2] +rtr2 +rtr4 + +[control] +ansible ansible_host=13.58.149.157 ansible_user=student private_ip=172.16.240.184 +``` + +### Étape 6 - Compréhension de l'inventaire + +Dans la sortie ci-dessus, chaque `[ ]` définit un groupe. Par exemple, `[dc1]` est un groupe qui contient les hôtes `rtr1` et `rtr3`. Les groupes peuvent également être _imbriqués_. Le groupe `[routers]` est un groupe parent du groupe `[cisco]`. + +Les groupes parents sont déclarés à l'aide de la directive `children`. L'imbrication des groupes permet d'attribuer des valeurs plus spécifiques aux variables. + +Nous pouvons associer des variables à des groupes et à des hôtes. + +> Note : +> +> Un groupe appelé **all** existe toujours et contient tous les groupes et hôtes définis dans un inventaire. + +Les variables des hôtes peuvent être définies sur la même ligne que les hôtes eux-mêmes. Par exemple, pour l'hôte `rtr1` : + +```sh +rtr1 ansible_host=18.222.121.247 private_ip=172.16.129.86 +``` + +* `rtr1` - Le nom qu'Ansible utilisera. Cela peut, mais ne doit pas, reposer sur le DNS. +* `ansible_host` - L'adresse IP qu'Ansible utilisera. Si elle n'est pas configurée, elle utilisera par défaut le DNS. +* `private_ip` - Cette valeur n'est pas réservée par Ansible, elle sera donc considérée comme une [variable d'hôte](http://docs.ansible.com/ansible/latest/intro_inventory.html#host-variables). Cette variable peut être utilisée par les playbooks ou ignorée. + +Les variables de groupe sont déclarées à l'aide de la directive `vars`. Les groupes permettent d'attribuer des variables communes à plusieurs hôtes. Plusieurs variables de groupe peuvent être définies sous la section `[group_name:vars]`. Par exemple, regardez le groupe `cisco` : + +```sh +[cisco:vars] +ansible_user=ec2-user +ansible_network_os=ios +ansible_connection=network_cli +``` + +* `ansible_user` - L'utilisateur qu'Ansible utilisera pour se connecter à cet hôte. Si elle n'est pas configurée, elle utilisera par défaut l'utilisateur avec lequel le playbook est exécuté. +* `ansible_network_os` - Cette variable est nécessaire lors de l'utilisation du type de connexion `network_cli` dans une définition de play. +* `ansible_connection` - Cette variable définit le [plugin de connexion](https://docs.ansible.com/ansible/latest/plugins/connection.html) pour ce groupe. Elle peut être configurée avec des valeurs telles que `netconf`, `httpapi` et `network_cli` en fonction des compatibilités de la plateforme réseau. + +### Étape 7 - Utilisation d'ansible-navigator pour explorer l'inventaire + +Nous pouvons également utiliser l'interface utilisateur textuelle (TUI) `ansible-navigator` pour explorer l'inventaire. + +Exécutez la commande `ansible-navigator inventory` pour afficher l'inventaire dans la TUI : + +![ansible-navigator tui](images/ansible-navigator.png) + +Appuyer sur **0** ou **1** sur votre clavier ouvrira respectivement les groupes ou les hôtes. + +![groupes ansible-navigator](images/ansible-navigator-groups.png) + +Appuyez sur la touche **Esc** pour remonter d'un niveau, ou vous pouvez zoomer sur un hôte individuel : + +![ansible-navigator hôte](images/ansible-navigator-rtr-1.png) + +### Étape 8 - Connexion aux périphériques réseau + +Il y a quatre routeurs, nommés rtr1, rtr2, rtr3 et rtr4. Le diagramme réseau est toujours disponible dans la [table des matières de l'atelier d'automatisation réseau](../README.fr.md). Le fichier de configuration SSH (`~/.ssh/config`) est déjà configuré sur le nœud de contrôle. Cela signifie que vous pouvez vous connecter en SSH à n'importe quel routeur depuis le nœud de contrôle sans identifiants supplémentaires : + +Par exemple, pour se connecter à rtr1 depuis le nœud de contrôle Ansible, tapez : + +```bash +$ ssh rtr1 +``` + +Par exemple : +``` +$ ssh rtr1 +Warning: Permanently added 'rtr1,35.175.115.246' (RSA) to the list of known hosts. +``` + +et utilisez la commande `show version` pour vérifier la version de Cisco IOS : + +``` +rtr1#show ver +Cisco IOS XE Software, Version 17.14.01a +Cisco IOS Software [IOSXE], Virtual XE Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 17.14.1a, RELEASE SOFTWARE (fc1) +``` + +> **Note** +> +> Les ateliers ont récemment été mis à niveau vers Red Hat Enterprise Linux 9, qui utilise une [politique cryptographique système plus sécurisée](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening). Si vous rencontrez l'erreur `no mutual signature supported` pour un périphérique réseau Cisco, exécutez la commande `sudo update-crypto-policies --set LEGACY`, puis quittez/réouvrez votre terminal pour que la politique prenne effet. Ce problème sera corrigé dans une future version de l'atelier. Veuillez signaler les problèmes sur https://github.com/ansible/workshops + +## Conclusion + +Vous avez terminé l'exercice 1 ! + +Vous comprenez maintenant : + +* Comment se connecter à l'environnement de laboratoire avec Visual Studio Code +* Comment explorer les **environnements d'exécution** avec `ansible-navigator` +* Où se trouve la configuration Ansible Navigator (`ansible-navigator.yml`) +* Où est stocké l'inventaire pour les exercices en ligne de commande +* Comment utiliser l'interface utilisateur textuelle (TUI) d'ansible-navigator + +--- +[Exercice suivant](../2-first-playbook/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + + + diff --git a/exercises/ansible_network/2-first-playbook/README.fr.md b/exercises/ansible_network/2-first-playbook/README.fr.md new file mode 100644 index 000000000..184888293 --- /dev/null +++ b/exercises/ansible_network/2-first-playbook/README.fr.md @@ -0,0 +1,245 @@ +# Exercice 2 - Premier Playbook Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +Vous n'avez pas d'environnement de laboratoire ? Essayez cet exercice sur notre [environnement sandbox gratuit](https://aap2.demoredhat.com/). Cet exercice correspond à **Ansible Network Automation Basics - Lab 1**. + +## Table des matières + +- [Exercice 2 - Premier Playbook Ansible](#exercice-2---premier-playbook-ansible) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 - Examiner le Playbook Ansible](#étape-1---examiner-le-playbook-ansible) + - [Étape 2 - Exécuter le Playbook Ansible](#étape-2---exécuter-le-playbook-ansible) + - [Étape 3 - Vérifier la configuration sur le routeur](#étape-3---vérifier-la-configuration-sur-le-routeur) + - [Étape 4 - Valider l'idempotence](#étape-4---valider-lidempotence) + - [Étape 5 - Modifier le Playbook Ansible](#étape-5---modifier-le-playbook-ansible) + - [Étape 6 - Utiliser le mode check](#étape-6---utiliser-le-mode-check) + - [Étape 7 - Vérifier que la configuration n'est pas présente](#étape-7---vérifier-que-la-configuration-nest-pas-présente) + - [Étape 8 - Réexécuter le Playbook Ansible](#étape-8---réexécuter-le-playbook-ansible) + - [Étape 9 - Vérifier que la configuration est appliquée](#étape-9---vérifier-que-la-configuration-est-appliquée) + - [Points Clés](#points-clés) + - [Solution](#solution) + - [Conclusion](#conclusion) + +## Objectif + +Utilisez Ansible pour mettre à jour la configuration des routeurs. Cet exercice n'aura pas pour objectif de créer un Playbook Ansible, mais d'utiliser un existant fourni. + +Cet exercice couvrira : + +* l'examen d'un Playbook Ansible existant +* l'exécution d'un Playbook Ansible en ligne de commande avec `ansible-navigator` +* le mode check (le paramètre `--check`) +* le mode verbeux (les paramètres `--verbose` ou `-v`) + +## Guide + +### Étape 1 - Examiner le Playbook Ansible + +Naviguez vers le répertoire `network-workshop` si vous n'y êtes pas déjà. + +```bash +[student@ansible ~]$ cd ~/network-workshop/ +[student@ansible network-workshop]$ +[student@ansible network-workshop]$ pwd +/home/student/network-workshop +``` + +Examinez le Playbook Ansible fourni nommé `playbook.yml`. Ouvrez le fichier dans Visual Studio Code ou utilisez `cat` : + +```yaml +--- +- name: Configuration des communautés SNMP ro/rw + hosts: cisco + gather_facts: false + + tasks: + - name: S'assurer que les chaînes SNMP souhaitées sont présentes + cisco.ios.ios_config: + commands: + - snmp-server community ansible-public RO + - snmp-server community ansible-private RW +``` + +* `cat` - Commande Linux permettant de voir le contenu d'un fichier +* `playbook.yml` - Playbook Ansible fourni + +Nous explorerons en détail les composants d'un Playbook Ansible dans le prochain exercice. Pour l'instant, il suffit de voir que ce Playbook exécutera deux commandes Cisco IOS-XE : + +```sh +snmp-server community ansible-public RO +snmp-server community ansible-private RW +``` + +### Étape 2 - Exécuter le Playbook Ansible + +Exécutez le Playbook en utilisant la commande `ansible-navigator`. La commande complète est : +```ansible-navigator run playbook.yml --mode stdout``` + +```bash +[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout + +PLAY [Configuration des communautés SNMP ro/rw] ***************************************** + +TASK [S'assurer que les chaînes SNMP souhaitées sont présentes] ************************ +changed: [rtr1] + +PLAY RECAP ********************************************************************* +rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + +[student@ansible-1 network-workshop]$ +``` + +* `--mode stdout` - Par défaut, `ansible-navigator` s'exécute en mode interactif. Le comportement par défaut peut être modifié via le fichier `ansible-navigator.yml`. Lorsque les Playbooks deviennent plus longs et impliquent plusieurs hôtes, le mode interactif permet de "zoomer" sur les données en temps réel, de les filtrer et de naviguer entre différents composants Ansible. Comme cette tâche n'a exécuté qu'une seule action sur un seul hôte, `stdout` est suffisant. + +### Étape 3 - Vérifier la configuration sur le routeur + +Vérifiez que le Playbook Ansible a fonctionné. Connectez-vous à `rtr1` et vérifiez la configuration en cours sur le dispositif Cisco IOS-XE. + +```bash +[student@ansible network-workshop]$ ssh rtr1 + +rtr1#show run | i snmp +snmp-server community ansible-public RO +snmp-server community ansible-private RW +``` + +### Étape 4 - Valider l'idempotence + +Le module `cisco.ios.config` est idempotent. Cela signifie qu'un changement de configuration est poussé vers le dispositif uniquement si cette configuration n'existe pas déjà sur les hôtes cibles. + +> Besoin d'aide avec la terminologie d'Ansible Automation ? +> +> Consultez le [glossaire ici](https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html) pour plus d'informations sur des termes comme l'idempotence. + +Pour valider le concept d'idempotence, réexécutez le Playbook : + +```bash +[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout + +PLAY [Configuration des communautés SNMP ro/rw] ***************************************** + +TASK [S'assurer que les chaînes SNMP souhaitées sont présentes] ************************ +ok: [rtr1] + +PLAY RECAP ********************************************************************* +rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +> Note : +> +> Voyez que le paramètre **changed** dans **PLAY RECAP** indique 0 changements. + +Réexécuter le Playbook Ansible plusieurs fois produira le même résultat, avec **ok=1** et **change=0**. À moins qu'un autre opérateur ou processus ne supprime ou modifie la configuration existante sur `rtr1`, ce Playbook Ansible continuera à rapporter **ok=1**, indiquant que la configuration existe déjà et est correcte sur le dispositif réseau. + +### Étape 5 - Modifier le Playbook Ansible + +Ajoutez maintenant une autre chaîne SNMP RO nommée `ansible-test`. + +```sh +snmp-server community ansible-test RO +``` + +Utilisez Visual Studio Code pour ouvrir le fichier `playbook.yml` et ajoutez la commande : + +Le Playbook Ansible ressemblera maintenant à ceci : + +```yaml +--- +- name: Configuration des communautés SNMP ro/rw + hosts: cisco + gather_facts: false + + tasks: + - name: S'assurer que les chaînes SNMP souhaitées sont présentes + cisco.ios.ios_config: + commands: + - snmp-server community ansible-public RO + - snmp-server community ansible-private RW + - snmp-server community ansible-test RO +``` + +Assurez-vous de sauvegarder `playbook.yml` avec cette modification. + +### Étape 6 - Utiliser le mode check + +Cette fois, au lieu d'exécuter le Playbook pour pousser le changement vers le dispositif, exécutez-le avec le paramètre `--check` en combinaison avec le mode verbeux `-v` : + +```bash +[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout --check -v +Using /etc/ansible/ansible.cfg as config file + +PLAY [Configuration des communautés SNMP ro/rw] ***************************************** + +TASK [S'assurer que les chaînes SNMP souhaitées sont présentes] ************************ +changed: [rtr1] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"], "warnings": ["Pour assurer l'idempotence et une différence correcte, les lignes de configuration doivent être similaires à celles présentes dans la configuration en cours du dispositif"]} + +PLAY RECAP ********************************************************************* +rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +Le mode `--check` en combinaison avec le mode `--verbose` affichera les changements exacts qui seront déployés sur le dispositif sans les appliquer. C'est une excellente technique pour valider les changements avant de les pousser. + +### Étape 7 - Vérifier que la configuration n'est pas présente + +Vérifiez que le Playbook Ansible n'a pas appliqué la chaîne `ansible-test`. Connectez-vous à `rtr1` et vérifiez la configuration en cours sur le dispositif Cisco IOS-XE. + +```bash +[student@ansible network-workshop]$ ssh rtr1 + +rtr1#show run | i snmp +snmp-server community ansible-public RO +snmp-server community ansible-private RW +``` + +### Étape 8 - Réexécuter le Playbook Ansible + +Réexécutez ce Playbook sans le mode `-v` ou `--check` pour appliquer les changements. + +```bash +[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout + +PLAY [Configuration des communautés SNMP ro/rw] ***************************************** + +TASK [S'assurer que les chaînes SNMP souhaitées sont présentes] ************************ +changed: [rtr1] + +PLAY RECAP ********************************************************************* +rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +### Étape 9 - Vérifier que la configuration est appliquée + +Vérifiez que le Playbook Ansible a appliqué la chaîne `ansible-test`. Connectez-vous à `rtr1` et vérifiez la configuration en cours sur le dispositif Cisco IOS-XE. + +```bash +[student@ansible network-workshop]$ ssh rtr1 + +rtr1#sh run | i snmp +snmp-server community ansible-public RO +snmp-server community ansible-private RW +snmp-server community ansible-test RO +``` + +## Points Clés + +* Les modules **config** (par ex. cisco.ios.config) sont idempotents, c'est-à-dire qu'ils sont étatifs. +* Le **mode check** permet de s'assurer que le Playbook Ansible ne modifie pas les systèmes distants. +* Le **mode verbeux** permet de voir plus de détails dans la sortie du terminal, y compris les commandes qui seraient appliquées. +* Ce Playbook Ansible pourrait être planifié dans **Automation controller** pour appliquer régulièrement la configuration. Par exemple, le Playbook pourrait être exécuté une fois par jour pour un réseau particulier. En combinaison avec le **mode check**, cela pourrait servir de simple audit pour vérifier si une configuration manque ou a été modifiée sur le réseau. + +## Solution + +Le Playbook Ansible final est fourni ici comme référence : [playbook.yml](../playbook.yml). + +## Conclusion + +Vous avez terminé l'exercice 2 ! + +--- +[Exercice précédent](../1-explore/README.fr.md) | [Exercice suivant](../3-facts/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/3-facts/README.fr.md b/exercises/ansible_network/3-facts/README.fr.md new file mode 100644 index 000000000..975212648 --- /dev/null +++ b/exercises/ansible_network/3-facts/README.fr.md @@ -0,0 +1,211 @@ +# Exercice 3 : Les Facts Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 3 : Les Facts Ansible](#exercice-3--les-facts-ansible) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 - Utilisation de la documentation](#étape-1---utilisation-de-la-documentation) + - [Étape 2 - Création du play](#étape-2---création-du-play) + - [Étape 3 - Créer la tâche de facts](#étape-3---créer-la-tâche-de-facts) + - [Étape 4 - Exécution du playbook](#étape-4---exécution-du-playbook) + - [Étape 5 - Utilisation du module debug](#étape-5---utilisation-du-module-debug) + - [Étape 6 - Utilisation du mode stdout](#étape-6---utilisation-du-mode-stdout) + - [Points Clés](#points-clés) + - [Solution](#solution) + - [Conclusion](#conclusion) + +## Objectif + +Démonstration de l'utilisation des facts Ansible sur une infrastructure réseau. + +Les facts Ansible sont des informations obtenues en interrogeant les éléments réseau distants. Ils sont retournés sous forme de données structurées (JSON), ce qui facilite leur manipulation ou modification. Par exemple, un ingénieur réseau pourrait créer rapidement un rapport d'audit en utilisant les facts Ansible et les modélisant dans un fichier Markdown ou HTML. + +Cet exercice couvrira : + +* La création d'un playbook Ansible depuis zéro. +* L'utilisation de `ansible-navigator :doc` pour la documentation. +* L'utilisation du [module cisco.ios.facts](https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_facts_module.html). +* L'utilisation du [module debug](https://docs.ansible.com/ansible/latest/modules/debug_module.html). + +## Guide + +### Étape 1 - Utilisation de la documentation + +Entrez en mode interactif `ansible-navigator` sur le terminal + +```bash +$ ansible-navigator +``` + +Capture d'écran de `ansible-navigator` : +![mode interactif ansible-navigator](images/ansible-navigator-interactive.png) + +Dans la capture d'écran ci-dessus, nous pouvons voir une ligne pour la documentation des modules ou plugins : + +``` +`:doc ` Consulter la documentation d'un module ou plugin +``` + +Examinons le module `debug` en tapant `:doc debug` + +```bash +:doc debug +``` + +Capture d'écran de `ansible-navigator :doc debug` : +![mode interactif doc ansible-navigator](images/ansible-navigator-doc.png) + +La documentation du module `debug` est maintenant affichée dans votre session interactive. C'est une représentation YAML de la même documentation que vous verriez sur [docs.ansible.com](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/debug_module.html). Les exemples peuvent être copiés et collés directement dans votre playbook Ansible. + +Pour les modules non-intégrés, trois champs sont importants : + +```bash +namespace.collection.module +``` +Par exemple : +```bash +cisco.ios.facts +``` + +Explication des termes : +- **namespace** - exemple **cisco** : Un namespace est un regroupement de collections. Le namespace **cisco** contient plusieurs collections, y compris **ios**, **nxos** et **iosxr**. +- **collection** - exemple **ios** : Une collection est un format de distribution pour le contenu Ansible pouvant inclure des playbooks, des rôles, des modules et des plugins. La collection **ios** contient tous les modules pour Cisco IOS/IOS-XE. +- **module** - exemple **facts** : Les modules sont des unités de code discrètes utilisables dans une tâche de playbook. Le module **facts** retournera des données structurées sur le système spécifié. + +Appuyez sur la touche **Esc** pour revenir au menu principal. Essayez de répéter la commande `:doc` avec le module `cisco.ios.facts`. + +```bash +:doc cisco.ios.facts +``` + +Nous utiliserons le module facts dans notre playbook. + +### Étape 2 - Création du play + +Les playbooks Ansible sont des fichiers **YAML**. YAML est un format de codage structuré qui est également très lisible par l'humain (contrairement à son sous-ensemble - le format JSON). + +Créez un nouveau fichier dans Visual Studio Code : +![nouveau fichier vscode](images/vscode_new_file.png) + +Pour plus de simplicité, nommez le playbook : `facts.yml` : +![enregistrer fichier vscode](images/vscode_save_as.png) + +Entrez la définition suivante dans `facts.yml` : + +```yaml +--- +- name: Récupérer des informations des routeurs + hosts: cisco + gather_facts: no +``` + +Explication de chaque ligne : + +* La première ligne, `---` indique qu'il s'agit d'un fichier YAML. +* Le mot-clé `- name:` est une description facultative pour ce playbook Ansible. +* Le mot-clé `hosts:` signifie que ce playbook s'exécute contre le groupe `cisco` défini dans le fichier d'inventaire. +* Le mot-clé `gather_facts: no` est nécessaire car, depuis Ansible 2.8 et les versions antérieures, cela ne fonctionne que sur les hôtes Linux, et non sur l'infrastructure réseau. Nous utiliserons un module spécifique pour collecter les facts des équipements réseau. + +### Étape 3 - Créer la tâche de facts + +Ajoutez ensuite la première `task`. Cette tâche utilisera le module `cisco.ios.ios_facts` pour collecter des facts sur chaque dispositif du groupe `cisco`. + +```yaml +--- +- name: Récupérer des informations des routeurs + hosts: cisco + gather_facts: false + + tasks: + - name: Récupérer les facts du routeur + cisco.ios.ios_facts: +``` + +> Note : +> +> Un play est une liste de tâches. Les modules sont du code pré-écrit qui exécute la tâche. + +Sauvegardez le playbook. + +### Étape 4 - Exécution du playbook + +Exécutez le playbook Ansible avec la commande `ansible-navigator` : + +```sh +$ ansible-navigator run facts.yml +``` + +Cela ouvrira une session interactive pendant l'exécution du playbook : + +Capture d'écran de facts.yml : +![ansible-navigator run facts.yml](images/ansible-navigator-facts.png) + +Pour zoomer sur la sortie du playbook, vous pouvez appuyer sur **0** pour afficher une vue centrée sur les hôtes. Comme il n'y a qu'un seul hôte, il n'y a qu'une option. + +Capture d'écran de zoom : +![zoom hôtes ansible-navigator](images/ansible-navigator-hosts.png) + +Pour voir la sortie verbeuse de **rtr1**, appuyez encore une fois sur **0** pour zoomer sur les valeurs retournées par le module. + +Capture d'écran de zoom des données du module : +![zoom module ansible-navigator](images/ansible-navigator-module.png) + +Vous pouvez faire défiler l'écran pour voir les facts collectés sur l'équipement réseau Cisco. + +### Étape 5 - Utilisation du module debug + +Ajoutez deux tâches supplémentaires pour afficher la version du système d'exploitation des routeurs et leur numéro de série. + +```yaml +--- +- name: Récupérer des informations des routeurs + hosts: cisco + gather_facts: false + + tasks: + - name: Récupérer les facts du routeur + cisco.ios.ios_facts: + + - name: Afficher la version + ansible.builtin.debug: + msg: "La version IOS est : {{ ansible_net_version }}" + + - name: Afficher le numéro de série + ansible.builtin.debug: + msg: "Le numéro de série est : {{ ansible_net_serialnum }}" +``` + +### Étape 6 - Utilisation du mode stdout + +Réexécutez le playbook avec `ansible-navigator` et le mode `--mode stdout`. + +La commande complète est : `ansible-navigator run facts.yml --mode stdout` + +Capture d'écran de ansible-navigator utilisant stdout : +![capture d'écran ansible-navigator stdout](images/ansible-navigator-facts-stdout.png) + +Avec moins de 20 lignes de "code", vous venez d'automatiser la collecte de la version et du numéro de série. Imaginez si vous faisiez cela sur un réseau de production ! Vous avez maintenant des données exploitables qui ne deviennent pas obsolètes. + +## Points Clés + +* La commande `ansible-navigator :doc` vous donne accès à la documentation sans connexion Internet. Cette documentation correspond également à la version d'Ansible sur le nœud de contrôle. +* Le [module cisco.ios.facts](https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_config_module.html) collecte des données structurées spécifiques à Cisco IOS. Il existe des modules pertinents pour chaque plateforme réseau. Par exemple, junos_facts pour Juniper Junos et eos_facts pour Arista EOS. +* Le [module debug](https://docs.ansible.com/ansible/latest/modules/debug_module.html) permet à un playbook Ansible d'afficher des valeurs dans la fenêtre du terminal. + +## Solution + +Le playbook Ansible final est fourni ici comme référence : [facts.yml](facts.yml). + +## Conclusion + +Vous avez terminé l'exercice 3 + +--- +[Exercice précédent](../2-first-playbook/README.fr.md) | [Exercice suivant](../4-resource-module/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/4-resource-module/README.fr.md b/exercises/ansible_network/4-resource-module/README.fr.md new file mode 100644 index 000000000..7cfef9156 --- /dev/null +++ b/exercises/ansible_network/4-resource-module/README.fr.md @@ -0,0 +1,334 @@ +# Exercice 4 : Modules de Ressources Réseau Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +Si vous utilisez un **environnement composé uniquement de routeurs Cisco** (les quatre routeurs sont des routeurs Cisco IOS), veuillez [consulter ces instructions](../supplemental/4-resource-module-cisco/README.fr.md). + +## Table des matières + +- [Exercice 4 : Modules de Ressources Réseau Ansible](#exercice-4--modules-de-ressources-réseau-ansible) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 - Vérifier la configuration VLAN](#étape-1---vérifier-la-configuration-vlan) + - [Étape 2 - Création du Playbook Ansible](#étape-2---création-du-playbook-ansible) + - [Étape 3 - Examiner le Playbook Ansible](#étape-3---examiner-le-playbook-ansible) + - [Étape 4 - Exécution du Playbook Ansible](#étape-4---exécution-du-playbook-ansible) + - [Étape 5 - Vérifier la configuration VLAN](#étape-5---vérifier-la-configuration-vlan) + - [Étape 6 - Utilisation du paramètre gathered](#étape-6---utilisation-du-paramètre-gathered) + - [Étape 7 - Exécution du playbook gathered](#étape-7---exécution-du-playbook-gathered) + - [Étape 8 - Examiner les fichiers](#étape-8---examiner-les-fichiers) + - [Points Clés](#points-clés) + - [Solution](#solution) + - [Conclusion](#conclusion) + - [Dans le prochain exercice, nous commencerons à utiliser Automation Controller.](#dans-le-prochain-exercice-nous-commencerons-à-utiliser-automation-controller) + +## Objectif + +Démonstration de l'utilisation des [modules de ressources réseau Ansible](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html). + +Les modules de ressources réseau Ansible simplifient et standardisent la gestion de différents dispositifs réseau. Les dispositifs réseau séparent leur configuration en sections (comme les interfaces et les VLANs) applicables à un service réseau. + +Les modules de ressources offrent une expérience uniforme sur différents dispositifs réseau. Par exemple, le module **VLANs** fonctionne de manière identique pour les modules suivants : + +* `arista.eos.eos_vlans` +* `cisco.ios.ios_vlans` +* `cisco.nxos.nxos_vlans` +* `cisco.iosxr.iosxr_vlans` +* `junipernetworks.junos.junos_vlans` + +Configurer des [VLANs](https://fr.wikipedia.org/wiki/Réseau_local_virtuel) sur des dispositifs réseau est une tâche très courante, et des erreurs de configuration peuvent causer des problèmes et des interruptions. Les configurations VLAN sont souvent identiques sur plusieurs commutateurs réseau, ce qui en fait un cas d'utilisation parfait pour l'automatisation. + +Cet exercice couvrira : + +* La configuration de VLANs sur Arista EOS +* La création d'un playbook Ansible utilisant le [module arista.eos.eos_vlans](https://docs.ansible.com/ansible/latest/collections/arista/eos/eos_vlans_module.html). +* La compréhension de l'état `state: merged` +* La compréhension de l'état `state: gathered` + +## Guide + +### Étape 1 - Vérifier la configuration VLAN + +* Connectez-vous à un commutateur Arista et vérifiez la configuration actuelle des VLANs. + +* Depuis le terminal du nœud de contrôle, utilisez `ssh rtr2` et tapez `enable` + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* Utilisez la commande `show vlan` pour examiner la configuration des VLANs : + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + ``` + +* Utilisez `show run | s vlan` pour examiner la configuration en cours sur le dispositif Arista : + + ```bash + rtr2#show run | s vlan + rtr2# + ``` + +Comme vous pouvez le voir dans la sortie ci-dessus, il n'y a aucune configuration VLAN en dehors du VLAN par défaut 1 (qui n'est attribué à aucun port). + +### Étape 2 - Création du Playbook Ansible + +* Créez un nouveau fichier dans Visual Studio Code nommé `resource.yml` + + ![nouveau fichier](images/step1_new_file.png) + +* Copiez le playbook Ansible suivant dans votre fichier `resource.yml` + + ```yaml + --- + - name: Configurer les VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: Utiliser le module de ressource VLANs + arista.eos.eos_vlans: + state: merged + config: + - name: postes + vlan_id: 20 + - name: serveurs + vlan_id: 30 + - name: imprimantes + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + +* La configuration ressemblera à ceci dans Visual Studio Code : + + ![configuration vscode](images/setup_vs_code.png) + +### Étape 3 - Examiner le Playbook Ansible + +* Examinons d'abord les quatre premières lignes : + + ```yaml + --- + - name: Configurer les VLANs + hosts: arista + gather_facts: false + ``` + + * `---` désigne qu'il s'agit d'un fichier [YAML](https://fr.wikipedia.org/wiki/YAML), le format utilisé pour les playbooks. + * `name` est une description de ce que fait ce playbook. + * `hosts: arista` exécutera ce playbook uniquement sur les dispositifs réseau Arista. + * `gather_facts: false` désactive la collecte de facts pour ce play, activée par défaut. + +* La seconde partie contient une tâche utilisant le module `arista.eos.eos_vlans` + + ```yaml + tasks: + + - name: Utiliser le module de ressource VLANs + arista.eos.eos_vlans: + state: merged + config: + - name: postes + vlan_id: 20 + - name: serveurs + vlan_id: 30 + - name: imprimantes + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + + * `name:` - tout comme le play, chaque tâche a une description + * `state: merged` - C'est le comportement par défaut des modules de ressources. Cela impose simplement que la configuration fournie existe sur le dispositif réseau. + * `config:` - liste de la configuration VLAN fournie. Si le module était changé de `arista.eos.vlans` à `junipernetworks.junos.vlans`, il fonctionnerait de manière identique. Cela permet aux ingénieurs réseau de se concentrer sur la configuration réseau plutôt que sur la syntaxe et l'implémentation du fournisseur. + +### Étape 4 - Exécution du Playbook Ansible + +* Exécutez le playbook avec `ansible-navigator run`. Comme il n'y a qu'une seule tâche, nous pouvons utiliser `--mode stdout` + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* La sortie sera similaire à ceci : + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configurer les VLANs] *************************************************** + + TASK [utiliser le module de ressource VLANs] ********************************** + changed: [rtr4] + changed: [rtr2] + + PLAY RECAP ******************************************************************** + rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Réexécuter le playbook illustrera le concept d'idempotence + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configurer les VLANs] *************************************************** + + TASK [utiliser le module de ressource VLANs] ********************************** + ok: [rtr2] + ok: [rtr4] + + PLAY RECAP ******************************************************************** + rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Comme vous pouvez le voir dans la sortie, tout retourne `ok=1`, indiquant qu'aucun changement n'a été effectué. + +### Étape 5 - Vérifier la configuration VLAN + +* Connectez-vous à un commutateur Arista et vérifiez la configuration actuelle des VLANs. + +* Depuis le terminal du nœud de contrôle, utilisez `ssh rtr2` et tapez `enable` + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* Utilisez la commande `show vlan` pour examiner la configuration des VLANs : + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 postes active + 30 serveurs active + 40 imprimantes active + 50 DMZ active + ``` + +* Utilisez `show run | s vlan` pour examiner la configuration en cours sur le dispositif Arista : + + ```bash + rtr2#sh run | s vlan + vlan 20 + name postes + ! + vlan 30 + name serveurs + ! + vlan 40 + name imprimantes + ! + vlan 50 + name DMZ + ``` + +Comme vous pouvez le constater, le module de ressource a configuré le dispositif réseau Arista EOS avec la configuration fournie. Il y a maintenant cinq VLANs au total (y compris le VLAN par défaut 1). + +### Étape 6 - Utilisation du paramètre gathered + +* Créez un nouveau playbook nommé `gathered.yml` + + ```yaml + --- + - name: Configurer les VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: Utiliser le module de ressource VLANs + arista.eos.eos_vlans: + state: gathered + register: vlan_config + + - name: Copier la configuration VLAN dans un fichier + ansible.builtin.copy: + content: "{{ vlan_config | to_nice_yaml }}" + dest: "{{ playbook_dir }}/{{ inventory_hostname }}_vlan.yml" + mode: "644" + ``` + +* La première tâche est identique sauf que `state: merged` a été remplacé par `state: gathered`. La clé `config` n'est plus nécessaire car nous lisons la configuration au lieu de l'appliquer sur le dispositif réseau. Nous utilisons `register` pour sauvegarder la sortie du module dans une variable nommée `vlan_config`. + +* La seconde tâche copie la variable `vlan_config` dans un fichier plat. Les doubles accolades indiquent une variable. + +* Le `| to_nice_yaml` est un [filtre](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html) qui transforme la sortie JSON (par défaut) en YAML. + +* Les variables spéciales `playbook_dir` et `inventory_hostname` (appelées [variables magiques](https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html)) indiquent respectivement le répertoire où le playbook a été exécuté et le nom du dispositif dans notre inventaire. Cela signifie que les fichiers seront sauvegardés sous `~/network-workshop/rtr2_vlan.yml` et `~/network-workshop/rtr4_vlan.yml` pour les deux dispositifs Arista. + +### Étape 7 - Exécution du playbook gathered + +* Exécutez le playbook en utilisant `ansible-navigator run`. + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + ``` + +* La sortie ressemblera à ceci : + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + + PLAY [Configurer les VLANs] *************************************************** + + TASK [Utiliser le module de ressource VLANs] ********************************** + ok: [rtr4] + ok: [rtr2] + + TASK [Copier la configuration VLAN dans un fichier] ************************** + changed: [rtr2] + changed: [rtr4] + + PLAY RECAP ******************************************************************** + rtr2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +### Étape 8 - Examiner les fichiers + +* Ouvrez les fichiers nouvellement créés qui contiennent la configuration VLAN recueillie des dispositifs réseau Arista. + +* Les deux fichiers ont été sauvegardés sous `~/network-workshop/rtr2_vlan.yml` et `~/network-workshop/rtr4_vlan.yml`. + +* Voici une capture d'écran : + + ![examiner vlan yml](images/step8_examine.png) + +## Points Clés + +* Les modules de ressource possèdent une structure de données simple qui peut être transformée en syntaxe de dispositif réseau. Dans ce cas, le dictionnaire VLAN est transformé en syntaxe pour dispositif Arista EOS. +* Les modules de ressource sont **idempotents**, et peuvent être configurés pour vérifier l'état du dispositif. +* Les modules de ressource sont bi-directionnels, ce qui signifie qu'ils peuvent collecter des facts pour une ressource spécifique ainsi qu'appliquer une configuration. Même si vous n'utilisez pas ces modules pour configurer des dispositifs réseau, ils offrent une grande valeur pour la vérification de l'état des ressources. +* Le comportement bi-directionnel permet également aux **réseaux existants (brown-field)** de transformer rapidement leur configuration en cours en données structurées. Cela permet aux ingénieurs réseau de mettre en place l'automatisation plus rapidement et de réaliser des gains rapides. + +## Solution + +Les playbooks Ansible finaux sont fournis ici à titre de référence : + +- [resource.yml](resource.yml) +- [gathered.yml](gathered.yml) + +## Conclusion + +Vous avez terminé l'exercice 4. + +Comme mentionné précédemment, seuls deux des paramètres des modules de ressource ont été couverts dans cet exercice, mais d'autres sont disponibles dans les [exercices supplémentaires](../supplemental/README.fr.md). + +### Dans le prochain exercice, nous commencerons à utiliser Automation Controller. +--- +[Exercice précédent](../3-facts/README.fr.md) | [Exercice suivant](../5-explore-controller/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) diff --git a/exercises/ansible_network/5-explore-controller/README.fr.md b/exercises/ansible_network/5-explore-controller/README.fr.md new file mode 100644 index 000000000..4c98de9e3 --- /dev/null +++ b/exercises/ansible_network/5-explore-controller/README.fr.md @@ -0,0 +1,154 @@ +# Exercice 5 : Exploration de la Plateforme d’Automatisation Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 5 : Exploration de la Plateforme d’Automatisation Ansible](#exercice-5--exploration-de-la-plateforme-dautomatisation-ansible) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 : Connexion à la Plateforme d’Automatisation Ansible](#étape-1--connexion-à-la-plateforme-dautomatisation-ansible) + - [Étape 2 : Examiner l'Inventaire de la Plateforme d’Automatisation Ansible](#étape-2--examiner-linventaire-de-la-plateforme-dautomatisation-ansible) + - [Étape 3 : Examiner le Projet de la Plateforme d’Automatisation Ansible](#étape-3--examiner-le-projet-de-la-plateforme-dautomatisation-ansible) + - [Étape 4 : Examiner les Informations d’identification de la Plateforme d’Automatisation Ansible](#étape-4--examiner-les-informations-didentification-de-la-plateforme-dautomatisation-ansible) + - [Points Clés](#points-clés) + - [Conclusion](#conclusion) + +## Objectif + +Explorer et comprendre l'environnement de laboratoire. Cet exercice couvrira : + +* Déterminer la version de la Plateforme d’Automatisation Ansible sur le nœud de contrôle +* Localiser et comprendre : + * **Inventaire** + * **Informations d’identification** + * **Projets** + +## Guide + +### Étape 1 : Connexion à la Plateforme d’Automatisation Ansible + +1. Revenez à la page de lancement de l'atelier fournie par votre instructeur. + +2. Cliquez sur le lien vers l'interface Web de la Plateforme d’Automatisation Ansible. Vous devriez voir un écran de connexion similaire à ceci : + + ![Fenêtre de connexion](images/automation_controller_login.png) + + * Le nom d'utilisateur est `admin` + * Le mot de passe est fourni sur la page de lancement + +3. Après la connexion, le tableau de bord des jobs sera affiché par défaut comme ci-dessous. + + ![Tableau de bord](images/automation_controller_dashboard.png) + +4. Cliquez sur le bouton **?** en haut à droite de l'interface utilisateur, puis cliquez sur **À propos**. + + ![Bouton À propos](images/automation_controller_about.png) + +5. Une fenêtre pop-up apparaîtra avec les informations de version. + + ![Fenêtre d'informations sur la version](images/automation_controller_about_info.png) + +### Étape 2 : Examiner l'Inventaire de la Plateforme d’Automatisation Ansible + +Un inventaire est requis pour que la Plateforme d’Automatisation Ansible puisse exécuter des jobs. Un inventaire est une collection d'hôtes contre lesquels les jobs peuvent être lancés, semblable à un fichier d'inventaire Ansible. En outre, la plateforme peut utiliser une base de données de gestion de configuration (CMDB) existante comme ServiceNow ou Infoblox DDI. + +> Note : +> +> Pour plus d'informations sur les inventaires dans la Plateforme d’Automatisation Ansible, consultez [la documentation ici](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/latest/html/automation_controller_user_guide/controller-inventories) + +1. Cliquez sur le lien **Infrastructure** sous **Automation Execution** dans la barre de menu à gauche, puis cliquez sur le lien **Inventaires**. + + ![Bouton Inventaires](images/automation_controller_inventories.png) + +2. Sous Inventaires, cliquez sur `Workshop Inventory`. + + ![Lien Workshop Inventory](images/automation_controller_workshop_inventory.png) + +3. Sous `Workshop Inventory`, cliquez sur le bouton **Hôtes** en haut. Il y aura quatre hôtes ici, de `rtr1` à `rtr4`, ainsi que le nœud de contrôle Ansible. + + ![Hôtes Workshop Inventory](images/workshop_inventory_hosts.png) + +4. Cliquez sur l'un des dispositifs. + + ![Détail hôte Workshop](images/workshop_inventory_hosts_rtr1.png) + + Prenez note du champ **VARIABLES**. Les `host_vars` sont définis ici, y compris la variable `ansible_host`. + +5. Cliquez sur **GROUPES**. Il y aura plusieurs groupes ici, y compris `routers` et `cisco`. Cliquez sur l'un des groupes. + + ![Groupes Workshop Inventory](images/workshop_inventory_groups.png) + +6. Cliquez sur l'un des groupes. + + ![Variables de groupe Workshop Inventory](images/workshop_inventory_group_vars.png) + + Prenez note du champ **VARIABLES**. Les `group_vars` sont définis ici, y compris les variables `ansible_connection` et `ansible_network_os`. + +### Étape 3 : Examiner le Projet de la Plateforme d’Automatisation Ansible + +Un projet permet d’importer des playbooks dans la Plateforme d’Automatisation Ansible. Vous pouvez gérer les playbooks et les répertoires de playbooks en les plaçant manuellement sous le chemin de base des projets sur votre serveur de Plateforme d’Automatisation Ansible, ou en les plaçant dans un système de gestion de code source (SCM) pris en charge par la plateforme, notamment Git (GitHub, GitLab, etc.). + +> Note : +> +> Pour plus d'informations sur les Projets dans la Plateforme d’Automatisation Ansible, veuillez [consulter la documentation](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/latest/html/using_automation_execution/controller-projects) + +1. Cliquez sur le lien **Projets** sous **Automation Execution** dans la barre de menu à gauche. + + ![Lien Projet Workshop](images/automation_controller_projects.png) + +2. Sous **PROJETS**, il y aura un `Workshop Project`. + + ![Lien Projet Workshop](images/workshop_project.png) + + Notez que `GIT` est indiqué pour ce projet. Cela signifie que ce projet utilise Git pour la gestion du code source. + +3. Cliquez sur `Workshop Project`. + + ![Détail du Projet Workshop](images/workshop_project_detail.png) + + > Note : + > L’URL de contrôle source est configurée sur [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkitcredentials.html). + +### Étape 4 : Examiner les Informations d’identification de la Plateforme d’Automatisation Ansible + +Les identifiants sont utilisés par la Plateforme d’Automatisation Ansible pour l’authentification lors du lancement de **Jobs** sur des machines, de la synchronisation avec des sources d'inventaire et de l'importation de contenu de projet à partir d'un système de contrôle de version. Pour l'atelier, nous avons besoin d'un identifiant pour nous authentifier aux dispositifs réseau. + +> **Note :** +> +> Pour plus d'informations sur les Informations d’identification dans la Plateforme d’Automatisation Ansible, veuillez [consulter la documentation](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/latest/html/automation_controller_user_guide/controller-credentials). + +1. Cliquez sur le lien **Infrastructure** sous **Automation Execution** dans la barre de menu à gauche, puis cliquez sur le lien **Informations d’identification**. + + ![Lien Informations d’identification](images/automation_controller_credentials.png) + +2. Sous **Informations d’identification**, plusieurs identifiants préconfigurés sont présents, notamment `Workshop Credential`, `Controller Credential` et l’identifiant `registry.redhat.io`. Cliquez sur `Workshop Credential`. + + ![Lien Identifiant Workshop](images/workshop_credential.png) + +3. Sous `Workshop Credential`, examinez les éléments suivants : + +* Le **Type d'identifiant** est un identifiant de **Machine**. +* Le **Nom d'utilisateur** est configuré sur `ec2-user`. +* La **Clé SSH Privée** est déjà configurée et est **Chiffrée**. + +## Points Clés + +- **Plateforme d'Automatisation Ansible** a besoin d'un **inventaire** pour exécuter des Playbooks Ansible. Cet inventaire est identique à celui utilisé dans les projets Ansible en ligne de commande. +- La plateforme peut synchroniser des projets avec un SCM existant tel que GitHub. +- Elle peut également stocker et chiffrer des identifiants, notamment des clés privées SSH et des mots de passe en clair. La plateforme peut aussi se synchroniser avec des systèmes de gestion des identifiants existants comme CyberArk et Vault de HashiCorp. + +## Conclusion + +Vous avez complété l'exercice 5. + +Vous avez maintenant examiné les trois composants nécessaires pour démarrer avec la Plateforme d'Automatisation Ansible : un **identifiant**, un **inventaire** et un **projet**. Dans le prochain exercice, nous créerons un modèle de travail. + +--- +[Exercice précédent](../4-resource-module/README.fr.md) | [Exercice suivant](../6-controller-job-template/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + + + diff --git a/exercises/ansible_network/6-controller-job-template/README.fr.md b/exercises/ansible_network/6-controller-job-template/README.fr.md new file mode 100644 index 000000000..9e070709d --- /dev/null +++ b/exercises/ansible_network/6-controller-job-template/README.fr.md @@ -0,0 +1,148 @@ +# Exercice 6 : Création d’un Modèle de job sur la Plateforme d'Automatisation Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 6 : Création d’un modèle de job sur la Plateforme d'Automatisation Ansible](#exercice-6--création-d’un-modèle-de-job-sur-la-plateforme-dautomatisation-ansible) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 : Créer un modèle de job](#étape-1--créer-un-modèle-de-job) + - [Étape 2 : Lancer le modèle de job](#étape-2--lancer-le-modèle-de-job) + - [Étape 3 : Examiner le Job](#étape-3--examiner-le-job) + - [Étape 4 : Examiner la Fenêtre des Jobs](#étape-4--examiner-la-fenêtre-des-jobs) + - [Étape 5 : Vérifier que les Sauvegardes ont été créées](#étape-5--vérifier-que-les-sauvegardes-ont-été-créées) + - [Points Clés](#points-clés) + - [Conclusion](#conclusion) + +## Objectif + +Démontrer un modèle de job de sauvegarde de configuration réseau avec la Plateforme d'Automatisation Ansible. Ce modèle sauvegardera la configuration en cours des quatre routeurs et les stockera sous `/backup` sur le nœud de contrôle avec un horodatage. + +Pour exécuter un Playbook Ansible dans le Contrôleur d'Automatisation, nous devons créer un **Modèle de Job**. Un **Modèle de Job** requiert : + +* Un **Inventaire** pour exécuter le travail sur les hôtes +* Un **Identifiant** pour se connecter aux dispositifs +* Un **Projet** contenant les Playbooks Ansible + +## Guide + +### Étape 1 : Créer un modèle de job + +* Ouvrez l’interface Web et cliquez sur le lien `Modèles` dans le menu à gauche sous la section **Automation Execution**. + + ![lien modèles](images/controller_templates.png) + +* Cliquez sur le bouton bleu **Ajouter** pour créer un nouveau modèle. + + ![ajouter modèle](images/controller_add.png) + +> **Note :** +> +> Assurez-vous de sélectionner `modèle de job` et non `modèle de flux de travail`. + +* Remplissez les paramètres du modèle de job comme suit : + + | Paramètre | Valeur | + |---|---| + | Nom | Sauvegarder les configurations réseau | + | Type de Job | Exécuter | + | Inventaire | Workshop Inventory | + | Projet | Workshop Project | + | Environnement d'Exécution | network workshop execution environment | + | Playbook | playbooks/network_backup.yml | + | Identifiant | Workshop Credential | + +Capture d’écran des paramètres du modèle de job remplis : + ![modèle sauvegarde](images/controller_backup.png) + +* Ajoutez un deuxième identifiant au modèle de job. + + L’identifiant **Controller Credential** doit également être ajouté à ce modèle de job particulier. Cela permet au Contrôleur d'Automatisation de mettre à jour dynamiquement le pool de sauvegardes que le modèle **Network-Restore** utilisera. Le Contrôleur d'Automatisation peut être mis à jour de manière programmée avec des modèles de travail pour ajouter ou mettre à jour les configurations. Sélectionnez le second identifiant : + + ![sélection identifiant](images/controller_cred.png) + +* Faites défiler la page vers le bas et cliquez sur le bouton bleu `Enregistrer`. + +### Étape 2 : Lancer le modèle de job + +1. Revenez à la fenêtre des `Modèles` sous la section Automation Execution, où tous les modèles de travail sont listés. + +2. Lancez le modèle de job `Sauvegarder les configurations réseau` en cliquant sur le bouton en forme de fusée. + + ![bouton fusée](images/controller_rocket.png) + + Lorsque le bouton fusée est cliqué, cela lance le travail. Le travail s’ouvre dans une nouvelle fenêtre appelée la **Vue Détails du Job**. Plus d’informations sur les jobs du Contrôleur d'Automatisation peuvent être trouvées dans la documentation. + +### Étape 3 : Examiner le Job + +Après avoir exécuté le modèle de job, la [fenêtre Standard Out](https://docs.ansible.com/automation-controller/latest/html/userguide/jobs.html#standard-out) s’ouvre automatiquement. + +![vue détails travail](images/controller_job_output.png) + +1. Examinez la **Fenêtre Standard Out**. + + La fenêtre Standard Out affichera la sortie du Playbook Ansible. Chaque sortie de tâche correspondra exactement à ce qui serait vu en ligne de commande. + +2. Cliquez sur une tâche dans la **Fenêtre Standard Out** pour ouvrir la sortie structurée de cette tâche particulière. + + > Cliquez sur n’importe quelle ligne où il y a un statut **changed** ou **ok**. + + ![détails tâche](images/controller_details.png) + +3. Cliquez sur l’onglet **Détails** pour ouvrir la **Fenêtre Détails**. + + La **Fenêtre Détails** affiche des informations telles que l’horodatage du début et de la fin du travail, le type de travail (Vérification ou Exécution), les identifiants utilisés et les journaux. + +### Étape 4 : Examiner la Fenêtre des Jobs + +1. Revenez au menu principal et cliquez sur `Jobs` sous **Automation Execution**. + + ![menu jobs](images/controller_jobs.png) + +2. Cliquez sur l’un des jobs listés. + + ![jobs link](images/controller_jobs_link.png) + +3. Examinez les détails du travail, y compris l’état, la durée et les journaux associés. + +### Étape 5 : Vérifier que les Sauvegardes ont été créées + +1. Connectez-vous au nœud de contrôle Ansible via SSH. + + ```bash + $ ssh student@ansible-1 + ``` + +2. Naviguez vers le répertoire `/backup`. + + ```bash + $ cd /backup + ``` + +3. Listez les fichiers pour vérifier les sauvegardes créées. + + ```bash + $ ls -l + ``` + + Vous devriez voir des fichiers avec les configurations sauvegardées des routeurs. + +## Points Clés + +- Un **Modèle de Job** dans la Plateforme d'Automatisation Ansible combine un inventaire, un projet, un identifiant et un playbook. +- Les modèles de travail permettent d'automatiser les configurations réseau et les sauvegardes de manière centralisée. +- Les journaux et sorties structurées permettent une analyse approfondie des exécutions. + +## Conclusion + +Vous avez complété l'exercice 6. + +Dans le prochain exercice, nous explorerons les Modèles de Job REST API. + +--- +[Exercice précédent](../5-explore-controller/README.fr.md) | [Exercice suivant](../7-controller-survey/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/7-controller-survey/README.fr.md b/exercises/ansible_network/7-controller-survey/README.fr.md new file mode 100644 index 000000000..d5639465e --- /dev/null +++ b/exercises/ansible_network/7-controller-survey/README.fr.md @@ -0,0 +1,209 @@ +# Exercice 7 : Création d'un questionnaire + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 7 : Création d'un questionnaire](#exercice-7--création-dun-questionnaire) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 : Créer un modèle de job](#étape-1--créer-un-modèle-de-job) + - [Étape 2 : Examiner le Playbook](#étape-2--examiner-le-playbook) + - [Étape 3 : Créer un questionnaire](#étape-3--créer-un-questionnaire) + - [Étape 4 : Lancer le modèle de Job](#étape-4--lancer-le-modèle-de-job) + - [Étape 5 : Vérifier la Bannière](#étape-5--vérifier-la-bannière) + - [Points Clés](#points-clés) + - [Conclusion](#conclusion) + +## Objectif + +Démontrer l'utilisation de la [fonctionnalité de questionnaire](https://docs.ansible.com/automation-controller/latest/html/userguide/job_templates.html#surveys) du Contrôleur d'Automatisation. Les questionnaires permettent de définir des variables supplémentaires pour le playbook de manière similaire à « Prompt for Extra Variables », mais sous la forme de questions-réponses conviviales. Elles permettent également de valider les entrées utilisateur. + +## Guide + +### Étape 1 : Créer un modèle de job + +1. Ouvrez l'interface Web et cliquez sur le lien `Modèles` dans le menu à gauche. + + ![lien modèles](images/controller_templates.png) + +2. Cliquez sur le bouton bleu `Créer un modèle` et sélectionnez **Créer un modèle de travail** (assurez-vous de choisir `Modèle de Jobs` et non `Modèle de Flux de Travail`). + + | Paramètre | Valeur | + |---|---| + | Nom | Network-Banner | + | Type de Travail | Exécuter | + | Inventaire | Workshop Inventory | + | Projet | Workshop Project | + | Environnement d'Exécution | network workshop execution environment | + | Playbook | `playbooks/network_banner.yml` | + | Identifiant | Workshop Credential | + +3. Faites défiler la page et cliquez sur le bouton bleu `Créer un modèle de travail`. + +### Étape 2 : Examiner le Playbook + +Voici à quoi ressemble le Playbook Ansible `network_banner.yml` : + +```yaml +--- +- name: set router banners + hosts: routers + gather_facts: no + + tasks: + - name: load banner onto network device + vars: + - network_banner: "{{ net_banner | default(None) }}" + - banner_type: "{{ net_type | default('login') }}" + include_role: + name: "../roles/banner" +``` + +> **Note :** Vous pouvez également consulter le Playbook Ansible [ici](https://github.com/network-automation/toolkit). + +Le rôle **banner** contient un fichier `main.yml` simple : + +```yaml +- name: configure banner + include_tasks: "{{ ansible_network_os }}.yml" +``` + +La variable `ansible_network_os` permet de paramétrer le système d'exploitation réseau et de créer un playbook neutre vis-à-vis du fournisseur. + +Si vous travaillez avec un dispositif Junos, ce playbook appellera un fichier de tâches nommé `junos.yml`. Si vous utilisez un dispositif IOS-XE, il appellera un fichier `ios.yml`, qui contiendra les tâches spécifiques à la plateforme : + +```yaml +--- +- name: add the junos banner + junos_banner: + text: "{{ network_banner }}" + banner: "{{ banner_type }}" +``` + +> **Note :** +> Des fichiers de tâches sont prévus pour ios, nxos, eos et junos pour ce playbook. + +Les variables suivantes sont passées au fichier de tâches : + +1. `network_banner` : cette variable est alimentée par `net_banner` + +2. `banner_type` : cette variable est alimentée par `net_type` + +### Étape 3 : Créer un questionnaire + +Dans cette étape, vous créerez un formulaire de questionnaire pour collecter les entrées utilisateur et renseigner les valeurs des variables `net_banner` et `banner_type`. + +1. Cliquez sur l'onglet **Questionnaire** dans le Modèle de Jobs Network-Banner + + ![ajouter un questionnaire](images/controller_job_survey.png) + +2. Cliquez sur le bouton bleu **Ajouter** + + ![bouton ajout questionnaire](images/controller_add_survey.png) + +3. Remplissez les champs suivants : + + | Paramètre | Valeur | + |---|---| + | Question | Veuillez entrer le texte de la bannire | + | Description | Veuillez saisir le texte souhaité dans le champ | + | Nom de la Variable de Réponse | `net_banner` | + | Type de Réponse | Zone de Texte | + | Obligatoire | Cocher | + + Exemple : + + ![ questionnaire workshop](images/controller_survey_q_one.png) + +4. Cliquez sur `Enregistrer la question du questionnaire` + +5. Cliquez à nouveau sur le bouton bleu `Ajouter` pour créer une autre question + + ![bouton ajout questionnaire](images/controller_add_survey.png) + +6. Créez une invite pour collecter le `banner_type`. Celui-ci sera soit "motd" soit "login" et sera défini par défaut sur "login" dans le playbook ci-dessus. + + | Paramètre | Valeur | + |-------------------------|--------------------------------| + | Question | Veuillez entrer le type de bannire | + | Description | Veuillez choisir une option | + | Nom de la Variable de Réponse | `net_type` | + | Type de Réponse | Choix Multiple (sélection unique) | + | Options de Choix Multiples | login
motd | + | Valeur par Défaut | login | + | Obligatoire | Cocher | + + Exemple : + + ![ questionnaire workshop](images/controller_survey_q_two.png) + +7. Cliquez sur `Enregistrer la question du questionnaire` + +8. Assurez-vous que le bouton bascule est positionné sur `Questionnaire Activée` + + ![bascule questionnaire workshop](images/controller_survey_toggle.png) + +### Étape 4 : Lancer le modèle de job + +1. Revenez à la page des `Modèles` sous la section Automation Execution et cliquez sur le bouton fusée pour lancer le modèle de travail `Network-Banner`. + + ![bouton fusée](images/controller_launch.png) + +2. Une fenêtre s'ouvrira avec les questions du questionnaire. Entrez les valeurs des variables : + + | Question | Réponse Exemple | + |----------|-----------------| + | Veuillez entrer le texte de la bannère | Bienvenue sur ce dispositif réseau | + | Veuillez entrer le type de bannère | login | + + Cliquez sur `Lancer`. + + ![remplir questionnaire](images/controller_survey_fill.png) + +3. Attendez que le modèle de travail termine son exécution. + + ![exécution complète](images/controller_execution_complete.png) + +### Étape 5 : Vérifier la Bannière + +1. Connectez-vous à l'un des routeurs pour vérifier la bannière configurée. + + ```bash + $ ssh rtr1 + ``` + +2. Affichez la bannière configurée avec une commande propre au système d'exploitation réseau. Voici des exemples : + + - Pour IOS : + + ```bash + rtr1#show run | include banner + ``` + + - Pour Junos : + + ```bash + rtr1> show configuration system login + ``` + +3. Vous devriez voir la bannière configurée comme étant "Bienvenue sur ce dispositif réseau". + +## Points Clés + +- Les questionnaires permettent de rendre les modèles de travail interactifs en collectant des entrées utilisateur. +- Les questionnaires peuvent inclure des validations pour garantir la qualité des entrées utilisateur. +- Les modèles de travail deviennent plus dynamiques et adaptables avec l'utilisation des questionnaires. + +## Conclusion + +Vous avez complété l'exercice 7. + +Dans le prochain exercice, nous examinerons les modèles de restauration de configuration. + +--- +[Exercice précédent](../6-controller-job-template/README.fr.md) | [Exercice suivant](../8-controller-rbac/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/8-controller-rbac/README.fr.md b/exercises/ansible_network/8-controller-rbac/README.fr.md new file mode 100644 index 000000000..2218004b6 --- /dev/null +++ b/exercises/ansible_network/8-controller-rbac/README.fr.md @@ -0,0 +1,230 @@ +# Exercice 8 : Comprendre le RBAC dans le Contrôleur d'Automatisation + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 8 : Comprendre le RBAC dans le Contrôleur d'Automatisation](#exercice-8--comprendre-le-rbac-dans-le-contrôleur-dautomatisation) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 : Accéder aux Organisations](#étape-1--accéder-aux-organisations) + - [Étape 2 : Ouvrir l'Organisation réseau](#étape-2--ouvrir-lorganisation-réseau) + - [Étape 3 : Ajouter `network-admin` comme administrateur](#étape-3--ajouter-network-admin-comme-administrateur) + - [Étape 4 : Se connecter en tant que `network-admin`](#étape-4--se-connecter-en-tant-que-network-admin) + - [Étape 5 : Accorder l'accès au modèle de job à `network-operator`](#étape-5--accorder-laccès-au-modèle-de-job-à-network-operator) + - [Étape 6 : Vérifier le modèle de job `Network-Commands`](#étape-6--vérifier-le-modèle-de-job-network-commands) + - [Étape 7 : Se connecter en tant que `network-operator`](#étape-7--se-connecter-en-tant-que-network-operator) + - [Étape 8 : Lancer un modèle de job](#étape-8--lancer-un-modèle-de-job) + - [Étape Bonus](#étape-bonus) + - [Points Clés](#points-clés) + - [Conclusion](#conclusion) + +## Objectif + +L'un des principaux avantages de l'utilisation du Contrôleur d'Automatisation est le contrôle des utilisateurs du système. L'objectif de cet exercice est de comprendre les Contrôles d'Accès Basés sur les Rôles ([RBAC](https://docs.ansible.com/automation-controller/latest/html/userguide/security.html#role-based-access-controls)). Ces RBAC permettent aux administrateurs de définir des organisations, des équipes et des rôles, ainsi que d'y associer des utilisateurs. Cela permet aux organisations de sécuriser le système d'automatisation tout en respectant les exigences de conformité. + +## Guide + +Voici quelques définitions clés : + +* **Organisations** : Définissent une entité, par exemple *Réseau* ou *Systèmes*. Cela peut refléter la structure interne d'une organisation cliente. +* **Équipes** : Au sein de chaque organisation, il peut y avoir plusieurs équipes, par exemple *support-niveau-1*, *support-niveau-2*, *équipe-bâtiment*, etc. +* **Utilisateurs** : Les utilisateurs appartiennent généralement à des équipes. Ce qu'un utilisateur peut faire est défini par ses **rôles**. +* **Rôles** : Définissent les actions autorisées pour un utilisateur. Cela peut correspondre à des rôles de type support-niveau-1, support-niveau-2, administrateur senior, etc. La [documentation](https://docs.ansible.com/automation-controller/latest/html/userguide/security.html#built-in-roles) du Contrôleur d'Automatisation décrit des rôles prédéfinis. + +### Étape 1 : Accéder aux Organisations + +* Connectez-vous au Contrôleur d'Automatisation avec l'utilisateur **admin**. + + | Paramètre | Valeur | + |---|---| + | Nom d'utilisateur | `admin` | + | Mot de passe | Fournit par l'instructeur | + +* Confirmez que vous êtes connecté en tant qu'utilisateur **admin**. + + ![admin user](images/step_1.png) + +* Sous la section **Gestion des Accès**, cliquez sur **Organisations**. + +En tant qu'utilisateur `admin`, vous pouvez voir toutes les organisations configurées pour le Contrôleur d'Automatisation : + +* Examinez les organisations. + +Il existe deux organisations (en plus de l'organisation par défaut) : + +1. **Red Hat compute organization** +2. **Red Hat network organization** + + ![organizations image](images/step1-organizations.png) + +> Note : +> +> Cette page vous donne un résumé de toutes les équipes, utilisateurs, inventaires, projets et modèles de job associés. +> +> Si un administrateur de niveau Organisation est configuré, vous le verrez également. + +### Étape 2 : Ouvrir l'Organisation réseau + +1. Cliquez sur l'organisation **Red Hat network organization**. + + Cette action ouvre une section affichant les détails de l'organisation. + + ![network organization image](images/step2-network_org.png) + +### Étape 3 : Ajouter `network-admin` comme administrateur + +1. Cliquez sur l'onglet **Administrateurs**. + + ![administrator tab](images/admin_tab.png) + +2. Cliquez sur le bouton bleu **Ajouter des administrateurs** : + + ![add admin button](images/admin_button.png) + +3. Sélectionnez l'utilisateur **network-admin**, puis cliquez sur le bouton bleu **Ajouter des administrateurs**. + + ![add admin window](images/select_admin_button.png) + +### Étape 4 : Se connecter en tant que `network-admin` + +1. Déconnectez-vous de l'utilisateur admin en cliquant sur le bouton admin en haut à droite de l'interface utilisateur : + + ![logout image](images/step5_logout.png) + +2. Connectez-vous avec l'utilisateur **network-admin**. + + | Paramètre | Valeur | + |---|---| + | Nom d'utilisateur | network-admin | + | Mot de passe | Fournit par l'instructeur | + +3. Confirmez que vous êtes connecté en tant qu'utilisateur **network-admin**. + + ![picture of network admin](images/step5_network-admin.png) + +4. Cliquez sur le lien **Organisations** dans la barre latérale sous la section `Gestion des Accès`. + + Vous remarquerez que vous avez uniquement accès à l'organisation dont vous êtes administrateur, soit **Red Hat network organization**. + + Les deux organisations suivantes ne sont plus visibles : + + * `Red Hat compute organization` + * `Default` + +> Étape Bonus : +> +> Essayez cette action avec l'utilisateur `network-operator` (même mot de passe que `network-admin`). +> Quelle est la différence entre `network-operator` et `network-admin` ? +> En tant que `network-operator`, pouvez-vous voir d'autres utilisateurs ? +> Pouvez-vous ajouter un nouvel utilisateur ou modifier les informations d'un utilisateur ? + +### Étape 5 : Accorder l'accès au modèle de job à `network-operator` + +En tant qu'utilisateur `network-admin`, nous pouvons maintenant configurer l'accès pour `network-operator`. + +1. Cliquez sur **Modèles** dans le menu de gauche. + + ![job templates](images/job_templates.png) + +2. Cliquez sur le modèle de job `Network-Commands`. + + ![network banner](images/network_commands.png) + +3. Cliquez sur l'onglet `Accès`. + + ![user access](images/user_access.png) + +4. Cliquez sur le bouton bleu `Ajouter des rôles`. + + ![add roles button](images/add_roles.png) + +5. Cliquez sur `network-operator`, puis cliquez sur le bouton bleu `Suivant` en bas. + + ![add user window](images/add_user_window.png) + +6. Cliquez sur `Exécuter Modèle de job`, puis sur le bouton bleu `Suivant`. + + ![add role user](images/add_role_user.png) + +7. Vérifiez que tout est correctement configuré, puis cliquez sur le bouton bleu `Terminer`. + + ![finish window](images/finish.png) + +8. Cliquez sur le bouton `Fermer` après l'application du rôle. + + ![close window](images/close_window.png) + +### Étape 6 : Vérifier le Modèle de job `Network-Commands` + +1. Retournez au Modèle de job `Network-Commands`. + + ![network commands job template](images/network-commands-job-template.png) + +2. Vérifiez que l'Enquête est activée. + + ![verify survey](images/survey-enabled.png) + +3. Vérifiez les questions de l'Enquête. + + ![verify survey questions](images/verify-survey.png) + +4. Cliquez sur le bouton bleu `Enregistrer la question de l'enquête`. + +### Étape 7 : Se connecter en tant que `network-operator` + +Pour voir le RBAC en action ! + +1. Déconnectez-vous de l'utilisateur admin et reconnectez-vous en tant que **network-operator**. + + | Paramètre | Valeur | + |---|---| + | Nom d'utilisateur | `network-operator` | + | Mot de passe | Fournit par l'instructeur | + +2. Naviguez vers **Modèles** sous la section Automation Execution, puis cliquez sur le Modèle de job **Network-Commands**. + + ![network commands job template](images/step8_operator.png) + +> Note : +> +> En tant qu'utilisateur `network-operator`, vous n'avez pas la possibilité de modifier les champs. Le bouton **Modifier** n'est plus disponible. + +### Étape 8 : Lancer un modèle de job + +1. Lancez le modèle de job **Network-Commands** en cliquant sur le bouton **Lancer**. + +2. Une boîte de dialogue vous invitera à choisir l'une des commandes préconfigurées. + + ![pre configured survey image](images/step9_survey.png) + +3. Choisissez une commande, cliquez sur **Suivant**, puis sur **Lancer** pour voir l'exécution du playbook et les résultats affichés. + +### Étape Bonus + +Si le temps le permet, reconnectez-vous en tant que network-admin et ajoutez une autre commande à exécuter par l'opérateur. Cela vous permettra de voir comment le rôle d'administrateur permet de modifier le modèle de job. + +## Points Clés + + + +## Conclusion + +Vous avez complété l'exercice 8. + +--- +[Exercice précédent](../7-controller-survey/) | [Exercice suivant](../9-controller-workflow/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/9-controller-workflow/README.fr.md b/exercises/ansible_network/9-controller-workflow/README.fr.md new file mode 100644 index 000000000..c65b509d0 --- /dev/null +++ b/exercises/ansible_network/9-controller-workflow/README.fr.md @@ -0,0 +1,211 @@ +# Exercice 9 : Création d'un flux de travail + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 9 : Création d'un flux de travail](#exercice-9--création-dun-flux-de-travail) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 : Créer un modèle de flux de travail](#étape-1--créer-un-modèle-de-flux-de-travail) + - [Étape 2 : Le Visualiseur de flux de travail](#étape-2--le-visualiseur-de-flux-de-travail) + - [Étape 3 : Ajouter le modèle de flux de travail Configure Banner](#étape-3--ajouter-le-modèle-de-travail-configure-banner) + - [Étape 4 : Ajouter le modèle de flux de travail Configure Network-User](#étape-4--ajouter-le-modèle-de-travail-configure-network-user) + - [Étape 5 : Ajouter le modèle de flux de travail Network-Restore](#étape-5--ajouter-le-modèle-de-travail-network-restore) + - [Étape 6 : Créer un lien convergent](#étape-6--créer-un-lien-convergent) + - [Étape 7 : Exécuter le flux de travail](#étape-7--exécuter-le-flux-de-travail) + - [Points Clés](#points-clés) + - [Conclusion](#conclusion) + +## Objectif + +Démontrer l'utilisation de la plateforme d'automatisation Ansible pour les workflows. Les workflows permettent de configurer une séquence de modèles de travail distincts (ou modèles de flux de travail) qui peuvent ou non partager des inventaires, des playbooks ou des permissions. + +Dans cet exercice, nous créerons une sauvegarde horodatée. Si le travail de sauvegarde réussit, le flux de travail configurera simultanément une bannère et un utilisateur. Si l'un des modèles de travail échoue, nous restaurerons la sauvegarde horodatée. + +## Guide + +### Étape 1 : Créer un modèle de flux de travail + +1. Assurez-vous d'être connecté en tant qu'utilisateur **admin**. + +2. Cliquez sur le lien **Modèles** dans le menu de gauche. + + ![lien modèles](images/templates.png) + +3. Cliquez sur le bouton bleu **Créer un modèle** et sélectionnez **Créer un modèle de flux de travail**. + + ![ajouter modèle de flux de travail](images/controller_add_workflow.png) + +4. Remplissez le formulaire comme suit : + + | Paramètre | Valeur | + |---|---| + | Nom | Workshop Workflow | + | Organisation | Red Hat network organization | + | Inventaire | Workshop Inventory | + +5. Cliquez sur le bouton bleu **Créer un modèle de flux de travail**. + +### Étape 2 : Le Visualiseur de flux de travail + +1. En cliquant sur **Créer un modèle de flux de travail**, le **Visualiseur de flux de travail** devrait s'ouvrir automatiquement. Sinon, cliquez sur le bouton **Afficher le visualiseur de flux de travail**. + + ![onglet visualiseur](images/visualizer_tab.png) + +2. Par défaut, seul un bouton bleu **Ajouter une étape** apparaîtra. Cliquez sur le bouton **Ajouter une étape**. + + ![bouton ajouter étape](images/add_step.png) + +3. La fenêtre **Ajouter une étape** apparaîtra. + + * Définissez le Type de Nœud sur `Modèle de Job`. + * Sélectionnez le modèle de job `Backup network configurations` créé lors de l'exercice 6. + * Laissez Convergence sur **Any**. + * Laissez l'alias de nœud vide. + + ![ajouter un modèle](images/add_backup_node.png) + + * Cliquez sur le bouton bleu **Suivant**. + * Cliquez sur le bouton bleu **Terminer**. + +> Note : +> +> Le modèle de job `Backup network configurations` est maintenant un nœud. Les modèles de travail ou de flux de travail sont liés entre eux en utilisant une structure graphique appelée nœuds. Ces nœuds peuvent être des approbations, des travaux, des synchronisations de projets, des synchronisations d'inventaire ou même d'autres workflows. + + ![configurer nœud de sauvegarde](images/step2_workflow.png) + +### Étape 3 : Ajouter le modèle de job Configure Banner + +1. Survolez les trois points **\u22ee** sur le nœud `Backup network configurations` et cliquez sur le lien **Ajouter une étape et lier**. + + ![ajouter lien étape](images/new_add_step.png) + +2. Remplissez les valeurs suivantes : + + | Paramètre | Valeur | + |---|---| + | Type de Nœud | Modèle de Job | + | Modèle de Job | Network-Banner | + | Statut | Exécuter en cas de succès | + | Convergence | Any | + | Alias de Nœud | (laisser vide) | + + ![ajouter second nœud](images/step3_add_node.png) + +> Note : +> +> Les workflows peuvent être configurés pour exécuter des travaux d'automatisation lorsque le nœud précédent réussit, échoue, ou pour toujours s'exécuter quel que soit l'état du travail précédent. Cela permet aux workflows de corriger des problèmes ou de revenir à l'état précédent d'un dispositif. + +1. Cliquez sur le bouton bleu **Suivant** et remplissez le champ de l'enquête. + + ![ajouter modèle network banner](images/step3_add_network_banner.png) + +2. Cliquez à nouveau sur le bouton bleu **Suivant**, passez en revue, puis cliquez sur le bouton bleu **Terminer**. + +3. Une ligne verte devrait exister entre `Backup network configurations` et `Network-Banner`. + + ![nœud bannère](images/step3_final.png) + +### Étape 4 : Ajouter le modèle de job Configure Network-User + +1. Survolez les trois points **\u22ee** sur le nœud `Backup network configurations` et cliquez sur le lien **Ajouter une étape et lier** (pas sur le nœud `Network-Banner`). + +2. Remplissez les valeurs suivantes : + + | Paramètre | Valeur | + |---|---| + | Type de Nœud | Modèle de Job | + | Modèle de Job | Network-User | + | Statut | Exécuter en cas de succès | + | Convergence | Any | + | Alias de Nœud | (laisser vide) | + + ![sélectionner modèle utilisateur](images/step4_add_node.png) + +3. Cliquez sur le bouton bleu **Suivant** et remplissez le champ de l'enquête (vous pouvez laisser les valeurs par défaut). + + ![enquête utilisateur](images/user-survey.png) + +4. Cliquez sur **Suivant**, passez en revue, puis cliquez sur **Terminer**. + + Votre flux de travail devrait maintenant ressembler à l'image suivante : + + ![configurer nœud utilisateur](images/step4_final.png) + +### Étape 5 : Ajouter le modèle de job Network-Restore + +1. Survolez le nœud **Network-Banner** et cliquez sur les trois points **\u22ee**. La fenêtre **Ajouter une étape et lier** apparaîtra à nouveau. + +2. Remplissez les valeurs suivantes : + + | Paramètre | Valeur | + |---|---| + | Type de Nœud | Modèle de Job | + | Modèle de Job | Network Automation - Restore | + | Statut | Exécuter en cas d'échec | + | Convergence | Any | + | Alias de Nœud | (laisser vide) | + + Votre formulaire devrait ressembler à l'image suivante : + + ![restaurer image](images/fill_out_restore.png) + +3. Cliquez sur le bouton bleu **Suivant** pour l'étape d'enquête, puis choisissez une date de rollback (Note : il peut n'y avoir qu'un seul choix si vous avez effectué une seule sauvegarde). + +4. Cliquez à nouveau sur le bouton bleu **Suivant**, passez en revue et cliquez sur **Terminer**. + + Votre flux de travail devrait maintenant ressembler à l'image suivante : + + ![configurer nœud restauration](images/step5_final.png) + +### Étape 6 : Créer un lien convergent + +1. Survolez le nœud `Network-User` jusqu'à ce qu'une petite flèche apparaisse à droite. + + ![flèche image](images/arrow.png) + +2. Cliquez sur la flèche (elle deviendra grise) et faites-la glisser jusqu'au nœud `Network Automation - Restore`. + + ![en cas d'échec](images/step6_on_fail.png) + +3. Cliquez maintenant sur **Toujours exécuter** et changez-le en **Exécuter en cas d'échec**. + + ![nœud restauration](images/step6_complete_workflow.png) + +4. Cliquez sur **Enregistrer**, puis cliquez sur le **X** pour quitter le visualiseur. + + ![bouton enregistrer](images/save.png) + +### Étape 7 : Exécuter le flux de travail + +1. Cliquez sur le bouton **Lancer**. + + ![lancer flux de travail](images/step7_launch.png) + +2. Observez le **flux de travail Workshop**. + + ![flux de travail lancé](images/step7_final.png) + + À tout moment pendant le travail du flux de travail, vous pouvez sélectionner un modèle de job individuel en cliquant sur le nœud pour voir l'état. + +## Points Clés + +Vous avez : + +* Créé un **modèle de flux de travail** qui effectue une sauvegarde, puis tente de créer un utilisateur et une bannère pour tous les nœuds réseau. +* Rendu le flux de travail **robuste** : si l'un des modèles de travail échoue, il restaurera la sauvegarde spécifiée. +* Lancé le modèle de flux de travail et exploré le **Visualiseur de flux de travail**. + +## Conclusion + +Vous avez complété l'exercice 9. Cela conclut l'atelier d'automatisation réseau. Merci pour votre participation ! + +Pour des exercices supplémentaires, consultez [Exercices Supplémentaires](../supplemental/README.fr.md) + +--- +[Exercice précédent](../8-controller-rbac/README.fr.md) + +[Retour à l'atelier d'automatisation réseau Ansible](../README.fr.md) + diff --git a/exercises/ansible_network/README.fr.md b/exercises/ansible_network/README.fr.md new file mode 100644 index 000000000..61d7d98eb --- /dev/null +++ b/exercises/ansible_network/README.fr.md @@ -0,0 +1,34 @@ +# Atelier d'Automatisation de Réseau avec Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +**Ceci est une documentation pour la plateforme d'automatisation Ansible 2** + +L'atelier d'automatisation de réseau avec Ansible est un guide complet pour les débutants qui souhaitent automatiser des appareils de centre de données réseau populaires d'Arista, Cisco et Juniper via des playbooks Ansible. Vous apprendrez à extraire des informations des appareils, à créer des configurations réseau modélisées et à appliquer ces concepts à grande échelle avec le contrôleur d'automatisation Ansible. Vous mettrez tout cela en pratique en explorant les modèles de travail du contrôleur, les enquêtes, les contrôles d'accès et bien plus encore. + +## Présentation + +Vous voulez les diapositives de présentation ? Les voici : +- [Atelier d'Automatisation de Réseau avec Ansible (PDF)](https://ansible.github.io/workshops/decks/ansible_network.pdf) +- [Source Google](https://docs.google.com/presentation/d/1PIT-kGAGMVEEK8PsuZCoyzFC5CIzLBwdnftnUsdUNWQ/edit?usp=sharing) pour les employés de Red Hat + +## Exercices d'Automatisation de Réseau avec Ansible + +* [Exercice 1 - Exploration de l'environnement de laboratoire](./1-explore/) +* [Exercice 2 - Exécutez votre premier playbook d'automatisation de réseau](./2-first-playbook/) +* [Exercice 3 - Utilisation des informations Ansible sur les appareils réseau](./3-facts/) +* [Exercice 4 - Modules de Ressources Réseau Ansible](./4-resource-module/) +* [Exercice 5 - Exploration de l'environnement du contrôleur d'automatisation](./5-explore-controller/) +* [Exercice 6 - Création d'un modèle de travail pour le contrôleur d'automatisation](./6-controller-job-template/) +* [Exercice 7 - Création d'une enquête avec le contrôleur d'automatisation](./7-controller-survey/) +* [Exercice 8 - Utilisation de la fonctionnalité de contrôle d'accès basé sur les rôles (RBAC)](./8-controller-rbac/) +* [Exercice 9 - Création d'un flux de travail avec le contrôleur d'automatisation](./9-controller-workflow/) + +Des exercices supplémentaires sont [disponibles ici](supplemental/). + +## Diagramme de Réseau + +![Red Hat Ansible Automation](https://github.com/ansible/workshops/blob/devel/images/ansible_network_diagram.png?raw=true) + +--- +![Red Hat Ansible Automation](https://github.com/ansible/workshops/blob/devel/images/rh-ansible-automation-platform.png?raw=true) diff --git a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.fr.md b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.fr.md new file mode 100644 index 000000000..c600e20dc --- /dev/null +++ b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.fr.md @@ -0,0 +1,273 @@ +# Exercice 4 : Modules de Ressources Réseau Ansible - Exemple Cisco + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des matières + +- [Exercice 4 : Modules de Ressources Réseau Ansible - Exemple Cisco](#exercice-4--modules-de-ressources-réseau-ansible---exemple-cisco) + - [Table des matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 - Vérifier la configuration SNMP](#étape-1---vérifier-la-configuration-snmp) + - [Étape 2 - Création du Playbook Ansible](#étape-2---création-du-playbook-ansible) + - [Étape 3 - Examiner le Playbook Ansible](#étape-3---examiner-le-playbook-ansible) + - [Étape 4 - Exécuter le Playbook Ansible](#étape-4---exécuter-le-playbook-ansible) + - [Étape 5 - Vérifier la configuration SNMP](#étape-5---vérifier-la-configuration-snmp) + - [Étape 6 - Utilisation du paramètre gathered](#étape-6---utilisation-du-paramètre-gathered) + - [Étape 7 - Exécuter le playbook gathered](#étape-7---exécuter-le-playbook-gathered) + - [Étape 8 - Examiner les fichiers](#étape-8---examiner-les-fichiers) + - [Points Clés](#points-clés) + - [Solution](#solution) + - [Compléter](#compléter) + +## Objectif + +Démontrer l'utilisation des [Modules de Ressources Réseau Ansible](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) + +Les modules de ressources réseau Ansible simplifient et standardisent la gestion de différents dispositifs réseau. Ces dispositifs séparent la configuration en sections (comme les interfaces et les VLANs) qui s'appliquent à un service réseau. + +Les modules de ressources réseau offrent une expérience cohérente sur différents dispositifs réseau. Cela signifie que vous obtenez une expérience identique avec plusieurs fournisseurs. Par exemple, le module **snmp_server** fonctionnera de manière identique pour les modules suivants : + +* `arista.eos.snmp_server` +* `cisco.ios.snmp_server` +* `cisco.nxos.snmp_server` +* `cisco.iosxr.snmp_server` +* `junipernetworks.junos.snmp_server` + +Configurer [SNMP](https://fr.wikipedia.org/wiki/Simple_Network_Management_Protocol) sur des dispositifs réseau est une tâche très courante, et les erreurs de configuration peuvent entraîner des problèmes de surveillance. Les configurations SNMP ont tendance à être identiques sur plusieurs commutateurs réseau, ce qui constitue un cas d'utilisation idéal pour l'automatisation. + +Cet exercice couvrira : + +* La configuration de SNMP sur Cisco IOS +* La création d'un Playbook Ansible utilisant le [module cisco.ios.snmp_server](https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_snmp_server_module.html#ansible-collections-cisco-ios-ios-snmp-server-module) +* Comprendre `state: merged` +* Comprendre `state: gathered` + +## Guide + +### Étape 1 - Vérifier la configuration SNMP + +* Connectez-vous à un routeur Cisco IOS et vérifiez la configuration SNMP actuelle. + +* Depuis le terminal du nœud de contrôle, vous pouvez utiliser `ssh rtr2` et taper `enable` + + ```bash + [student@ansible-1 ~]$ ssh rtr1 + + rtr1# + ``` + +* Utilisez la commande `show snmp` pour examiner la configuration SNMP : + + ```bash + rtr1#show snmp + %SNMP agent not enabled + ``` + +* Utilisez `show run | s snmp` pour examiner la configuration en cours du Cisco : + + ```bash + rtr1#sh run | s snmp + rtr1# + ``` + +Comme vous pouvez le voir, il n'y a aucune configuration SNMP sur le routeur Cisco. + +### Étape 2 - Création du Playbook Ansible + +* Créez un nouveau fichier dans Visual Studio Code nommé `resource.yml` + + ![nouveau fichier](images/step1_new_file.png) + +* Copiez le playbook Ansible suivant dans `resource.yml` + + ```yaml + --- + - name: Configurer SNMP + hosts: cisco + gather_facts: false + + tasks: + + - name: Utiliser le module de ressource SNMP + cisco.ios.ios_snmp_server: + state: merged + config: + location: 'Durham' + packet_size: 500 + communities: + - acl_v4: acl_uq + name: Durham-community + rw: true + - acl_v4: acl_uq + name: ChapelHill-community + rw: true + ``` + +### Étape 3 - Examiner le Playbook Ansible + +* Examinons d'abord les quatre premières lignes : + + ```yaml + --- + - name: configurer SNMP + hosts: cisco + gather_facts: false + ``` + + * `---` indique qu'il s'agit d'un fichier [YAML](https://fr.wikipedia.org/wiki/YAML) pour les playbooks. + * `name` est la description du playbook. + * `hosts: cisco` exécutera ce playbook uniquement sur les dispositifs réseau Cisco. `cisco` est un [groupe](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#inventory-basics-formats-hosts-and-groups). + * `gather_facts: false` désactive la collecte de faits pour ce play. + +* Pour la deuxième partie, nous avons une tâche qui utilise `cisco.ios.snmp_server` + + ```yaml + tasks: + + - name: Utiliser le module de ressource SNMP + cisco.ios.ios_snmp_server: + state: merged + config: + location: 'Durham' + packet_size: 500 + communities: + - acl_v4: acl_uq + name: Durham-community + rw: true + - acl_v4: acl_uq + name: ChapelHill-community + rw: true + ``` + + * `name:` - comme pour le play, chaque tâche a une description. + * `state: merged` - Ce comportement par défaut des modules de ressource garantit que la configuration fournie existe sur le dispositif réseau. + * `config:` - la configuration SNMP fournie. Si le module changeait de `cisco.ios.snmp_server` à `junipernetworks.junos.snmp_server`, cela fonctionnerait identiquement. + +### Étape 4 - Exécuter le Playbook Ansible + +* Exécutez le playbook avec `ansible-navigator run`. Comme il n'y a qu'une tâche, utilisez `--mode stdout` + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* La sortie ressemblera à ceci : + + ```bash + PLAY [Configurer SNMP] ********************************************************** + + TASK [Utiliser le module de ressource SNMP] *************************** + changed: [rtr1] + + PLAY RECAP ********************************************************************* + rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +### Étape 5 - Vérifier la configuration SNMP + +* Connectez-vous à un commutateur Cisco et vérifiez la configuration SNMP. + +* Depuis le terminal du nœud de contrôle, utilisez `ssh rtr1` + +* Utilisez la commande `show snmp` pour examiner la configuration SNMP : + + ```bash + rtr1#show snmp + Chassis: 99SDJQ9I6WK + Location: Durham + SNMP global trap: disabled + ``` + +* Utilisez `show run | s snmp` pour examiner la configuration en cours : + + ```bash + rtr1#show run | s snmp + snmp-server community Durham-community RW acl_uq + snmp-server community ChapelHill-community RW acl_uq + snmp-server packetsize 500 + snmp-server location Durham + ``` + +Comme vous pouvez le voir, le module de ressource a configuré le dispositif réseau Cisco IOS-XE avec la configuration fournie. + +### Étape 6 - Utilisation du paramètre gathered + +* Créez un nouveau playbook nommé `gathered.yml` + + ```yaml + --- + - name: Récupérer la configuration SNMP + hosts: cisco + gather_facts: false + + tasks: + + - name: Utiliser le module de ressource SNMP + cisco.ios.ios_snmp_server: + state: gathered + register: snmp_config + + - name: Copier snmp_config dans un fichier + ansible.builtin.copy: + content: "{{ snmp_config | to_nice_yaml }}" + dest: "{{ playbook_dir }}/{{ inventory_hostname }}_snmp.yml" + mode: "644" + ``` + +* La première tâche est identique sauf que `state: merged` a été remplacé par `state: gathered`. `config` n'est plus nécessaire car nous lisons la configuration. + +* La seconde tâche copie la variable `snmp_config` dans un fichier plat. + +* Le `| to_nice_yaml` est un [filtre](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html) qui transforme la sortie JSON en YAML. + +### Étape 7 - Exécuter le playbook gathered + +* Exécutez le playbook avec `ansible-navigator run` + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + ``` +### Étape 8 - Examiner les fichiers + +* Ouvrez les nouveaux fichiers créés qui ont `récolté` la configuration SNMP à partir du(des) appareil(s) réseau Cisco. + +* Les fichiers ont été stockés sous le nom de l'appareil, par exemple pour rtr1 : `~/network-workshop/rtr1_snmp.yml. + +```bash + $ cat rtr1_snmp.yml + changed: false + failed: false + gathered: + communities: + - acl_v4: acl_uq + name: ChapelHill-community + rw: true + - acl_v4: acl_uq + name: Durham-community + rw: true + location: Durham + packet_size: 500 +``` + +## Points à retenir + +* Les modules de ressources ont une structure de données simple qui peut être transformée en syntaxe pour l'appareil réseau. Dans ce cas, le dictionnaire SNMP est transformé en syntaxe pour les appareils réseau Cisco IOS-XE. +* Les modules de ressources sont idempotents et peuvent être configurés pour vérifier l'état de l'appareil. +* Les modules de ressources sont bidirectionnels, ce qui signifie qu'ils peuvent à la fois récolter des informations pour cette ressource spécifique et appliquer une configuration. Même si vous n'utilisez pas les modules de ressources pour configurer les appareils réseau, ils sont très utiles pour vérifier l'état des ressources. +* Le comportement bidirectionnel permet également aux réseaux existants (brown-field networks) de convertir rapidement leur configuration en cours d'exécution en données structurées. Cela permet aux ingénieurs réseau de démarrer rapidement l'automatisation et d'obtenir des résultats rapides. + +## Solution + +Le Playbook Ansible final est fourni ici comme référence : + +- [resource.yml](resource.yml) +- [gathered.yml](gathered.yml) + +## Complété + +Vous avez terminé cet exercice de laboratoire. + +--- + +[Cliquez ici pour retourner au Workshop d'Automatisation de Réseaux Ansible](../../README.fr.md) diff --git a/exercises/ansible_network/supplemental/README.fr.md b/exercises/ansible_network/supplemental/README.fr.md new file mode 100644 index 000000000..6f4c5b8ea --- /dev/null +++ b/exercises/ansible_network/supplemental/README.fr.md @@ -0,0 +1,19 @@ +# Exercices Supplémentaires sur l'Automatisation Réseau avec Ansible + +**Lisez ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +Voici des exercices supplémentaires disponibles pour les étudiants qui ont déjà terminé l'atelier ou qui cherchent à approfondir leurs connaissances. + +- [Modules de Ressources Réseau - Suite](resource/README.fr.md) : cet exercice est une extension de [l'exercice 4 - Modules de Ressources Réseau Ansible](../4-resource-module/README.fr.md). +- [Module de ressource Cisco SNMP](4-resource-module-cisco/README.fr.md)) : cet exercice reprend l'exercice 4 avec un focus sur Cisco et le module SNMP. +- [Configuration Réseau avec des Modèles Jinja](jinja/README.fr.md)) : cet exercice enseignera aux ingénieurs réseau comment modéliser des configurations réseau en utilisant Jinja2. + +## Merci + +Merci d'avoir participé à l'atelier d'automatisation réseau avec Ansible. + +- Pour le code source sur GitHub, veuillez consulter [https://github.com/ansible/workshops](https://github.com/ansible/workshops). +- Pour plus d'informations sur l'automatisation réseau avec Ansible, veuillez visiter notre site Web [https://www.ansible.com/use-cases/network-automation](https://www.ansible.com/use-cases/network-automation). + +![logo atelier](https://github.com/ansible/workshops/blob/devel/images/Ansible-Workshop-Logo.png?raw=true) + diff --git a/exercises/ansible_network/supplemental/jinja/README.fr.md b/exercises/ansible_network/supplemental/jinja/README.fr.md new file mode 100644 index 000000000..4accb8885 --- /dev/null +++ b/exercises/ansible_network/supplemental/jinja/README.fr.md @@ -0,0 +1,197 @@ +# Supplémentaire - Configuration Réseau avec les Modèles Jinja + +**Lire ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md),![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). + +## Table des Matières + +- [Supplémentaire - Configuration Réseau avec les Modèles Jinja](#supplémentaire---configuration-réseau-avec-les-modèles-jinja) + - [Table des Matières](#table-des-matières) + - [Objectif](#objectif) + - [Guide](#guide) + - [Étape 1 - Création des variables de groupe](#étape-1---création-des-variables-de-groupe) + - [Étape 2 - Création d'un modèle Jinja2](#étape-2---création-dun-modèle-jinja2) + - [Étape 3 - Exploration du modèle Jinja2](#étape-3---exploration-du-modèle-jinja2) + - [Étape 4 - Création d'un playbook](#étape-4---création-dun-playbook) + - [Étape 5 - Exécution du Playbook Ansible](#étape-5---exécution-du-playbook-ansible) + - [Étape 6 - Vérification de la configuration](#étape-6---vérification-de-la-configuration) + - [Points à retenir](#points-à-retenir) + - [Solution](#solution) + - [Terminer](#terminer) + +## Objectif + +Démonstration de la génération d'une configuration réseau et de son application sur un appareil + +* Utilisation et compréhension des [variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) pour stocker les adresses IP souhaitées. +* Utilisation du [plugin de recherche de modèles Jinja2](https://docs.ansible.com/ansible/latest/plugins/lookup.html) +* Démonstration de l'utilisation du [module cli_config](https://docs.ansible.com/ansible/latest/modules/cli_config_module.html) pour l'automatisation réseau. + +## 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` : + +- 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** + + ![nouveau dossier](images/ansible-navigator-new-folder.png) + +- 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`. + + ![nouveau fichier](images/ansible-navigator-new-file.png) + +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` : + +```yaml +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 : + + + +```yaml +{% 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éé. + + + +```yaml +{% 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](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts) automatiquement fournie. + +* Le mot-clé `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) + +```yaml +interface {{interface}} + ip address {{ip}} 255.255.255.255 +``` + +* Les variables sont rendues avec les accolades comme ceci : `{{ variable_here }}`. Dans ce cas, les noms des variables n'existent que dans le contexte de la boucle. En dehors de la boucle, ces deux variables n'existent pas. Chaque itération réattribuera les variables à de nouvelles valeurs en fonction de ce que nous avons dans nos variables. + +Enfin : + +```yaml +{% endfor %} +``` + +* En Jinja, nous devons spécifier la fin de la boucle. + +### Étape 4 - Création d'un playbook + +- Créez un nouveau fichier de Playbook Ansible appelé `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 : + +```yaml +--- +- name: configure network devices + hosts: rtr1,rtr2 + gather_facts: false + tasks: + - name: configure device with config + cli_config: + config: "{{ lookup('template', 'template.j2') }}" +``` + +* Ce Playbook Ansible contient une tâche nommée *configure device with config* +* Le module **cli_config** est indépendant du fournisseur. Ce module fonctionnera de manière identique pour un appareil Arista, Cisco ou Juniper. Ce module fonctionne uniquement avec le plugin de connexion **network_cli**. +* Le module cli_config ne nécessite qu'un paramètre, dans ce cas **config**, qui peut pointer vers un fichier plat ou utiliser le plugin de recherche comme ici. Pour une liste complète des plugins de recherche disponibles [visitez la documentation](https://docs.ansible.com/ansible/latest/plugins/lookup.html) +* L'utilisation du plugin de recherche template nécessite deux paramètres : le type de plugin *template* et le nom du modèle correspondant *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. + +```sh +[student@ansible network-workshop]$ ssh rtr1 + +rtr1#show ip int br | include Loopback100 +Loopback100 192.168.100.1 YES manual up up +``` + +## Points à retenir + +* Le [plugin de recherche de modèles Jinja2](https://docs.ansible.com/ansible/latest/plugins/lookup.html) permet de générer une configuration pour un appareil. +* Les modules `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](https://docs.ansible.com/ansible/latest/modules/template_module.html). +* Les variables sont le plus souvent stockées dans `group_vars` et `host_vars`. Cet exemple court n'a utilisé que group_vars. + +## Solution + +Le Playbook Ansible final est fourni ici comme référence : [config.yml](config.yml). + +Le modèle Jinja2 fourni est disponible ici : [template.j2](template.j2). + +## Terminer + +Vous avez terminé cet exercice de laboratoire. + +--- + +[Cliquez ici pour revenir au Workshop d'Automatisation de Réseaux Ansible](../../README.fr.md) diff --git a/exercises/ansible_network/supplemental/resource/README.fr.md b/exercises/ansible_network/supplemental/resource/README.fr.md new file mode 100644 index 000000000..466f2fc66 --- /dev/null +++ b/exercises/ansible_network/supplemental/resource/README.fr.md @@ -0,0 +1,561 @@ +# Exercice Supplémentaire : Modules de Ressources Réseau Ansible + +**Lire ceci dans d'autres langues** : ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). + +## Table des Matières + + * [Objectif](#objectif) + * [Étape 1 - Modifier manuellement la configuration Arista](#étape-1---modifier-manuellement-la-configuration-arista) + * [Étape 2 - Exécuter le playbook](#étape-2---exécuter-le-playbook) + * [Étape 3 - Modifier le playbook](#étape-3---modifier-le-playbook) + * [Étape 4 - Exécuter le playbook modifié](#étape-4---exécuter-le-playbook-modifié) + * [Étape 5 - Ajouter un VLAN à rtr2](#étape-5---ajouter-un-vlan-à-rtr2) + * [Étape 6 - Utiliser le paramètre overridden](#étape-6---utiliser-le-paramètre-overridden) + * [Étape 7 - Utilisation du paramètre rendered](#étape-7---utilisation-du-paramètre-rendered) + * [Étape 8 - Utilisation du paramètre parsed](#étape-8---utilisation-du-paramètre-parsed) + * [Points à retenir](#points-à-retenir) + * [Solution](#solution) + * [Terminer](#terminer) + +## Objectif + +Démonstration de l'utilisation des [Modules de Ressources Réseau Ansible](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) + +Cet exercice est une extension de l'étape [exercice 4 - Modules de Ressources Réseau Ansible](../../4-resource-module/). Veuillez compléter cet exercice avant de commencer celui-ci. + +Il y a deux parties à cet exercice : + +1. Couvrir des paramètres de configuration `state` supplémentaires : + + * `replaced` + * `overridden` + + et les comparer à ce que nous avons vu avec `merged`. + +2. Couvrir des paramètres `state` supplémentaires en lecture seule : + + * `rendered` + * `parsed` + + et les comparer au paramètre `gathered`. + +### Étape 1 - Modifier manuellement la configuration Arista + +* Connectez-vous à un switch Arista. Nous supposons que la configuration de l'exercice 4 est déjà appliquée + + ```bash + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + ``` + +* Depuis le terminal du nœud de contrôle, vous pouvez utiliser `ssh rtr2` et taper `enable` + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* Utilisez la commande `configure terminal` pour modifier manuellement la configuration Arista : + + ```bash + rtr2#configure terminal + rtr2(config)# + ``` +* Configurez maintenant le vlan 50 en `state suspend` + + ```bash + rtr2(config)#vlan 50 + rtr2(config-vlan-50)#state ? + active VLAN Active State + suspend VLAN Suspended State + + rtr2(config-vlan-50)#state suspend + ``` + +* Sauvegardez la configuration + + ```bash + rtr2(config-vlan-50)#exit + rtr2(config)#end + rtr2#copy running-config startup-config + Copy completed successfully. + ``` + +* Examinez la configuration + + ```bash + rtr2#sh run | s vlan + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + state suspend + ``` + + * La configuration en cours d'exécution ne correspond plus à notre playbook ! Le vlan 50 est maintenant en état suspendu. + +### Étape 2 - Exécuter le playbook + +* Exécutez le playbook en utilisant `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* La sortie ressemblera à ceci : + + ```bash + [student@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Le playbook n'a **PAS** modifié la configuration. Le paramètre `state: merged` garantit uniquement que la configuration fournie existe sur l'appareil réseau. Comparons cela à `replaced`. Si vous vous connectez à l'appareil réseau Arista, l'état suspendu sera toujours présent. + +### Étape 3 - Modifier le playbook + +* Modifiez le playbook `resource.yml` pour que `state: merged` devienne `state: replaced` + +* Le playbook devrait ressembler à ceci : + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: replaced + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + +### Étape 4 - Exécuter le playbook modifié + +* Exécutez le playbook en utilisant `ansible-navigator run`. Comme il n'y a qu'une seule tâche, nous pouvons utiliser `--mode stdout` + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* La sortie ressemblera à ceci : + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + changed: [rtr4] + changed: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +Continuez ainsi pour l'ensemble de la traduction. Une fois terminée, chaque partie de l'étape sera précisée. + +### Étape 5 - Ajouter un VLAN à rtr2 + +* Créez le VLAN 100 sur `rtr2` + + ```bash + rtr2(config)#vlan 100 + rtr2(config-vlan-100)#name ? + WORD Le nom ASCII du VLAN + rtr2(config-vlan-100)#name artisanal + ``` + +* On peut supposer que quelqu'un a créé ce VLAN en dehors de l'automatisation (par exemple, ils ont créé manuellement un VLAN, appelé VLAN artisanal). Cela est appelé des modifications réseau "hors bande". C'est très courant dans l'industrie du réseau, car un ingénieur réseau a résolu un problème mais n'a jamais documenté ni supprimé cette configuration. Cette modification manuelle ne respecte pas les meilleures pratiques ou la politique documentée. Cela pourrait causer des problèmes si quelqu'un tente d'utiliser ce VLAN à l'avenir sans être au courant de cette configuration. + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + 100 artisanal active + ``` + +* Réexécutez le playbook. Le VLAN 100 n'est **PAS** supprimé. + +### Étape 6 - Utiliser le paramètre overridden + +* Modifiez le playbook, cette fois en utilisant `state: overridden` + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: overridden + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + +* Exécutez le playbook en utilisant `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` +* Connectez-vous à l'appareil `rtr2` et examinez les VLANs + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + ``` + +* Le VLAN artisanal 100 a été supprimé ! Maintenant, les mêmes modules de ressources peuvent être utilisés non seulement pour configurer des appareils réseau, mais aussi pour faire respecter quels VLANs sont configurés. Cela est appelé enforcement de politique et constitue une part importante de la gestion de configuration. Passer de `merged` à `replaced` puis à `overridden` correspond souvent au parcours d'automatisation pour une équipe réseau au fur et à mesure qu'elle gagne en confiance avec l'automatisation. + +### Étape 7 - Utilisation du paramètre rendered + +Revenons maintenant à l'utilisation de paramètres en lecture seule. Ces paramètres ne modifient pas la configuration d'un appareil réseau. Dans l'exercice 4, nous avons utilisé `state: gathered` pour récupérer la configuration VLAN de l'appareil réseau Arista. Cette fois, nous utiliserons `rendered` pour obtenir les commandes Arista qui génèrent la configuration : + +* Modifiez le playbook `resource.yml` pour `state: rendered` + +* Enregistrez la sortie de la tâche dans une variable nommée `rendered_config` + +* Ajoutez une tâche `debug` pour afficher la sortie dans la fenêtre du terminal + +* Le playbook ressemblera à ceci : + +{% raw %} + ```yaml + - name: use vlans resource module + arista.eos.vlans: + state: rendered + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + register: rendered_config + + - name: use vlans resource module + debug: + msg: "{{ rendered_config }}" + ``` +{% endraw %} + +* Exécutez le playbook en utilisant `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + +* La sortie ressemblera à ceci : + + ```bash + [student@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr2] + ok: [rtr4] + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "rendered": [ + "vlan 20", + "name desktops", + "vlan 30", + "name servers", + "vlan 40", + "name printers", + "vlan 50", + "name DMZ" + ] + } + } + ok: [rtr2] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "rendered": [ + "vlan 20", + "name desktops", + "vlan 30", + "name servers", + "vlan 40", + "name printers", + "vlan 50", + "name DMZ" + ] + } + } + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Le champ `rendered` affiche les commandes Arista qui sont utilisées pour générer la configuration ! Cela permet aux automatiseurs réseau de savoir exactement quelles commandes seraient exécutées avant de lancer l'automatisation pour appliquer les commandes. + +### Étape 8 - Utilisation du paramètre parsed + +Enfin, abordons le paramètre `parsed`. Ce paramètre est utilisé lorsqu'un fichier existant contient la configuration de l'appareil réseau. Imaginez qu'une sauvegarde ait déjà été effectuée. + +* Tout d'abord, sauvegardons une configuration. Voici un playbook simple pour effectuer une sauvegarde de configuration. Le playbook est [backup.yml](backup.yml). + +{% raw %} + ```yaml + --- + - name: backup config + hosts: arista + gather_facts: false + + tasks: + + - name: retrieve backup + arista.eos.config: + backup: true + backup_options: + filename: "{{ inventory_hostname }}.txt" + ``` +{% endraw %} + +* Exécutez le playbook : + + ```bash + $ ansible-navigator run backup.yml --mode stdout + ``` + +* Vérifiez que les sauvegardes ont été créées : + + ```bash + $ ls backup + rtr2.txt rtr4.txt + ``` + +* Modifiez maintenant le playbook `resource.yml` pour utiliser le playbook `parsed` : + +{% raw %} + ```yaml + --- + - name: use parsed + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: parsed + running_config: "{{ lookup('file', 'backup/{{ inventory_hostname }}.txt') }}" + register: parsed_config + + - name: print to terminal screen + debug: + msg: "{{ parsed_config }}" + ``` +{% endraw %} + +* Il y a quelques changements supplémentaires : + + * au lieu de `config`, nous utilisons `running-config` en pointant vers le fichier de sauvegarde. + * Nous enregistrons la sortie du module dans la variable `parsed_config` + * Nous utilisons le module debug pour afficher la variable `parsed_config` + +* Exécutez le playbook : + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* La sortie ressemblera à ceci : + + ```yaml + [student@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [use parsed] ************************************************************** + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + TASK [print to terminal screen] ************************************************ + ok: [rtr2] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + }, + { + "name": "servers", + "state": "active", + "vlan_id": 30 + }, + { + "name": "printers", + "state": "active", + "vlan_id": 40 + }, + { + "name": "DMZ", + "state": "active", + "vlan_id": 50 + } + ] + } + } + ok: [rtr4] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + }, + { + "name": "servers", + "state": "active", + "vlan_id": 30 + }, + { + "name": "printers", + "state": "active", + "vlan_id": 40 + }, + { + "name": "DMZ", + "state": "active", + "vlan_id": 50 + } + ] + } + } + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Dans la sortie ci-dessus, vous verrez que la sauvegarde sous forme de fichier plat a été analysée en données structurées : + + ```json + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + } + ``` + +* La sortie par défaut est en JSON mais peut être facilement transformée en YAML. + +## Points à retenir + +Nous avons couvert deux paramètres de configuration `state` supplémentaires : + + * `replaced` - applique une configuration pour des VLANs spécifiques + * `overridden`- applique une configuration pour TOUS les VLANs + +Passer de `merged` à `replaced` puis à `overridden` correspond au parcours d'adoption de l'automatisation au fur et à mesure que les équipes réseau gagnent en confiance. + +Nous avons également couvert des paramètres en lecture seule supplémentaires : + + * `rendered` - montre les commandes qui généreraient la configuration souhaitée + * `parsed` - transforme une configuration sous forme de fichier plat (comme une sauvegarde) en données structurées (plutôt que de modifier l'appareil réel) + +Ces fonctionnalités permettent aux automatiseurs réseau d'utiliser les modules de ressources dans des scénarios supplémentaires, tels que les environnements déconnectés. Les modules de ressources réseau offrent une expérience cohérente sur différents appareils réseau. + +Le [guide de documentation](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) fournit des informations complémentaires sur l'utilisation des modules de ressources réseau. + +## Solution + +Le playbook Ansible final est fourni ici comme référence : + +- [overridden.yml](overridden.yml) +- [backup.yml](backup.yml) +- [parsed.yml](parsed.yml) + +## Terminer + +Vous avez terminé le laboratoire supplémentaire ! + +--- + +[Cliquez ici pour revenir aux exercices supplémentaires](../README.fr.md) + +[Cliquez ici pour revenir au Workshop d'Automatisation de Réseaux Ansible](../../README.fr.md) From 15a05482ba9e1a93d1012797137b230af5a154f3 Mon Sep 17 00:00:00 2001 From: jfbourque Date: Fri, 7 Feb 2025 17:33:55 -0500 Subject: [PATCH 2/5] Include french version in spanish version this is required in order to be able toswitch betwen spanish and french --- exercises/ansible_network/1-explore/README.es.md | 4 ++-- exercises/ansible_network/2-first-playbook/README.es.md | 2 +- exercises/ansible_network/3-facts/README.es.md | 2 +- exercises/ansible_network/4-resource-module/README.es.md | 8 ++++---- .../ansible_network/5-explore-controller/README.es.md | 2 +- .../6-controller-job-template/README.es.md | 2 +- .../ansible_network/7-controller-survey/README.es.md | 4 ++-- exercises/ansible_network/8-controller-rbac/README.es.md | 2 +- .../ansible_network/9-controller-workflow/README.es.md | 2 +- exercises/ansible_network/README.es.md | 2 +- exercises/ansible_network/supplemental/README.es.md | 4 +++- exercises/ansible_network/supplemental/jinja/README.es.md | 4 ++-- 12 files changed, 20 insertions(+), 18 deletions(-) diff --git a/exercises/ansible_network/1-explore/README.es.md b/exercises/ansible_network/1-explore/README.es.md index 83e250f86..8b380d4b0 100644 --- a/exercises/ansible_network/1-explore/README.es.md +++ b/exercises/ansible_network/1-explore/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 1 - Explorando el entorno de laboratorio -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice @@ -260,7 +260,7 @@ Pulsa la tecla **Esc** para subir un nivel o para hacer zoom en una máquina en ### Paso 8 - Connectándose a dispositivos de red -Hay 4 enrutadores llamados rtr1, rtr2, rtr3 y rtr4. El diagrama de red está siempre disponible en [network automation workshop table of contents](../README.md). El fichero de configuración de SSH (`~/.ssh/config`) está ya configurado en el nodo de control. Es decir, puedes hacer SSH a cualquier enrutador desde el nodo de control sin necesidad de login: +Hay 4 enrutadores llamados rtr1, rtr2, rtr3 y rtr4. El diagrama de red está siempre disponible en [network automation workshop table of contents](../README.fr.md). El fichero de configuración de SSH (`~/.ssh/config`) está ya configurado en el nodo de control. Es decir, puedes hacer SSH a cualquier enrutador desde el nodo de control sin necesidad de login: Por ejemplo, conectate a rtr1 desde el nodo de control de Ansible haciendo: diff --git a/exercises/ansible_network/2-first-playbook/README.es.md b/exercises/ansible_network/2-first-playbook/README.es.md index 9c1b35eb3..25a6c4465 100644 --- a/exercises/ansible_network/2-first-playbook/README.es.md +++ b/exercises/ansible_network/2-first-playbook/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 2 - Primer Playbook de Ansible -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/3-facts/README.es.md b/exercises/ansible_network/3-facts/README.es.md index 1aee9765f..5a8086d90 100644 --- a/exercises/ansible_network/3-facts/README.es.md +++ b/exercises/ansible_network/3-facts/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 3: Ansible Facts -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/4-resource-module/README.es.md b/exercises/ansible_network/4-resource-module/README.es.md index 47dbcef8b..47d040364 100644 --- a/exercises/ansible_network/4-resource-module/README.es.md +++ b/exercises/ansible_network/4-resource-module/README.es.md @@ -1,8 +1,8 @@ # Ejercicio 4: Módulos de recursos de red de Ansible -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). -If you are using an **all Cisco workbench** (all four routers are Cisco IOS routers) please [switch to these directions](../supplemental/4-resource-module-cisco/README.md). +If you are using an **all Cisco workbench** (all four routers are Cisco IOS routers) please [switch to these directions](../supplemental/4-resource-module-cisco/README.fr.md). ## Índice @@ -155,7 +155,7 @@ Como se puede observar en la salida anterior, no hay configuración VLAN fuera d * gathered * parsed - Sólo dos de estos valores se cubrirán en este ejercicio, pero se pueden ver más en los [ejercicios complementarios](../supplemental/README.md). + Sólo dos de estos valores se cubrirán en este ejercicio, pero se pueden ver más en los [ejercicios complementarios](../supplemental/README.fr.md). * `config:` configuración VLAN propuesta. Es una lista de diccionarios. Lo más importante a recordar es que si el módulo ha cambiado de `arista.eos.vlans` a `junipernetworks.junos.vlans` funcionará de manera idéntica. Esto permitirá a los ingenieros de red enfocarse en la red en sí (ej. configuración VLAN) en vez de en la sintáxis del fabricante y su implementación. ### Paso 4 - Ejecutar el Playbook de Ansible @@ -334,7 +334,7 @@ El playbook de Ansible completo se puede obtener aquí: ¡Felicidades, has completado el ejercicio de laboratorio 4! -Tal y como se explicó anteriormente, sólo dos de los parámetros de los módulos de recursos han sido cubiertos en este ejercicio, pero hay ejercicios adicionales en [ejercicios adicionales](../supplemental/README.md). +Tal y como se explicó anteriormente, sólo dos de los parámetros de los módulos de recursos han sido cubiertos en este ejercicio, pero hay ejercicios adicionales en [ejercicios adicionales](../supplemental/README.fr.md). En el siguiente ejercicio empezaremos a utilizar el controlador de automatización (Automation controller). diff --git a/exercises/ansible_network/5-explore-controller/README.es.md b/exercises/ansible_network/5-explore-controller/README.es.md index 04eca14f8..de08b8cf7 100644 --- a/exercises/ansible_network/5-explore-controller/README.es.md +++ b/exercises/ansible_network/5-explore-controller/README.es.md @@ -1,6 +1,6 @@ # Exercise 5: Explore Automation controller -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/6-controller-job-template/README.es.md b/exercises/ansible_network/6-controller-job-template/README.es.md index fe7cfcd70..6de58562a 100644 --- a/exercises/ansible_network/6-controller-job-template/README.es.md +++ b/exercises/ansible_network/6-controller-job-template/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 6: Crear plantillas de trabajo (Job Templates) en el controlador de Automatización -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/7-controller-survey/README.es.md b/exercises/ansible_network/7-controller-survey/README.es.md index d3fe2235c..277e863f2 100644 --- a/exercises/ansible_network/7-controller-survey/README.es.md +++ b/exercises/ansible_network/7-controller-survey/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 7: Crear una Encuesta (Survey) -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice @@ -212,6 +212,6 @@ Has probado existosamente lo siguiente: ¡Felicidades, has completado el ejercicio de laboratorio 7! --- -[Ejercicio Anterior](../6-controller-job-template/README.md) | [Próximo ejercicio](../8-controller-rbac/README.es.md) +[Ejercicio Anterior](../6-controller-job-template/README.fr.md) | [Próximo ejercicio](../8-controller-rbac/README.es.md) [Haz click aquí para volver al taller Ansible Network Automation](../README.es.md) diff --git a/exercises/ansible_network/8-controller-rbac/README.es.md b/exercises/ansible_network/8-controller-rbac/README.es.md index 38481a2bb..592ac8226 100644 --- a/exercises/ansible_network/8-controller-rbac/README.es.md +++ b/exercises/ansible_network/8-controller-rbac/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 8: Comprendiendo RBAC en el controlador de Automatización -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/9-controller-workflow/README.es.md b/exercises/ansible_network/9-controller-workflow/README.es.md index 5acf201b9..90033ff88 100644 --- a/exercises/ansible_network/9-controller-workflow/README.es.md +++ b/exercises/ansible_network/9-controller-workflow/README.es.md @@ -1,6 +1,6 @@ # Ejercicio 9: Crear un flujo de trabajo (Workflow) -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice diff --git a/exercises/ansible_network/README.es.md b/exercises/ansible_network/README.es.md index 903a497c6..4f9abc078 100644 --- a/exercises/ansible_network/README.es.md +++ b/exercises/ansible_network/README.es.md @@ -1,6 +1,6 @@ # Ansible Network Automation Workshop -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). **Esta es la documentación de Ansible Automation Platform 2** diff --git a/exercises/ansible_network/supplemental/README.es.md b/exercises/ansible_network/supplemental/README.es.md index 2d7af3671..be61f3bc2 100644 --- a/exercises/ansible_network/supplemental/README.es.md +++ b/exercises/ansible_network/supplemental/README.es.md @@ -1,4 +1,6 @@ -## Ejercicios Adicionales De Automatización de Red Ansible +# Ejercicios Adicionales De Automatización de Red Ansible + +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). Estos ejercicios adicionales están disponibles para los estudiantes que hayan completado el taller o estén buscando conocimientos adicionales. diff --git a/exercises/ansible_network/supplemental/jinja/README.es.md b/exercises/ansible_network/supplemental/jinja/README.es.md index 06c789803..808a8f20b 100644 --- a/exercises/ansible_network/supplemental/jinja/README.es.md +++ b/exercises/ansible_network/supplemental/jinja/README.es.md @@ -1,6 +1,6 @@ # Adicional - Configuración de Red con Plantillas Jinja -**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png), [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Leálo en otros idiomas**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Índice @@ -209,4 +209,4 @@ The provided Ansible Jinja2 template is provided here: [template.j2](template.j2 ¡Felicidades, has completado este ejercicio de laboratorio! --- -[Click here to return to the Ansible Network Automation Workshop](../../README.md) +[Click here to return to the Ansible Network Automation Workshop](../../README.fr.md) From 2ceb4638faede21bb95e7a11de00ac7b1721c9e6 Mon Sep 17 00:00:00 2001 From: jfbourque Date: Fri, 7 Feb 2025 17:42:30 -0500 Subject: [PATCH 3/5] Include french version in japanese version This is required in order to swtich between french and japanese versions --- exercises/ansible_network/1-explore/README.ja.md | 2 +- .../ansible_network/2-first-playbook/README.ja.md | 2 +- exercises/ansible_network/3-facts/README.ja.md | 2 +- .../ansible_network/4-resource-module/README.ja.md | 2 +- .../5-explore-controller/README.ja.md | 2 +- .../6-controller-job-template/README.ja.md | 2 +- .../ansible_network/7-controller-survey/README.ja.md | 2 +- .../ansible_network/8-controller-rbac/README.ja.md | 2 +- .../9-controller-workflow/README.ja.md | 2 +- exercises/ansible_network/README.ja.md | 2 +- .../4-resource-module-cisco/README.ja.md | 12 ++++++------ exercises/ansible_network/supplemental/README.ja.md | 4 +++- .../ansible_network/supplemental/jinja/README.ja.md | 4 ++-- .../supplemental/resource/README.ja.md | 2 +- 14 files changed, 22 insertions(+), 20 deletions(-) diff --git a/exercises/ansible_network/1-explore/README.ja.md b/exercises/ansible_network/1-explore/README.ja.md index 4b37fce66..139fdb7bc 100644 --- a/exercises/ansible_network/1-explore/README.ja.md +++ b/exercises/ansible_network/1-explore/README.ja.md @@ -1,6 +1,6 @@ # 演習 1 - ラボ環境の探索 -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/2-first-playbook/README.ja.md b/exercises/ansible_network/2-first-playbook/README.ja.md index 154f44769..6b66a8768 100644 --- a/exercises/ansible_network/2-first-playbook/README.ja.md +++ b/exercises/ansible_network/2-first-playbook/README.ja.md @@ -1,6 +1,6 @@ # 演習 2 - 初めての Ansible プレイブック -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/3-facts/README.ja.md b/exercises/ansible_network/3-facts/README.ja.md index e91d51339..38fe8353e 100644 --- a/exercises/ansible_network/3-facts/README.ja.md +++ b/exercises/ansible_network/3-facts/README.ja.md @@ -1,6 +1,6 @@ # 演習 3: Ansible ファクト -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/4-resource-module/README.ja.md b/exercises/ansible_network/4-resource-module/README.ja.md index 3dd9b741e..1b427d2a1 100644 --- a/exercises/ansible_network/4-resource-module/README.ja.md +++ b/exercises/ansible_network/4-resource-module/README.ja.md @@ -1,6 +1,6 @@ # 演習 4: Ansible ネットワークリソースモジュール -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). If you are using an **all Cisco workbench** (all four routers are Cisco IOS routers) please [switch to these diff --git a/exercises/ansible_network/5-explore-controller/README.ja.md b/exercises/ansible_network/5-explore-controller/README.ja.md index fe3c4d757..8e357520f 100644 --- a/exercises/ansible_network/5-explore-controller/README.ja.md +++ b/exercises/ansible_network/5-explore-controller/README.ja.md @@ -1,6 +1,6 @@ # 演習 5: 自動コントローラーの探索 -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/6-controller-job-template/README.ja.md b/exercises/ansible_network/6-controller-job-template/README.ja.md index f882882b7..36dbbf22a 100644 --- a/exercises/ansible_network/6-controller-job-template/README.ja.md +++ b/exercises/ansible_network/6-controller-job-template/README.ja.md @@ -1,6 +1,6 @@ # 演習 6: 自動コントローラージョブテンプレートの作成 -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/7-controller-survey/README.ja.md b/exercises/ansible_network/7-controller-survey/README.ja.md index c55520cdf..0d361d5d9 100644 --- a/exercises/ansible_network/7-controller-survey/README.ja.md +++ b/exercises/ansible_network/7-controller-survey/README.ja.md @@ -1,6 +1,6 @@ # 演習 7: Survey の作成 -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/8-controller-rbac/README.ja.md b/exercises/ansible_network/8-controller-rbac/README.ja.md index 35337a8a7..a4cdcd472 100644 --- a/exercises/ansible_network/8-controller-rbac/README.ja.md +++ b/exercises/ansible_network/8-controller-rbac/README.ja.md @@ -1,6 +1,6 @@ # 演習 8: 自動コントローラーの RBAC について -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md).. ## 目次 diff --git a/exercises/ansible_network/9-controller-workflow/README.ja.md b/exercises/ansible_network/9-controller-workflow/README.ja.md index db5f322f7..2047d90ec 100644 --- a/exercises/ansible_network/9-controller-workflow/README.ja.md +++ b/exercises/ansible_network/9-controller-workflow/README.ja.md @@ -1,6 +1,6 @@ # 演習 9: ワークフローの作成 -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 diff --git a/exercises/ansible_network/README.ja.md b/exercises/ansible_network/README.ja.md index 8e813fd2a..b9fe3b934 100644 --- a/exercises/ansible_network/README.ja.md +++ b/exercises/ansible_network/README.ja.md @@ -1,6 +1,6 @@ # Ansible Network Automation ワークショップ -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](../../images/es.png) [Español](README.es.md) +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](../../images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). **これは Ansible Automation Platform 2 のドキュメントです** diff --git a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md index a8f655980..1fe290c78 100644 --- a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md +++ b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md @@ -1,6 +1,6 @@ # Exercise 4: Ansible Network Resource Modules - Cisco Example -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md) +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents @@ -177,7 +177,7 @@ Cisco router. * gathered * parsed - Only two of these parameters will be covered in this exercise, but additional are available in the [supplemental exercises](../supplemental/README.md). + Only two of these parameters will be covered in this exercise, but additional are available in the [supplemental exercises](../supplemental/README.fr.md). * `config:` - this is the supplied VLAN configuration. It is a list of dictionaries. The most important takeaway is that if the module was change from `arista.eos.vlans` to `junipernetworks.junos.vlans` it would work identically. This allows network engineers to focus on the network (e.g. VLAN configuration) versus the vendor syntax and implementation. ### Step 4 - Execute the Ansible Playbook @@ -388,12 +388,12 @@ You have completed lab exercise 4 As stated previously only two of the resource modules parameters were covered in this exercise, but additional are available in the [supplemental -exercises](../supplemental/README.md). +exercises](../supplemental/README.fr.md). In the next exercise we will start using Automation controller. --- -[Previous Exercise](../3-facts/README.md) | [Next -Exercise](../5-explore-controller/README.md) +[Previous Exercise](../3-facts/README.fr.md) | [Next +Exercise](../5-explore-controller/README.fr.md) [Click here to return to the Ansible Network Automation -Workshop](../README.md) +Workshop](../README.fr.md) diff --git a/exercises/ansible_network/supplemental/README.ja.md b/exercises/ansible_network/supplemental/README.ja.md index 8b3490232..c8b4a4710 100644 --- a/exercises/ansible_network/supplemental/README.ja.md +++ b/exercises/ansible_network/supplemental/README.ja.md @@ -1,4 +1,6 @@ -## Ansible Network Automation に関する追加の演習 +# Ansible Network Automation に関する追加の演習 + +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). これらは、すでにワークショップを完了しているか、さらに知識を習得したい受講者向けの追加の演習です。 diff --git a/exercises/ansible_network/supplemental/jinja/README.ja.md b/exercises/ansible_network/supplemental/jinja/README.ja.md index f2b49c048..97eaaa0b2 100644 --- a/exercises/ansible_network/supplemental/jinja/README.ja.md +++ b/exercises/ansible_network/supplemental/jinja/README.ja.md @@ -1,6 +1,6 @@ # Supplemental - Network Configuration with Jinja Templates -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents @@ -257,4 +257,4 @@ You have completed this lab exercise --- [Click here to return to the Ansible Network Automation -Workshop](../../README.md) +Workshop](../../README.fr.md) diff --git a/exercises/ansible_network/supplemental/resource/README.ja.md b/exercises/ansible_network/supplemental/resource/README.ja.md index 63b2f714e..2ed0b4196 100644 --- a/exercises/ansible_network/supplemental/resource/README.ja.md +++ b/exercises/ansible_network/supplemental/resource/README.ja.md @@ -1,6 +1,6 @@ # 追加の演習: Ansible ネットワークリソースモジュール -**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## 目次 From b8eee34b97fa398f3308390492c070b5304c17fa Mon Sep 17 00:00:00 2001 From: jfbourque Date: Fri, 7 Feb 2025 17:45:30 -0500 Subject: [PATCH 4/5] Include all possible language version available These modifications allows to switch betwen the english verison and the other valid versions --- exercises/ansible_network/1-explore/README.md | 2 +- exercises/ansible_network/2-first-playbook/README.md | 2 +- exercises/ansible_network/3-facts/README.md | 2 +- exercises/ansible_network/4-resource-module/README.md | 2 +- exercises/ansible_network/5-explore-controller/README.md | 2 +- exercises/ansible_network/6-controller-job-template/README.md | 2 +- exercises/ansible_network/7-controller-survey/README.md | 2 +- exercises/ansible_network/8-controller-rbac/README.md | 2 +- exercises/ansible_network/9-controller-workflow/README.md | 2 +- exercises/ansible_network/README.md | 2 +- .../supplemental/4-resource-module-cisco/README.md | 4 ++-- exercises/ansible_network/supplemental/README.md | 4 +++- exercises/ansible_network/supplemental/jinja/README.md | 2 +- exercises/ansible_network/supplemental/resource/README.md | 2 +- 14 files changed, 17 insertions(+), 15 deletions(-) diff --git a/exercises/ansible_network/1-explore/README.md b/exercises/ansible_network/1-explore/README.md index 78d3e5a19..d968bd5f7 100644 --- a/exercises/ansible_network/1-explore/README.md +++ b/exercises/ansible_network/1-explore/README.md @@ -1,6 +1,6 @@ # Exercise 1 - Exploring the lab environment -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/2-first-playbook/README.md b/exercises/ansible_network/2-first-playbook/README.md index 4d6f8d0a6..d49652ccd 100644 --- a/exercises/ansible_network/2-first-playbook/README.md +++ b/exercises/ansible_network/2-first-playbook/README.md @@ -1,6 +1,6 @@ # Exercise 2 - First Ansible Playbook -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). Don't have a workshop environment? Try this exercise on our zero cost [sandbox environment](https://aap2.demoredhat.com/). This exercise corresponds to **Ansible Network Automation Basics - Lab 1**. diff --git a/exercises/ansible_network/3-facts/README.md b/exercises/ansible_network/3-facts/README.md index b7d81315a..5f64202e2 100644 --- a/exercises/ansible_network/3-facts/README.md +++ b/exercises/ansible_network/3-facts/README.md @@ -1,6 +1,6 @@ # Exercise 3: Ansible Facts -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/4-resource-module/README.md b/exercises/ansible_network/4-resource-module/README.md index a17d94248..8ee14c9ab 100644 --- a/exercises/ansible_network/4-resource-module/README.md +++ b/exercises/ansible_network/4-resource-module/README.md @@ -1,6 +1,6 @@ # Exercise 4: Ansible Network Resource Modules -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). If you are using an **all Cisco workbench** (all four routers are Cisco IOS routers) please [switch to these directions](../supplemental/4-resource-module-cisco/README.md). diff --git a/exercises/ansible_network/5-explore-controller/README.md b/exercises/ansible_network/5-explore-controller/README.md index 5d9242201..872c72cff 100644 --- a/exercises/ansible_network/5-explore-controller/README.md +++ b/exercises/ansible_network/5-explore-controller/README.md @@ -1,6 +1,6 @@ # Exercise 5: Explore Ansible Automation Platform -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/6-controller-job-template/README.md b/exercises/ansible_network/6-controller-job-template/README.md index bbc861e9f..f34bd53f1 100644 --- a/exercises/ansible_network/6-controller-job-template/README.md +++ b/exercises/ansible_network/6-controller-job-template/README.md @@ -1,6 +1,6 @@ # Exercise 6: Creating an Ansible Automation Platform Job Template -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/7-controller-survey/README.md b/exercises/ansible_network/7-controller-survey/README.md index 6027c266e..551459f4e 100644 --- a/exercises/ansible_network/7-controller-survey/README.md +++ b/exercises/ansible_network/7-controller-survey/README.md @@ -1,6 +1,6 @@ # Exercise 7: Creating a Survey -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/8-controller-rbac/README.md b/exercises/ansible_network/8-controller-rbac/README.md index 50cd3cf7a..5f42a41bb 100644 --- a/exercises/ansible_network/8-controller-rbac/README.md +++ b/exercises/ansible_network/8-controller-rbac/README.md @@ -1,6 +1,6 @@ # Exercise 8: Understanding RBAC in Automation controller -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/9-controller-workflow/README.md b/exercises/ansible_network/9-controller-workflow/README.md index 4562b8f7d..6afd50fc5 100644 --- a/exercises/ansible_network/9-controller-workflow/README.md +++ b/exercises/ansible_network/9-controller-workflow/README.md @@ -1,6 +1,6 @@ # Exercise 9: Creating a Workflow -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/README.md b/exercises/ansible_network/README.md index 727c29ae3..2e7716ba2 100644 --- a/exercises/ansible_network/README.md +++ b/exercises/ansible_network/README.md @@ -1,6 +1,6 @@ # Ansible Network Automation Workshop -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](../../images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). **This is documentation for Ansible Automation Platform 2** diff --git a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.md b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.md index ae851b670..4ecd12e08 100644 --- a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.md +++ b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.md @@ -1,6 +1,6 @@ # Exercise 4: Ansible Network Resource Modules - Cisco Example -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md) +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents @@ -156,7 +156,7 @@ As you can see in the output above there is no SNMP configuration on the Cisco r * gathered * parsed - Only two of these parameters will be covered in this exercise, but additional are available in the [supplemental exercises](../supplemental/README.md). + Only two of these parameters will be covered in this exercise, but additional are available in the [supplemental exercises](../supplemental/README.fr.md). * `config:` - this is the supplied SNMP configuration. It is a list of dictionaries. The most important takeaway is that if the module was change from `cisco.ios.snmp_server` to `junipernetworks.junos.snmp_server` it would work identically. This allows network engineers to focus on the network (e.g. SNMP configuration) versus the vendor syntax and implementation. ### Step 4 - Execute the Ansible Playbook diff --git a/exercises/ansible_network/supplemental/README.md b/exercises/ansible_network/supplemental/README.md index 7736d0331..5ef94634b 100644 --- a/exercises/ansible_network/supplemental/README.md +++ b/exercises/ansible_network/supplemental/README.md @@ -1,4 +1,6 @@ -## Additional Ansible Network Automation Exercises +# Additional Ansible Network Automation Exercises + +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). These are additional exercises available for students that have already completed the workshop or are seeking additional knowledge. diff --git a/exercises/ansible_network/supplemental/jinja/README.md b/exercises/ansible_network/supplemental/jinja/README.md index c6037851c..ffa4d1c88 100644 --- a/exercises/ansible_network/supplemental/jinja/README.md +++ b/exercises/ansible_network/supplemental/jinja/README.md @@ -1,6 +1,6 @@ # Supplemental - Network Configuration with Jinja Templates -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), [日本語](README.ja.md),![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Español](https://github.com/ansible/workshops/raw/devel/images/es.png) [Español](README.es.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents diff --git a/exercises/ansible_network/supplemental/resource/README.md b/exercises/ansible_network/supplemental/resource/README.md index c3d0d21a2..87ee8b294 100644 --- a/exercises/ansible_network/supplemental/resource/README.md +++ b/exercises/ansible_network/supplemental/resource/README.md @@ -1,6 +1,6 @@ # Supplemental Exercise: Ansible Network Resource Modules -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md), ![Français](https://github.com/ansible/workshops/raw/devel/images/fr.png) [Français](README.fr.md). ## Table of Contents From f344b8ad7053fae2a64a006dfb37c9b90e3d10f2 Mon Sep 17 00:00:00 2001 From: jfbourque Date: Mon, 10 Feb 2025 08:00:17 -0500 Subject: [PATCH 5/5] Linking french version with french README files --- exercises/ansible_network/README.fr.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/exercises/ansible_network/README.fr.md b/exercises/ansible_network/README.fr.md index 61d7d98eb..29a254f04 100644 --- a/exercises/ansible_network/README.fr.md +++ b/exercises/ansible_network/README.fr.md @@ -14,17 +14,17 @@ Vous voulez les diapositives de présentation ? Les voici : ## Exercices d'Automatisation de Réseau avec Ansible -* [Exercice 1 - Exploration de l'environnement de laboratoire](./1-explore/) -* [Exercice 2 - Exécutez votre premier playbook d'automatisation de réseau](./2-first-playbook/) -* [Exercice 3 - Utilisation des informations Ansible sur les appareils réseau](./3-facts/) -* [Exercice 4 - Modules de Ressources Réseau Ansible](./4-resource-module/) -* [Exercice 5 - Exploration de l'environnement du contrôleur d'automatisation](./5-explore-controller/) -* [Exercice 6 - Création d'un modèle de travail pour le contrôleur d'automatisation](./6-controller-job-template/) -* [Exercice 7 - Création d'une enquête avec le contrôleur d'automatisation](./7-controller-survey/) -* [Exercice 8 - Utilisation de la fonctionnalité de contrôle d'accès basé sur les rôles (RBAC)](./8-controller-rbac/) -* [Exercice 9 - Création d'un flux de travail avec le contrôleur d'automatisation](./9-controller-workflow/) - -Des exercices supplémentaires sont [disponibles ici](supplemental/). +* [Exercice 1 - Exploration de l'environnement de laboratoire](./1-explore/README.fr.md) +* [Exercice 2 - Exécutez votre premier playbook d'automatisation de réseau](./2-first-playbook/README.fr.md) +* [Exercice 3 - Utilisation des informations Ansible sur les appareils réseau](./3-facts/README.fr.md) +* [Exercice 4 - Modules de Ressources Réseau Ansible](./4-resource-module/README.fr.md) +* [Exercice 5 - Exploration de l'environnement du contrôleur d'automatisation](./5-explore-controller/README.fr.md) +* [Exercice 6 - Création d'un modèle de travail pour le contrôleur d'automatisation](./6-controller-job-template/README.fr.md) +* [Exercice 7 - Création d'une enquête avec le contrôleur d'automatisation](./7-controller-survey/README.fr.md) +* [Exercice 8 - Utilisation de la fonctionnalité de contrôle d'accès basé sur les rôles (RBAC)](./8-controller-rbac/README.fr.md) +* [Exercice 9 - Création d'un flux de travail avec le contrôleur d'automatisation](./9-controller-workflow/README.fr.md) + +Des exercices supplémentaires sont [disponibles ici](supplemental/README.fr.md). ## Diagramme de Réseau