Aller au contenu
Sommaire

Fiche mémo Ansible

Fiche mémo · environ 6 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. 3 points non vérifiés · Sources

Vue d'ensemble

Schéma : le nœud de contrôle contient l'inventaire, le playbook YAML et les modules ; il se connecte en SSH, sans agent, à des hôtes gérés qui exigent Python, et reçoit un bilan ok, changed ou failed par hôte.Nœud de contrôleInventairequels hôtes, quels groupesPlaybook (YAML)quoi faire, dans quel ordreModulesétat souhaité d'une ressourceSSH, sans agentHôte géré APython requisHôte géré BPython requisBilan par hôteok, changed, failed (--check : simulé)
Ansible : nœud de contrôle, SSH, hôtes gérés et bilan par hôte (schéma simplifié).
TermeSens
nœud de contrôlemachine où Ansible est installé et lancé
hôte gérémachine pilotée : SSH + Python, pas d'agent
inventaireliste des hôtes et groupes (all, ungrouped implicites)
playbookfichier YAML : plays, tâches, modules
moduleaction idempotente sur une ressource (ansible.builtin.dnf…)
rôledossier réutilisable : tasks, handlers, defaults, vars, templates, files, meta
handlertâche exécutée à la fin du play, seulement si notifiée par un changement
fait (fact)information découverte sur l'hôte (ansible_facts)
ansible-core / ansiblemoteur minimal / paquet « piles incluses » avec collections

Lecture seule

Terminal
ansible --versionansible-inventory -i inventaire.ini --graphansible local -i inventaire.ini -m ansible.builtin.pingansible local -i inventaire.ini -m ansible.builtin.setup
  • Contexte : Terminal ; inventaire de test avec localhost ansible_connection=local.
  • Droits : utilisateur normal.
  • Effet : affiche la version, l'arbre de l'inventaire, teste la connexion Python et liste les faits ; ne modifie rien.
  • Vérification : SUCCESS pour ping ; les faits s'affichent en JSON.
  • Retour arrière : sans objet.

Inventaire minimal

INI
[local]
localhost ansible_connection=local

Paramètres de connexion : ansible_connection, ansible_host, ansible_user, ansible_python_interpreter. Variables : group_vars/ et host_vars/. Plusieurs -i : le dernier l'emporte.

Playbook minimal

YAML
- name: Préparer un dossier de test
  hosts: local
  gather_facts: false
  tasks:
    - name: Créer le dossier de sortie
      ansible.builtin.file:
        path: ./sortie
        state: directory
        mode: "0755"

Vérifier avant d'agir

Terminal
ansible-playbook -i inventaire.ini preparer.yml --syntax-checkansible-playbook -i inventaire.ini preparer.yml --list-hostsansible-playbook -i inventaire.ini preparer.yml --list-tasksansible-playbook -i inventaire.ini preparer.yml --check --diff --limit local
  • Contexte : preparer.yml et inventaire.ini dans un dossier de test.
  • Droits : utilisateur normal.
  • Effet : contrôle de syntaxe, listes et simulation ; aucune modification de la cible.
  • Vérification : changed=N en simulation ; rien n'existe encore sur la cible.
  • Retour arrière : sans objet.

Attention : --check ne simule pas command ni shell ; un module qui ne le gère pas ne rapporte rien. Une simulation verte n'est pas une garantie. Sous --check, check_mode: false sur une tâche l'exécute réellement.

Exécuter pour de bon

Attention, effet notable. Cette commande a un effet notable. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
ansible-playbook -i inventaire.ini preparer.yml
  • Contexte : après --check --diff relu ; localhost ou hôte jetable.
  • Droits : utilisateur normal ; sur un hôte distant, utilisateur SSH (et sudo si become).
  • Effet : applique l'état décrit par le playbook ; ici, crée un dossier.
  • Vérification : bilan changed=1 au premier passage, changed=0 au second (idempotence).
  • Retour arrière : supprimer ce qui a été créé (en relisant le nom), ou détruire l'hôte jetable (instantané avant).

Options utiles d'ansible-playbook

OptionRôle
-i FICHIERinventaire
--limit MOTIFrestreindre les hôtes
-e nom=valeurvariable en ligne de commande (priorité la plus haute)
--check / --diffsimuler / montrer l'avant-après
--syntax-check, --list-hosts, --list-tasksvérifications sans exécution
--ask-become-pass (-K)mot de passe sudo saisi au prompt
--ask-vault-pass, --vault-password-filemot de passe du coffre (fichier hors dépôt)
-v à -vvvverbosité (peut afficher des secrets : prudence)

Variables, faits, handlers, modèles

YAML
- name: Exemple condensé
  hosts: local
  gather_facts: true
  vars:
    mode_reglage: essai
  tasks:
    - name: Déposer le fichier de réglages
      ansible.builtin.template:
        src: templates/reglages.conf.j2
        dest: ./sortie/reglages.conf
        mode: "0644"
      notify: Signaler le changement
  handlers:
    - name: Signaler le changement
      ansible.builtin.debug:
        msg: "Réglages modifiés sur {{ inventory_hostname }} ({{ ansible_facts['os_family'] }})"
  • Handlers : après toutes les tâches, dans l'ordre de définition, une seule fois ; meta: flush_handlers pour avancer.
  • Rendu Jinja2 sur le nœud de contrôle ; template : src, dest, owner, group, mode entre guillemets, validate, backup.
  • Valeur YAML commençant par {{ : entre guillemets.
  • Variables magiques : inventory_hostname, groups, group_names, hostvars, playbook_dir.

Ansible Vault

Attention, effet notable. Cette commande peut créer ou modifier une configuration. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
ansible-vault create --ask-vault-pass secrets-demo.ymlansible-vault view --ask-vault-pass secrets-demo.ymlansible-vault encrypt_string --ask-vault-pass --stdin-name 'mot_de_passe_demo'
  • Contexte : dossier de test jetable ; mot de passe de coffre et valeurs fictifs. L'option --stdin-name de encrypt_string est à confirmer avec ansible-vault encrypt_string --help (non relue).
  • Droits : utilisateur normal.
  • Effet : create écrit un fichier chiffré ; view l'affiche ; encrypt_string chiffre une valeur saisie au prompt (pas dans la ligne de commande, qui resterait dans l'historique du shell).
  • Vérification : head -1 secrets-demo.yml commence par $ANSIBLE_VAULT;.
  • Retour arrière : supprimer le fichier de test.

Autres sous-commandes : edit, rekey, decrypt (laisse un fichier en clair sur le disque).

Attention : jamais de secret en clair dans le dépôt, un playbook, une variable -e ou un journal. Le mot de passe du coffre va dans le Trousseau macOS (bin/secret), jamais dans un fichier versionné. Sur une tâche sensible : no_log: true et diff: false ; ne jamais debug une variable secrète.

Élévation de droits et Linux/RHEL

BesoinÉlément
élévationbecome: true, become_user, become_method ; -b / -K en ligne de commande
paquets RHEL-likeansible.builtin.dnf (state: present/latest/absent), exige python3-dnf sur la cible
servicesansible.builtin.service, ansible.builtin.systemd
fichiersfile, copy, template, lineinfile
utilisateursuser, group
VMwarecollection community.vmware (modules dépréciés : lire la page avant) ; hors périmètre ici

become au niveau de la tâche plutôt que du play ; mot de passe sudo au prompt, jamais dans l'inventaire.

Pièges fréquents

PiègeParade
--check vert mais command ignorérelire le playbook, utiliser des modules idempotents
Indentation YAML incorrecte--syntax-check, éditeur avec visualisation des espaces
{{ var }} sans guillemetsmettre la valeur entre guillemets
Secret affiché par -vvv ou debugno_log: true, pas de -vvv sur les tâches sensibles
Exécution sur le mauvais inventaire--list-hosts et --limit avant l'exécution réelle
Python absent sur l'hôte géréprérequis : Python et SSH
Collection absente (ansible-core)installer la collection à part (procédure non vérifiée)

Points non vérifiés

  • Versions d'Ansible, de Python et des distributions cibles de Stéphane : inconnues.
  • Forme exacte des sorties, ansible-galaxy role init, option --stdin-name, comportement détaillé de no_log, ansible-lint.
  • Pare-feu et SELinux : modules et collections non consultés ; VMware : seulement cité.

Sources

Toutes consultées le 18 octobre 2026 (documentation « latest », sans version de page).