RousselTMLEARNING

Article · Ansible : de la découverte à l'expertise

Les commandes Ad-Hoc

1. Principe des commandes ad-hoc #

Une action, un module, un ensemble d'hôtes.

Quand les utiliser ? #

Une commande ad-hoc exécute un seul module sur un ou plusieurs hôtes, sans écrire de playbook. C'est l'outil idéal pour les actions ponctuelles : vérifier la connectivité, redémarrer un service, collecter une information, copier un fichier. Dès qu'une action doit être rejouable ou versionnée, elle devient une tâche de playbook.

Étapes d'exécution d'une commande ad-hoc
Ansible n'installe aucun agent : il pousse le module par SSH.

Syntaxe générale #

ansible <pattern> -i <inventaire> -m <module> -a "<arguments>" [options]

# Options courantes
#   -b            devenir root (become)         -K  demander le mot de passe sudo
#   -u deploy     utilisateur SSH               -k  demander le mot de passe SSH
#   -f 20         nombre de forks (parallélisme) -o  sortie sur une ligne
#   --check       simulation (dry-run)          --diff  afficher les différences

2. Les modules incontournables #

Des commandes prêtes à copier.

Connectivité et informations #

# Test de connexion + Python présent (ce n'est PAS un ping ICMP)
ansible all -m ping

# Faits collectés sur l'hôte (OS, IP, CPU, mémoire, disques...)
ansible web1.lab -m setup
ansible web1.lab -m setup -a "filter=ansible_distribution*"
ansible all -m setup -a "filter=ansible_default_ipv4" -o
Sortie de ansible -m ping
Un hôte injoignable n'interrompt pas l'exécution sur les autres.

Exécuter des commandes #

# Module command (par défaut) : pas de pipe, pas de variables shell
ansible all -a "uptime"
ansible all -a "df -h /"
ansible webservers -a "systemctl is-active nginx"

# Module shell : interprété par /bin/sh (pipes, redirections, variables)
ansible all -m shell -a "ps aux | grep -c nginx"
ansible all -m shell -a "echo $HOSTNAME > /tmp/who"

# Module raw : sans Python sur la cible (équipements réseau, bootstrap)
ansible newhost -m raw -a "apt-get install -y python3" -b
Bonne Pratique : Préférez command à shell chaque fois que possible : il est plus sûr (pas d'injection) et ses résultats plus prévisibles.

Gérer paquets, services, fichiers et utilisateurs #

# Paquets
ansible webservers -b -m apt  -a "name=nginx state=present update_cache=yes"
ansible webservers -b -m dnf  -a "name=httpd state=latest"
ansible all        -b -m apt  -a "upgrade=dist"

# Services
ansible webservers -b -m service -a "name=nginx state=restarted enabled=yes"
ansible webservers -b -m systemd -a "name=nginx state=reloaded daemon_reload=yes"

# Fichiers
ansible all -m copy  -a "src=./motd dest=/etc/motd owner=root group=root mode=0644" -b
ansible all -m file  -a "path=/opt/app state=directory mode=0755" -b
ansible all -m file  -a "path=/tmp/old.log state=absent" -b
ansible all -m fetch -a "src=/var/log/syslog dest=./logs/ flat=no"

# Utilisateurs et groupes
ansible all -b -m user  -a "name=deploy groups=sudo shell=/bin/bash append=yes"
ansible all -b -m group -a "name=ops state=present"

# Télécharger, archiver, tâches planifiées
ansible all -m get_url -a "url=https://example.org/app.tgz dest=/tmp/app.tgz checksum=sha256:<hash>"
ansible all -b -m cron -a "name='backup' minute=0 hour=2 job='/usr/local/bin/backup.sh'" 

Rendre une opération idempotente #

Les modules apt, service, file, copy... décrivent un état souhaité (state=present, started, absent) et ne changent rien si l'état est déjà atteint : la sortie indique "changed": false. Ce n'est pas le cas de command et shell qui s'exécutent systématiquement.

ansible web1.lab -b -m apt -a "name=nginx state=present"
# 1er passage : "changed": true      2e passage : "changed": false

3. Contrôler l'exécution #

Parallélisme, privilèges, simulation et sorties.

Forks, serial et timeouts #

ansible all -m ping -f 50              # 50 hôtes en parallèle (défaut : 5)
ansible all -m shell -a "sleep 30" -B 60 -P 5   # tâche asynchrone : 60 s max, sondage toutes les 5 s
ansible all -m ping -T 10                  # timeout de connexion 10 s

Élévation de privilèges et authentification #

ansible all -m ping -u deploy --private-key ~/.ssh/id_ed25519
ansible all -b -K -m apt -a "update_cache=yes"           # -b become, -K demande le mot de passe sudo
ansible all -b --become-user postgres -m command -a "psql -c 'select 1'" 

Simulation et différences #

ansible webservers -b -m copy -a "src=nginx.conf dest=/etc/nginx/nginx.conf" --check --diff
Erreur Courante : --check n'est pas supporté par tous les modules : command et shell sont simplement ignorés en mode simulation.

Formats de sortie #

ansible all -m setup -a "filter=ansible_hostname" -o          # une ligne par hôte
ANSIBLE_STDOUT_CALLBACK=yaml ansible all -m setup -a "filter=ansible_os_family"
ansible-doc -l | wc -l      # nombre de modules disponibles
ansible-doc copy            # documentation complète d'un module

📄 Ansible : les commandes Ad-Hoc →

Mon suivi

  • ⏱ Durée estimée : ≈ 10 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Articles recommandés

Linux vs Unix : Le Guide Complet des Commandes et Distributions

Comprenez les différences entre Linux et Unix, explorez les distributions (serveur, desktop, ligh...

Ansible : l'inventaire (statique, dynamique, groupes et variables)

Comprendre et maîtriser l'inventaire Ansible : fichiers INI et YAML, groupes, variables d'hôte et...

Ansible : structurer son code avec les rôles

Créer, organiser et réutiliser des rôles Ansible : arborescence, defaults, tasks, handlers, templ...

Ansible : générer des fichiers dynamiques avec Jinja2 et les facts

Créer des fichiers de configuration dynamiques : templates Jinja2, variables, facts, filtres, bou...

Ansible : gérer la sécurité (Vault, SSH, privilèges et secrets)

Sécuriser Ansible : Ansible Vault, authentification SSH par clés, become et sudo, no_log, durciss...

Ansible : gérer son infrastructure avec des playbooks (Infrastructure as Code)

Écrire des playbooks de production : structure d'un projet, plays, handlers, tags, strategy seria...

Ansible : piloter ses automatisations avec une interface graphique (AWX, Semaphore, AAP)

Comparer et installer les interfaces graphiques d'Ansible : AWX, Ansible Automation Platform, Sem...

Ansible : aller plus loin (tests, qualité, CI/CD et performance)

Industrialiser Ansible : ansible-lint, yamllint, Molecule, intégration continue, collections, exe...

Bonnes pratiques Vagrant : des environnements reproductibles et rapides

Bonnes pratiques Vagrant : Vagrantfile versionné, boxes épinglées, provisioning idempotent, multi...