Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Techniques Boucles Ansible Explicitées
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
DevOps

Techniques Boucles Ansible Explicitées

L'Équipe Alphorm Par L'Équipe Alphorm 16 novembre 2024
Partager
Partager

Les tâches répétitives dans la gestion de systèmes peuvent être fastidieuses et sujettes à des erreurs.

L’absence d’automatisation peut conduire à des inefficacités et à une gestion suboptimale des ressources.

Cet article explore comment les boucles en Ansible peuvent automatiser ces tâches, améliorant ainsi l’efficacité et la précision.

Table de matière
Boucles Ansible : IntroductionBoucles Ansible : UtilisationLoop vs With_Items en AnsibleFAQConclusion

Formation Ansible : Le Guide Complet du Débutant

Devenez un expert d'Ansible et simplifiez vos tâches d'administration.

Découvrir cette formation

Boucles Ansible : Introduction

Les boucles en Ansible permettent de répéter une tâche sous condition plusieurs fois avec différentes valeurs. Voici un visuel résumant le fonctionnement d’une boucle

Diagramme de boucle conditionnelle Ansible.

En Ansible, il existe plusieurs methode de generer une boucle, Voici quelques-unes des boucles les plus couramment utilisées en Ansible :

Boucles de base avec loop :

La méthode la plus courante pour créer des boucles en Ansible est d’utiliser le mot clé loop. Voici un exemple :

				
					
 - name: Installer plusieurs paquets
apt:
name: "{{ item }}"
state: present
loop:
- git
- curl
- vim

				
			

Dans cet exemple, la tâche apt sera exécutée trois fois, une fois pour chaque élément de la liste.

Boucles avec « with_items » :

Une méthode plus ancienne mais toujours utilisée est with_items , voici un exemple :

				
					
 - name: Créer plusieurs utilisateurs
user:
name: "{{ item }}"
state: present
with_items:
- alice
- bob
- charlie

				
			

Ce playbook permet d’exécuter la tache trois fois pour créer les utilisateurs dans la liste.

Boucles avec des dictionnaires :

Nous pouvons également utiliser des boucles avec des dictionnaires pour passer plusieurs paramètres :

				
					
 - name: Ajouter plusieurs utilisateurs avec des détails
user:
name: "{{ item.name }}"
state: present
uid: "{{ item.uid }}"
group: "{{ item.group }}"
loop:
- { name: 'alice', uid: 1001, group: 'admins' }
- { name: 'bob', uid: 1002, group: 'users' }
- { name: 'charlie', uid: 1003, group: 'guests' }

				
			

Cette boucle est similaire à la boucle with_items , mais il y a plusieurs paramètres correspondant aux valeurs des clés du dictionnaire

Boucles avec des séquences de nombres :

Pour générer une séquence de nombres, nous pouvons utiliser la fonction range :

				
					
 - name: Créer plusieurs fichiers
file:
path: "/tmp/file{{ item }}"
state: touch
loop: "{{ range(1, 6) }}"

				
			

La fonction range permet de créer un fichier allant de 1 jusqu’à 6

L’ajout de contrôle aux boucles en Ansible permet de définir des conditions spécifiques pour chaque itération de la boucle, de gérer les erreurs, et de contrôler le flux d’exécution. Un exemple :

				
					
 - name: Installer des paquets uniquement s'ils ne sont pas déjà installés
apt:
name: "{{ item }}"
state: present
loop:
- git
- curl
- vim
when: item not in ansible_facts.packages

				
			

Le contrôle consiste à vérifier si le paquet à installer n’est pas déjà présent sur notre machine. Nous pouvons intégrer ce contrôle dans tous les types de boucles en utilisant des conditions spécifiques.

Boucles Ansible : Utilisation

Dans cet exercice, nous allons utiliser des boucles pour exécuter des tâches. La première tâche consiste à afficher une liste de nombres dans une variable. La deuxième tâche consiste à afficher un message d’erreur lorsque le code de retour d’un résultat est différent de 0. Essayons de résoudre l’exercice par nous-mêmes. Sinon, voyons le playbook pour ces tâches maintenant :

– hosts: servers

tasks:

– name: Register loop output as a variable

shell:

cmd: « echo{{item}} »

loop:

– « un »

– « deux »

register: numbers

– name: Fail if return code is not 0

ansible.builtin.fail

msg: « This command({{item.cmd}}) did not have a 0 return code »

when : item.rc !=0

loop: « {{numbers.results}} »

Première tâche : Enregistrer la sortie de la boucle comme une variable :

name : Donne un nom à la tâche, ce qui la rend plus facile à identifier dans la sortie du playbook.

shell : Utilise le module shell pour exécuter une commande shell.

cmd : Spécifie la commande à exécuter, ici echo {{item}} où {{item}} sera remplacé par chaque élément de la boucle.

loop : Définit une boucle sur la liste d’éléments [« un », « deux »].

register : Enregistre la sortie de la tâche sous la variable numbers. Cette variable contiendra les résultats de chaque itération de la boucle.

Deuxième tâche : Échec si le code de retour n’est pas 0 :

name : Donne un nom à la tâche pour identification.

ansible.builtin.fail: Utilise le module fail pour arrêter l’exécution du playbook avec un message d’erreur si une condition spécifiée est remplie.

msg : Le message d’erreur affiché lorsque la tâche échoue. {{item.cmd}} se réfère à la commande exécutée lors de la première tâche.

when : Spécifie une condition pour exécuter cette tâche. Ici, la tâche ne s’exécute que si item.rc (le code de retour de la commande) n’est pas égal à 0.

loop : Itère sur les résultats enregistrés dans numbers.results.

Copions ce playbook dans un fichier exo_boucle.yml pour pouvoir l’executer

Code YAML démontrant une boucle Ansible

Exécutons ce playbook maintenant pour exécuter aussi les taches dedans avec la commande :ansible-playbook -v exo_boucle.yml –become

Sortie terminal Ansible avec boucles

Ça semble parfait, le résultat nous affiche la liste des valeurs « un » et « deux » pour la première tâche, et il exécute également la deuxième tâche car la valeur retournée est différente de 0. Parfait, tout fonctionne bien maintenant dans ce playbook.

Loop vs With_Items en Ansible

En Ansible, loop et with_* sont deux méthodes différentes pour itérer à travers des éléments, comme des listes, des dictionnaires, des fichiers, etc. Voici une comparaison entre loop et with_* avec des exemples pour mieux comprendre leur utilisation.

Utilisation de loop :

				
					
 - name: Copier tous les fichiers .txt
copy:
src: "{{ item }}"
dest: /tmp/
loop: "{{ lookup('fileglob', '*.txt', wantlist=True) }}"

				
			

lookup(‘fileglob’, ‘*.txt’, wantlist=True): Cette expression récupère tous les fichiers . txt dans le répertoire courant et retourne une liste.

loop: « {{ … }} »: Utilise cette liste comme source d’itération pour la tâche copy.

Avantages de loop :

  • Direct et simple à utiliser pour itérer sur des listes générées dynamiquement.
  • Permet de manipuler directement chaque élément de la liste dans la tâche.

Utilisation de with_fileglob :

				
					
 - name: Copier tous les fichiers .txt
copy:
src: "{{ item }}"
dest: /tmp/
with_fileglob: '*.txt'

				
			

with_fileglob: ‘*.txt’: Spécifie directement le modèle de recherche pour récupérer tous les fichiers .txt dans le répertoire courant.

Avantages de with_fileglob :

  • Plus concis lorsque vous avez juste besoin de spécifier un modèle de fichier à traiter.
  • Moins de syntaxe nécessaire par rapport à lookup avec loop.

Passons maintenant au cas pratique pour mieux comprendre la boucle en Ansible.Premièrement, nous allons utiliser loop avec cet playbook :

				
					
 - hosts: servers
tasks:
- name: Restart services
service:
name: "{{item.name}}"
state: "{{item.status}}"
loop:
- name: apache2
status: Restarted
- name: ssh
status : started

				
			

Donc, il faut créer le fichier loop-playbook.yml sur le nœud de contrôle et y copier ce contenu.

Playbook Ansible utilisant des boucles

Voilà, exécutons ce playbook avec la commande : ansible-playbook -v loop-playbook.yml

Capture d'écran d'un playbook Ansible exécuté

Le résultat montre clairement que les tâches sont exécutées une après l’autre dans l’ordre défini dans la liste de bouclage (loop).

Prenons une autre boucle qui est le dictionnaire. On fait la même chose dans le fichier dictionnaire-playbook.yml avec le contenu suivant :

				
					
 - hosts: servers
tasks:
- name: Restart services
service:
name: "{{item.name}}"
state: Restarted
loop:
- {name: 'apache2'}
- {name: 'uuidd'}

				
			

Exécutons ce playbook avec la commande habituelle ansible-playbook -v dictionnaire-playbook.yml –become , et observons le résultat attendu affiché comme ceci

Exemple de boucle dans Ansible Playbook

Voilà, les deux tâches sont exécutées dans l’ordre défini par la boucle.

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

FAQ

Comment utiliser les boucles de base en Ansible ?
Les boucles de base en Ansible se font principalement avec le mot-clé loop. Par exemple, pour installer plusieurs paquets, vous pouvez utiliser une structure de tâche avec loop, où chaque élément de la liste est traité individuellement. Cette technique est directe et permet de répéter des actions pour des valeurs différentes efficacement.
Quelle est la différence entre loop et with_items en Ansible ?
La différence entre loop et with_items réside dans leur syntaxe et leur utilisation. Loop est plus moderne et flexible, tandis que with_items est une méthode plus ancienne. Loop est préféré pour sa capacité à manipuler des listes générées dynamiquement, alors que with_items est souvent utilisé pour des itérations plus statiques.
Comment intégrer du contrôle dans les boucles Ansible ?
Le contrôle dans les boucles Ansible s’intègre via des conditions spécifiques. Par exemple, vous pouvez utiliser la clause when pour exécuter une tâche uniquement si une condition est remplie, comme vérifier si un paquet est déjà installé avant de tenter de l’installer à nouveau. Cela optimise le flux d’exécution et prévient les erreurs.
Comment utiliser les boucles avec des dictionnaires en Ansible ?
Pour utiliser des boucles avec des dictionnaires en Ansible, vous pouvez passer plusieurs paramètres pour chaque itération. Cela est utile pour des tâches complexes nécessitant plusieurs valeurs par itération, comme la création d’utilisateurs avec des attributs spécifiques. Cela se fait en définissant chaque élément de la boucle comme un dictionnaire.
Comment fonctionne la fonction range dans les boucles Ansible ?
La fonction range est utilisée dans les boucles Ansible pour générer une séquence de nombres. Par exemple, pour créer plusieurs fichiers numérotés, vous pouvez utiliser range pour itérer sur une série de nombres, ce qui est pratique pour automatiser des tâches répétitives avec des séquences numériques.

Conclusion

En utilisant les boucles en Ansible, vous pouvez automatiser efficacement des tâches complexes et répétitives. Quelle technique de boucle trouvez-vous la plus utile dans vos projets Ansible?

ÉTIQUETÉ : Ansible
Facebook
Twitter
LinkedIn
Email
WhatsApp
Par L'Équipe Alphorm
Démocratiser la Connaissance Informatique pour Tous !
Suivre :
L'Équipe Alphorm, c'est la démocratisation de la connaissance informatique. Passionnés et dévoués, nous sommes là pour vous guider vers le succès en rendant la technologie accessible à tous. Rejoignez notre aventure d'apprentissage et de partage. Avec nous, le savoir IT devient une ressource inspirante et ouverte à tous dans un monde numérique en constante évolution.

Derniers Articles

  • Techniques pour gérer les fichiers texte en C#
  • Créer et lire un fichier CSV avec C#
  • JSON : Comprendre et Utiliser Efficacement
  • Créer une Base SQLite dans C#
  • Lecture des données SQLite simplifiée
Laisser un commentaire Laisser un commentaire

Laisser un commentaire Annuler la réponse

Vous devez vous connecter pour publier un commentaire.

Blog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Techniques Boucles Ansible Explicitées

© Alphorm - Tous droits réservés