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.
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érences2. 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" -oExé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" -bBonne Pratique : Préférezcommandàshellchaque 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": false3. 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 --diffErreur Courante :--checkn'est pas supporté par tous les modules :commandetshellsont 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 moduleMon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
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...