Aller au contenu

Variables et Facts en Ansible

Les variables permettent de personnaliser les playbooks, tandis que les facts sont des informations collectées automatiquement sur les hôtes cibles.

Définir des variables

Les variables peuvent être définies à plusieurs endroits : - Dans le playbook (vars). - Dans des fichiers externes (vars_files). - Dans l’inventaire. - Via la ligne de commande (-e).

Exemple dans un playbook :

---
- name: Configurer Apache
  hosts: webservers
  vars:
    http_port: 80
    domain: example.com
  tasks:
    - name: Configurer port Apache
      lineinfile:
        path: /etc/apache2/ports.conf
        regexp: '^Listen '
        line: Listen {{ http_port }}

Fichiers de variables

Créez un fichier vars.yml :

http_port: 80
domain: example.com

Utilisez-le dans un playbook :

- name: Utiliser fichier de variables
  hosts: webservers
  vars_files:
    - vars.yml
  tasks:
    - name: Afficher variable
      debug:
        msg: "Domaine : {{ domain }}"

Variables d’inventaire

Définissez des variables dans l’inventaire :

[webservers]
web1 ansible_host=192.168.1.10 http_port=80
web2 ansible_host=192.168.1.11 http_port=8080

Facts

Les facts sont des informations collectées sur les hôtes (OS, RAM, CPU, etc.). Affichez-les avec :

ansible -i inventory.ini web1 -m setup

Utilisez un fact dans un playbook :

- name: Afficher distribution
  debug:
    msg: "OS : {{ ansible_distribution }} {{ ansible_distribution_version }}"

Variables magiques

Certaines variables sont prédéfinies, comme : - inventory_hostname : Nom de l’hôte dans l’inventaire. - ansible_user_id : Utilisateur exécutant la tâche.

Exemple :

- name: Afficher hôte
  debug:
    msg: "Hôte : {{ inventory_hostname }}"

Filtres Jinja2

Transformez les variables avec des filtres Jinja2 :

- name: Afficher en majuscules
  debug:
    msg: "{{ domain | upper }}"

Sécuriser les variables

Utilisez Ansible Vault pour chiffrer les variables sensibles :

ansible-vault create secrets.yml

Exemple de fichier chiffré :

---
db_password: mysecretpassword

Utilisez-le dans un playbook :

- name: Utiliser variable chiffrée
  hosts: dbservers
  vars_files:
    - secrets.yml
  tasks:
    - name: Configurer base de données
      debug:
        msg: "Mot de passe : {{ db_password }}"

Exécutez avec :

ansible-playbook -i inventory.ini playbook.yml --ask-vault-pass

Bonnes pratiques

  • Utilisez des noms de variables clairs et descriptifs.
  • Regroupez les variables dans des fichiers pour la maintenabilité.
  • Utilisez Vault pour les données sensibles.
  • Évitez les variables globales si possible.

Ressources