Variables et facts 20 min de lecture

Variables dans Ansible

Definir des variables

# Dans le playbook (vars)
---
- name: Deployer l'application
  hosts: webservers
  vars:
    app_name: myapp
    app_port: 8080
    app_user: deploy
    packages:
      - nginx
      - python3
      - git

  tasks:
    - name: Installer les paquets
      apt:
        name: "{{ packages }}"
        state: present

    - name: Creer l'utilisateur
      user:
        name: "{{ app_user }}"
        shell: /bin/bash

Fichiers de variables externes

# vars/app.yml
app_name: myapp
app_port: 8080
database:
  host: db.example.com
  port: 5432
  name: myapp_prod

# Dans le playbook
---
- name: Deployer l'application
  hosts: webservers
  vars_files:
    - vars/app.yml
    - vars/secrets.yml

Variables enregistrees (register)

# Capturer la sortie d'une commande
- name: Verifier la version de Python
  command: python3 --version
  register: python_version

- name: Afficher la version
  debug:
    msg: "Python installe : {{ python_version.stdout }}"

# Utiliser le resultat dans une condition
- name: Installer Python si absent
  apt:
    name: python3
    state: present
  when: python_version.rc != 0

Priorite des variables

Ansible applique un ordre de priorite strict (du plus faible au plus fort) :

  1. Valeurs par defaut du role (defaults/main.yml)
  2. Variables d'inventaire (group_vars, host_vars)
  3. Variables du play (vars, vars_files)
  4. Variables de tache (set_fact, register)
  5. Variables en ligne de commande (-e / --extra-vars)
# Passer une variable en ligne de commande (priorite maximale)
ansible-playbook site.yml -e "app_port=9090"
ansible-playbook site.yml --extra-vars "env=production version=2.1"
Regle : Les variables passees avec -e ont toujours la priorite la plus haute et ecrasent toutes les autres.