Introduction
Ansible est un puissant outil d'automatisation informatique qui simplifie la gestion des systèmes distants. Dans ce tutoriel, nous explorerons le module de commande Ansible, qui vous permet d'exécuter des commandes sur des hôtes cibles. Vous apprendrez les bases de l'exécution de commandes, ainsi que des techniques avancées pour améliorer vos flux de travail Ansible.
Comprendre le module de commande Ansible
Ansible est un puissant outil d'automatisation open-source qui vous permet de gérer et de configurer votre infrastructure sur plusieurs hôtes. Le module de commande Ansible est l'un des modules principaux d'Ansible qui vous permet d'exécuter des commandes arbitraires sur des hôtes distants.
Le module de commande Ansible offre un moyen simple et direct d'exécuter des commandes sur des hôtes cibles. Il vous permet d'exécuter des commandes shell, des scripts ou tout autre fichier exécutable sur le système distant. Ce module est particulièrement utile lorsque vous devez effectuer des tâches ponctuelles, résoudre des problèmes ou exécuter des commandes personnalisées sur votre infrastructure.
Pour utiliser le module de commande Ansible, vous devez définir le paramètre command dans votre playbook Ansible ou votre commande ad-hoc. Le paramètre command spécifie la commande que vous souhaitez exécuter sur l'hôte distant. Par exemple :
- name: Exécuter une commande sur un hôte distant
command: uptime
register: uptime_result
become: yes
Dans cet exemple, le paramètre command est défini sur uptime, ce qui exécutera la commande uptime sur l'hôte distant. Le paramètre register est utilisé pour capturer la sortie de la commande, et le paramètre become est défini sur yes pour exécuter la commande avec des privilèges élevés (le cas échéant).
Le module de commande Ansible prend également en charge diverses options, telles que :
creates: Spécifie un fichier qui doit exister avant l'exécution de la commande.removes: Spécifie un fichier qui ne doit pas exister avant l'exécution de la commande.chdir: Change le répertoire de travail actuel vers le chemin spécifié avant d'exécuter la commande.stdin: Transmet la chaîne spécifiée à la commande via l'entrée standard.warn: Contrôle l'affichage d'un avertissement si la commande pourrait potentiellement modifier un fichier important.
En comprenant le module de commande Ansible, vous pouvez exécuter efficacement des commandes sur vos hôtes distants, automatiser les tâches répétitives et rationaliser vos processus de gestion d'infrastructure.
Exécution de commandes sur des hôtes distants
Exécution de commandes de base
Pour exécuter une commande sur un hôte distant à l'aide du module de commande Ansible, vous pouvez utiliser la syntaxe de base suivante :
- name: Exécuter une commande sur un hôte distant
command: <commande>
register: <variable_résultat>
become: oui
Dans cet exemple, <commande> est la commande que vous souhaitez exécuter sur l'hôte distant, et <variable_résultat> est la variable qui stockera la sortie de la commande. Le paramètre become est défini sur oui pour exécuter la commande avec des privilèges élevés (le cas échéant).
Par exemple, pour vérifier le temps de fonctionnement d'un hôte distant :
- name: Vérifier le temps de fonctionnement de l'hôte distant
command: uptime
register: uptime_result
become: oui
La sortie de la commande uptime sera stockée dans la variable uptime_result, que vous pourrez ensuite utiliser dans votre playbook ou commande ad-hoc.
Gestion des erreurs de commande
Par défaut, le module de commande Ansible échoue si la commande exécutée retourne un code de sortie différent de zéro. Vous pouvez gérer les erreurs de commande en utilisant le paramètre ignore_errors :
- name: Exécuter une commande sur un hôte distant
command: <commande>
register: <variable_résultat>
ignore_errors: oui
Cela permettra au playbook de continuer son exécution même si la commande échoue.
Capture de la sortie de la commande
Vous pouvez capturer la sortie d'une commande en utilisant le paramètre register, comme illustré dans les exemples précédents. La sortie sera stockée dans la variable spécifiée, que vous pourrez ensuite utiliser dans votre playbook ou commande ad-hoc.
Par exemple, pour capturer la sortie de la commande uptime et l'afficher :
- name: Vérifier le temps de fonctionnement de l'hôte distant
command: uptime
register: uptime_result
become: oui
- name: Afficher le temps de fonctionnement
debug:
msg: "{{ uptime_result.stdout }}"
Cela affichera la sortie de la commande uptime sur la console.
En comprenant les bases de l'exécution de commandes sur des hôtes distants avec le module de commande Ansible, vous pouvez automatiser efficacement un large éventail de tâches dans votre infrastructure.
Techniques avancées d'exécution de commandes
Exécution conditionnelle de commandes
Parfois, vous souhaiterez exécuter une commande uniquement si une certaine condition est remplie. Vous pouvez utiliser la clause when pour exécuter conditionnellement des commandes dans votre playbook Ansible :
- name: Exécuter la commande si la condition est remplie
command: <commande>
when: <condition>
register: <variable_résultat>
become: oui
Dans cet exemple, la <commande> ne sera exécutée que si la <condition> est vraie.
Par exemple, pour exécuter la commande free uniquement si le système dispose de moins de 20 % de mémoire disponible :
- name: Vérifier la mémoire disponible
command: free -m
register: memory_result
become: oui
- name: Exécuter la commande si la mémoire disponible est inférieure à 20 %
command: <commande_à_exécuter>
when: (memory_result.stdout_lines[1].split()[3]|int / memory_result.stdout_lines[1].split()[1]|int * 100) < 20
register: <variable_résultat>
become: oui
Bouclage sur les commandes
Vous pouvez également utiliser des boucles pour exécuter plusieurs commandes dans une seule tâche. Le module de commande Ansible prend en charge le paramètre loop à cette fin :
- name: Exécuter plusieurs commandes
command: "{{ item }}"
loop:
- <commande1>
- <commande2>
- <commande3>
register: <variable_résultat>
become: oui
Dans cet exemple, les commandes spécifiées (<commande1>, <commande2> et <commande3>) seront exécutées une par une, et la sortie sera stockée dans la <variable_résultat>.
Gestion des délais d'exécution des commandes
Par défaut, Ansible attend indéfiniment l'achèvement d'une commande. Toutefois, vous pouvez définir un délai pour l'exécution de la commande à l'aide du paramètre timeout :
- name: Exécuter la commande avec un délai
command: <commande>
timeout: 60
register: <variable_résultat>
become: oui
Dans cet exemple, la commande sera interrompue si elle prend plus de 60 secondes à s'exécuter.
En maîtrisant ces techniques avancées d'exécution de commandes, vous pouvez améliorer davantage vos capacités d'automatisation Ansible et gérer un large éventail de scénarios dans la gestion de votre infrastructure.
Résumé
Ce tutoriel Ansible fournit un guide complet sur l'utilisation du module de commande pour exécuter des commandes sur des hôtes distants. En comprenant les bases et en explorant les techniques avancées, vous pouvez tirer parti des capacités d'Ansible pour rationaliser vos opérations informatiques et améliorer l'efficacité de votre infrastructure.


