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.