Les facts Ansible
Les facts sont des informations systeme collectees automatiquement sur les hotes cibles au debut de chaque play.
# Afficher tous les facts d'un hote
ansible web1.example.com -m setup
# Filtrer les facts
ansible web1.example.com -m setup -a "filter=ansible_os_family"
ansible web1.example.com -m setup -a "filter=ansible_distribution*"
# Facts courants
# ansible_os_family: "Debian"
# ansible_distribution: "Ubuntu"
# ansible_distribution_version: "22.04"
# ansible_hostname: "web1"
# ansible_default_ipv4.address: "192.168.1.10"
# ansible_memtotal_mb: 4096
# ansible_processor_cores: 2
Utiliser les facts dans les taches
- name: Afficher les informations systeme
debug:
msg: "OS: {{ ansible_distribution }} {{ ansible_distribution_version }}, RAM: {{ ansible_memtotal_mb }}MB"
- name: Installer le paquet selon l'OS
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
- name: Installer le paquet sur CentOS
yum:
name: nginx
state: present
when: ansible_os_family == "RedHat"
Conditionnelles avec when
# Condition simple
- name: Redemarrer si configuration modifiee
service:
name: nginx
state: restarted
when: nginx_config.changed
# Conditions multiples (ET)
- name: Installer sur Ubuntu 22.04 uniquement
apt:
name: special-package
state: present
when:
- ansible_distribution == "Ubuntu"
- ansible_distribution_version == "22.04"
# Condition OU
- name: Installer sur Debian ou Ubuntu
apt:
name: nginx
state: present
when: ansible_os_family == "Debian" or ansible_os_family == "Ubuntu"
# Condition sur une variable
- name: Deployer en production uniquement
template:
src: prod.conf.j2
dest: /etc/app/app.conf
when: env == "production"
Desactiver la collecte de facts
# Pour accelerer l'execution si les facts ne sont pas necessaires
---
- name: Tache rapide sans facts
hosts: all
gather_facts: no
tasks:
- name: Ping
ping:
Performance : La collecte de facts prend du temps. Utilisez
gather_facts: no quand vous n'en avez pas besoin.