Ответ
Нет, в Ansible концепции State File, как в Terraform, не существует. Это фундаментальное различие в парадигмах инструментов.
Ansible — идемпотентный инструмент управления конфигурацией (Configuration Management). Он не хранит состояние инфраструктуры. Вместо этого при каждом запуске плейбука Ansible:
- Подключается к целевому хосту (через SSH, WinRM).
- Собирает факты (facts) о его текущем состоянии (версии ПО, запущенные сервисы, содержимое файлов).
- Для каждой задачи в плейбуке выполняет модуль, который проверяет, соответствует ли текущее состояние желаемому (декларативно описанному в плейбуке).
- Вносит изменения только если это необходимо для приведения системы к желаемому состоянию.
Пример: Задача по установке пакета nginx.
- name: Ensure nginx is installed
ansible.builtin.package:
name: nginx
state: present
При каждом запуске модуль package проверит (через менеджер пакетов системы), установлен ли уже nginx. Если да — задача завершится статусом ok, не внося изменений. Если нет — выполнит установку и вернет статус changed.
Как отслеживать "состояние" в Ansible?
- Факты (Gathered Facts): Это снимок состояния хоста на момент выполнения. Их можно использовать в условиях (
when) и регистрировать в переменные для последующего анализа. - Регистрация вывода задач (
register): Позволяет сохранить результат выполнения конкретной задачи в переменную для проверки в рамках того же плейбука. - Логи выполнения и отчеты: Использую флаг
--diffдля просмотра изменений в файлах и флаг-v/--verboseдля детального лога. Для production-сред часто настраиваю интеграцию вывода Ansible в системы централизованного логирования (ELK Stack) или в платформы типа AWX / Ansible Automation Platform, которые хранят историю выполненных заданий (jobs). - Внешние системы мониторинга и инвентаризации: Истинное состояние инфраструктуры отслеживаю через Prometheus/Grafana для метрик и через специализированные CMDB или даже простые динамические инвентари Ansible, генерируемые из облачных провайдеров.