Gérer des tâches sur plusieurs serveurs avec précision peut être un défi.
Sans une bonne méthode, cela peut entraîner des erreurs et des inefficacités.
La délégation Ansible permet une exécution précise et coordonnée des tâches sur différents hôtes.
Devenez un expert d'Ansible et simplifiez vos tâches d'administration.
Délégation Ansible : Concepts Clés
Principe de la Délégation Ansible
En Ansible, la délégation fait référence à la capacité d’exécuter des tâches sur un hôte différent de celui ciblé par défaut par une tâche. Cela permet d’effectuer des actions spécifiques sur des machines particulières sans changer le contexte global du playbook.
Exécution Locale vs Distante
La délégation en Ansible est une fonctionnalité puissante permettant de diriger l’exécution d’une tâche vers un autre hôte que celui initialement ciblé par le playbook. Cela offre une flexibilité et une précision accrues dans la gestion des environnements complexes
Déléguer Tâches à un Remote Host
La délégation permet d’exécuter une action sur une machine locale ou distante, en fonction des besoins spécifiques de la tâche.
- Délégation locale :Parfois, il est nécessaire d’exécuter une tâche sur le contrôleur Ansible lui-même (la machine d’où Ansible est exécuté). Cela est utile pour les opérations qui nécessitent des ressources locales ou des permissions spéciales sur le contrôleur.
Voici un exemple :
tasks:
- name: Exécuter une commande localement
command: echo "Cette commande s'exécute localement"
delegate_to: localhost
Le terme » localhost » ou parfois l’adresse IP » 127.0.0.1 » signifie que l’exécution de cette tâche se fera en local.
- Délégation distante :D’autres fois, une tâche doit être exécutée sur un hôte spécifique différent de celui initialement prévu. Cela peut être dû à des configurations particulières ou des permissions présentes sur cet autre hôte.
Un exemple :
tasks:
- name: Exécuter une commande sur un hôte distant
command: echo "Cette commande s'exécute sur un hôte distant"
delegate_to: remote_host
Gestion Précise des Environnements Ansible
La délégation permet également de déplacer l’exécution d’une tâche vers une autre machine, facilitant ainsi la gestion de tâches nécessitant des ressources spécifiques ou des accès particuliers.
Un exemple :
tasks:
- name: Copier un fichier sur une machine distante
copy:
src: /local/path/to/file
dest: /remote/path/to/file
delegate_to: remote_host
Dans cet exemple, le fichier est copié sur une machine distante spécifiée par remote_host , bien que la tâche puisse être initialement prévue pour s’exécuter sur l’hôte cible.
Cas Pratique : Délégation Ansible
La délégation permet une gestion précise des environnements où les tâches doivent être exécutées de manière ordonnée et sur des machines spécifiques. Cela est particulièrement utile dans les environnements interdépendants où des actions sur une machine peuvent dépendre de l’état d’une autre machine.
- Déploiement coordonné :Lors du déploiement d’applications distribuées, certaines tâches doivent être exécutées sur des serveurs d’application tandis que d’autres doivent être exécutées sur des bases de données. La délégation permet de coordonner ces actions de manière précise.
Un exemple :
tasks:
- name: Mettre à jour le serveur de base de données
command: /usr/bin/update_db
delegate_to: database_server
- name: Déployer l'application
command: /usr/bin/deploy_app
delegate_to: application_server
Grâce à la délégation, nous pouvons configurer la première tâche pour qu’elle s’exécute sur la base de données et la deuxième sur le serveur d’application. Cela s’appelle la délégation coordonnée.
- Exécution conditionnelle :La délégation peut être utilisée en combinaison avec des conditions pour exécuter des tâches uniquement lorsque certaines conditions sont remplies sur des hôtes spécifiques.
tasks:
- name: Vérifier l'état du service
command: systemctl status my_service
register: service_status
delegate_to: remote_host
- name: Redémarrer le service si nécessaire
command: systemctl restart my_service
when: service_status.rc != 0
delegate_to: remote_host
Voilà, nous avons utilisé une condition basée sur une variable enregistrée (appelée délégation facts), puis délégué les tâches en fonction des besoins spécifiques.
Démonstration cas pratique
Pour la première s demonstration, nous allons exécuter le playbook suivant dans notre machine de contrôle.
- hosts: all
tasks:
- name: display apache version
command: /usr/sbin/apache2 -v
delegate_to: 127.0.0.1
- name: install apache
yum:
name: apache2
state: latest
Dans ce playbook, nous avons deux tâches. La première tâche consiste à vérifier la version d’Apache2, et elle est forcée à s’exécuter en local (sur la machine de contrôle) grâce au mot-clé delegate_to: 127.0.0.1, qui est l’adresse IP de la machine locale. La deuxième tâche consiste à installer la dernière version d’Apache2 sur la machine gérée.
Pour exécuter ce playbook, créez le fichier delegation-playbook.yml sur la machine de contrôle, copiez-y ce playbook, puis exécutez-le :
Après avoir exécuté le playbook avec la commande habituelle : ansible-playbook -v delegation-playbook.yml –become nous avons le résultat attendu :
Pour la deuxième démonstration, nous utiliserons le même playbook, mais remplacerons simplement delegate_to par local_action : Voyons le changement du playbook dans le fichier local-action-playbook.yml
- hosts: all
tasks:
- name: Afficher la version d'Apache localement
local_action:
module: command
cmd: /usr/sbin/apache2 -v
- name: Installer Apache
apt:
name: apache2
state: latest
Après avoir l’exécuté, voilà le résultat :
Parfait, nous obtenons les résultats attendus notamment la version d’apache en local et l’installation de la dernière version d’apache2 dans le nœud géré.
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.
FAQ
Comment fonctionne la délégation en Ansible ?
Quand utiliser la délégation locale en Ansible ?
Qu'est-ce que la délégation distante en Ansible ?
Comment coordonner des tâches dans des environnements interdépendants avec Ansible ?
Comment utiliser la délégation avec des conditions en Ansible ?
Conclusion
La délégation en Ansible est une fonctionnalité puissante pour gérer efficacement des environnements complexes. Comment envisagez-vous d’intégrer la délégation dans vos futurs projets Ansible ?