Variables et boucles
Notions théoriques
Dans Ansible, les variables et les boucles sont des outils puissants qui permettent d'ajouter de la flexibilité et de la réutilisabilité à vos Playbooks.
Les variables dans Ansible
Les variables sont des valeurs nommées qui peuvent être utilisées dans votre Playbook.
Les variables peuvent être :
- définies dans l'inventaire,
- passées en ligne de commande,
- incluses dans des fichiers séparés
- ou déterminées à la volée avec des informations découvertes pendant l'exécution.
Les boucles dans Ansible
Les boucles permettent d'exécuter une tâche plusieurs fois.
Les boucles permettent par exemple d'installer plusieurs paquets ou créer plusieurs utilisateurs.
Ansible utilise la directive loop
pour réaliser des boucles.
Exemple pratique
Imaginons que nous voulons créer plusieurs utilisateurs sur nos conteneurs.
Nous pouvons utiliser une boucle dans notre Playbook pour le faire :
---
- name: Ajout d'utilisateurs
hosts: conteneurs
become: yes
vars:
users:
- alice
- bob
- carol
tasks:
- name: Creation des utilisateurs
user:
name: "{{ item }}"
state: present
loop: "{{ users }}"
- Dans cet exemple, nous avons défini une variable
users
qui est une liste de noms d'utilisateurs. - La tâche
Création des utilisateurs
utilise cette liste pour créer chaque utilisateur sur les hôtes cibles.
Le paramètre state: present
indique que la ressource spécifiée (ici, des utilisateurs) doit exister sur le système cible.
Lorsqu'on utilise le module user
avec state: present
, Ansible va s'assurer que les utilisateurs listés existent sur les machines cibles.
Si l'utilisateur n'existe pas déjà, Ansible va le créer.
Donc, pour chaque élément de la liste users
(qui contient "alice", "bob" et "carol"),
le playbook va exécuter la tâche "Creation des utilisateurs"
et s'assurer que ces comptes utilisateurs sont présents sur les hôtes ciblés par le groupe conteneurs
.
- Si un utilisateur spécifié est déjà présent sur le système, Ansible ne fera rien pour cet utilisateur.
- Si l'utilisateur n'est pas présent, Ansible le créera.
Test de mémorisation/compréhension
TP - Déployer des configurations Ansible
Votre mission consiste à personnaliser la page d'accueil d'Apache sur chacun de vos conteneurs.
Pour cela, vous allez utiliser un Playbook Ansible qui créera un fichier
index.html
personnalisé pour chaque conteneur.
-
Créez un fichier nommé
personalise_apache.yml
dans le répertoire/root/ansible
. -
Ouvrez ce fichier avec un éditeur de texte de votre choix.
-
Rédigez le Playbook nécessaire pour créer un fichier
index.html
dans le répertoire/var/www/html
avec le contenu de la page =contenu de la page d'accueil
:
---
- name: Personnalisation de la page d'accueil Apache
hosts: conteneurs
become: yes
tasks:
copy:
content: "contenu de la page d'accueil"
dest: /var/www/html/index.html
- Dans votre Playbook, créez la variable
contenu_page
:
---
- name: Personnalisation de la page d'accueil Apache
hosts: conteneurs
become: yes
vars:
contenu_page: "Bienvenue sur le serveur {{ ansible_hostname }}"
tasks:
- name: Creation de la page d'accueil personnalisee
copy:
content: "contenu de la page d'accueil"
dest: /var/www/html/index.html
Nous utilisons la variable ansible_hostname
, qui contient le nom de la machine hôte, pour identifier chaque conteneur.
- Modifier votre Playbook pour copier le contenu de la variable
contenu_page
dans le fichier/var/www/html/index.html
(à la place de "contenu de la page d'accueil") :
---
- name: Personnalisation de la page d'accueil Apache
hosts: conteneurs
become: yes
vars:
contenu_page: "Bienvenue sur le serveur {{ ansible_hostname }}"
tasks:
- name: Creation de la page d'accueil personnalisee
copy:
content: "{{ contenu_page }}"
dest: /var/www/html/index.html
-
Exécutez le Playbook sur vos conteneurs cibles.
-
Vérifiez que la page d'accueil est personnalisée en accédant à l'adresse IP de chacun de vos conteneurs via un navigateur Web ou la commande
curl
. -
Accédez à vos 3 serveurs Web via votre navigateur :
http://localhost:8081
http://localhost:8082
http://localhost:8083
Vous devriez voir le message personnalisé "Bienvenue sur le serveur ..." avec le nom de l'hôte correspondant.
Une solution
Vous devez être connecté pour voir le contenu.