Ansible · Variables

Variables

Paramétrez vos playbooks avec des variables, facts, résultats enregistrés et une priorité comprise sans exposer de secrets.

Leçon disponible
20 min

Objectifs

  • Définir des variables dans un play, group_vars et host_vars.
  • Utiliser une expression Jinja et des extra vars.
  • Enregistrer le résultat d’une tâche et lire des facts.
  • Comprendre une vue simplifiée de la précédence.

Variables Ansible

Les variables séparent les valeurs qui changent de la logique des tâches. Elles peuvent venir de l’inventory, de fichiers group_vars ou host_vars, d’un play, de facts, d’un résultat register ou de la ligne de commande.

La précédence Ansible comporte de nombreux niveaux. Retenez d’abord que les defaults de rôle sont faibles et que les extra vars passées avec -e ont une priorité très élevée ; vérifiez toujours la documentation avant de concevoir une surcharge complexe.

Variables de play et expressions Jinja

La clé vars définit ici deux valeurs. Les doubles accolades insèrent une expression Jinja dans le message ou dans un argument de module.

variables.yml
---
- name: Présenter la configuration web
  hosts: web
  vars:
    app_name: toolbox
    http_port: 8080
  tasks:
    - name: Afficher la cible
      ansible.builtin.debug:
        msg: "{{ app_name }} écoute sur le port {{ http_port }}"
Surcharger une valeur non sensible
ansible-playbook -i inventory.ini variables.yml -e "http_port=9090" --limit web01

N’utilisez pas -e avec un secret en clair : la ligne de commande peut rester dans l’historique ou apparaître dans la liste des processus.

Portée et précédence, version simple

group_vars convient aux valeurs communes d’un groupe ; host_vars porte les exceptions d’un hôte. Les variables du play sont proches du scénario. Les extra vars servent à une surcharge explicite et dominent la plupart des autres sources.

  • Defaults de rôle : valeurs de repli faciles à surcharger.
  • Group vars : valeurs communes ; host vars : exceptions ciblées.
  • Play vars : valeurs définies pour le play courant.
  • Extra vars (-e) : priorité très élevée, à utiliser explicitement.
group_vars/web.yml
---
http_port: 8080
app_environment: staging
host_vars/web01.yml
---
http_port: 8081

Résultats enregistrés et facts

register stocke le résultat structuré d’une tâche pour les tâches suivantes. Les facts décrivent la cible, par exemple sa famille de système ou ses interfaces. Inspectez une structure avec debug avant de dépendre d’un champ.

Enregistrer une commande de lecture
---
- name: Lire et afficher la version du noyau
  hosts: web
  tasks:
    - name: Lire uname
      ansible.builtin.command: uname -r
      register: kernel_result
      changed_when: false

    - name: Afficher la sortie
      ansible.builtin.debug:
        var: kernel_result.stdout

    - name: Afficher la famille du système
      ansible.builtin.debug:
        var: ansible_facts.os_family

Mini résumé

  • Les variables rendent les playbooks réutilisables.
  • group_vars, host_vars et vars répondent à des portées différentes.
  • -e a une priorité élevée et ne doit pas transporter de secret en clair.
  • register et ansible_facts rendent les résultats et informations de cible accessibles.

Outils associés

Générer un playbook Ansible

Utilisez Ansible Playbook Generator pour préparer une base YAML locale, puis relisez et adaptez chaque tâche avant utilisation.

Ouvrir l’outil

Mini quiz

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

1. Quelle syntaxe insère une variable dans une expression Jinja ?
2. À quoi sert register sur une tâche ?
3. Quelle source possède une priorité très élevée dans Ansible ?