Ansible · Commandes ad-hoc

Commandes ad-hoc

Utilisez les commandes ad-hoc pour une action ponctuelle, ciblée et compréhensible avec les modules adaptés.

Leçon disponible
20 min

Objectifs

  • Lire la structure d’une commande ansible ad-hoc.
  • Utiliser ping, command, shell, package, service, copy, file et setup.
  • Limiter précisément les hôtes visés.
  • Préférer un module dédié à shell lorsque cela est possible.

Commandes ad-hoc

Une commande ad-hoc exécute un module sans écrire de playbook. Elle convient à une vérification ou une opération ponctuelle ; dès qu’une action doit être répétée, relue ou partagée, un playbook devient plus sûr.

La forme générale est ansible <motif> -i <inventory> -m <module> -a <arguments>. Vérifiez le motif d’hôtes, le besoin de become et l’impact réel avant toute exécution.

Connectivité et collecte d’informations

ping vérifie la capacité d’Ansible à travailler avec la cible. setup collecte les facts. command lance directement un programme sans interprétation par un shell.

Tester le groupe web
ansible web -i inventory.ini -m ansible.builtin.ping
Lire la version du noyau
ansible web -i inventory.ini -m ansible.builtin.command -a "uname -r"
Collecter les facts
ansible web -i inventory.ini -m ansible.builtin.setup

Paquets, services et fichiers

Les modules dédiés décrivent un état souhaité et sont généralement plus prévisibles que des commandes shell. --become demande une élévation de privilèges : elle doit être autorisée et limitée.

Installer Nginx
ansible web -i inventory.ini -m ansible.builtin.package -a "name=nginx state=present" --become
Démarrer et activer Nginx
ansible web -i inventory.ini -m ansible.builtin.service -a "name=nginx state=started enabled=true" --become
Copier un fichier de laboratoire
ansible web -i inventory.ini -m ansible.builtin.copy -a "src=./motd dest=/tmp/motd mode=0644"
Créer un répertoire temporaire
ansible web -i inventory.ini -m ansible.builtin.file -a "path=/tmp/demo-ansible state=directory mode=0755"

command ou shell ?

ansible.builtin.shell passe la commande par un shell et permet pipes, redirections ou variables du shell. Cette puissance augmente aussi les risques d’erreur, d’injection et de non-idempotence.

  • Préférez package, service, copy, file ou un autre module dédié.
  • Utilisez command si aucune fonctionnalité de shell n’est nécessaire.
  • N’utilisez shell qu’après validation des entrées et de l’idempotence.
  • Ajoutez --limit pour tester sur un hôte connu avant un groupe entier.
Exemple de lecture avec un pipe
ansible web -i inventory.ini -m ansible.builtin.shell -a "journalctl -n 100 | grep ERROR"

Mini résumé

  • Les commandes ad-hoc servent aux actions ponctuelles et ciblées.
  • ping, setup, package, service, copy et file couvrent de nombreux besoins courants.
  • command évite le shell ; shell se réserve aux fonctions qui l’exigent réellement.
  • Le groupe, --limit et --become se relisent avant exécution.

Outils associés

Construire une commande Ansible

Utilisez Ansible Command Builder pour composer une commande ad-hoc ou de diagnostic et comprendre ses options sans l’exécuter.

Ouvrir l’outil

Mini quiz

Trois questions pour vérifier les notions essentielles de la leçon.

1. Quel module est le plus adapté pour garantir qu’un paquet est présent ?
2. Quel module collecte les facts d’une cible ?
3. Quand shell est-il justifié par rapport à command ?