Ответ
Факты (facts) в Ansible — это переменные, содержащие информацию об управляемых хостах (нодах), которые автоматически собираются при выполнении плейбука, если не отключено явно. Они предоставляют данные об операционной системе, сети, оборудовании, дисках и других характеристиках целевой системы.
Как это работает и зачем нужно:
При запуске плейбука Ansible выполняет специальный модуль setup на каждом хосте, который собирает сотни фактов. Эти данные затем доступны как переменные в задачах, что позволяет писать адаптивные и универсальные плейбуки.
Примеры полезных фактов и их использование:
- name: Print host information
debug:
msg: >
Host {{ ansible_hostname }} runs {{ ansible_distribution }} {{ ansible_distribution_version }}
on {{ ansible_architecture }} architecture.
It has {{ ansible_memtotal_mb }} MB of RAM and IP {{ ansible_default_ipv4.address }}.
- name: Install Nginx package based on OS family
package:
name: nginx
state: present
when: ansible_os_family == "Debian" # Используем факт для условного выполнения
- name: Create a directory in the user's home
file:
path: "{{ ansible_env.HOME }}/app_logs"
state: directory
owner: "{{ ansible_user_id }}"
Управление сборкой фактов:
- Отключение: Для ускорения выполнения можно отключить сборку фактов для всего плейбука или отдельной пьесы.
- hosts: webservers gather_facts: false # Факты собираться не будут tasks: - ... - Кэширование фактов: Для ещё большей скорости в средах с постоянной инфраструктурой можно включить кэширование фактов (в Redis, JSON-файл, Memcached).
- Пользовательские факты (Custom Facts): Можно расширять информацию, добавляя свои факты.
- Через файлы: Поместить исполняемый скрипт или JSON-файл в
/etc/ansible/facts.d/на целевом хосте. Ansible автоматически загрузит их как факты с префиксомansible_local. - Динамически в плейбуке: Использовать модуль
set_factдля создания переменных на лету. - name: Set a custom fact for deployment version
set_fact:
app_deployment_version: "v2.1.4"
- Через файлы: Поместить исполняемый скрипт или JSON-файл в