Ответ
Ansible — это инструмент управления конфигурацией и оркестрации, использующий декларативный язык на основе YAML. Его основные сущности:
1. Инвентарь (Inventory)
Файл (обычно inventory.ini или inventory.yml), определяющий целевые хосты и их группировку. Может быть статическим или динамическим (генерируемым скриптом из облачного провайдера).
[webservers]
web1.example.com ansible_user=ubuntu
web2.example.com
[databases]
db1.example.com
[all:vars]
ansible_python_interpreter=/usr/bin/python3
2. Плейбуки (Playbooks) Основные сценарии автоматизации, написанные на YAML. Содержат один или несколько "плейов" (plays), которые выполняются на группах хостов из инвентаря.
---
- name: Ensure Nginx is installed and running
hosts: webservers
become: yes # Повышение привилегий через sudo
tasks:
- name: Install Nginx package
apt:
name: nginx
state: latest
update_cache: yes
3. Задачи (Tasks)
Отдельные единицы работы внутри плейбука. Каждая задача вызывает модуль Ansible — готовую функцию (например, apt, copy, template, systemd).
4. Обработчики (Handlers) Специальные задачи, которые запускаются только один раз в конце плейбука, если были уведомлены (notify) другими задачами. Часто используются для перезапуска сервисов после изменения конфигурации.
tasks:
- name: Copy Nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx # Уведомление обработчика
handlers:
- name: Restart Nginx
systemd:
name: nginx
state: restarted
5. Роли (Roles)
Структурированный способ организации плейбуков. Роль инкапсулирует задачи, переменные, файлы, шаблоны и обработчики для настройки одного компонента (например, nginx, postgresql).
roles/nginx/
├── tasks/ # main.yml с задачами
├── handlers/ # main.yml с обработчиками
├── templates/ # Jinja2 шаблоны (nginx.conf.j2)
├── files/ # Статические файлы для копирования
└── defaults/ # Значения переменных по умолчанию (main.yml)
6. Шаблоны (Templates) и Переменные (Variables)
- Шаблоны — файлы конфигурации (Jinja2), которые динамически заполняются переменными Ansible.
- Переменные могут быть определены на разных уровнях: в инвентаре, роли, плейбуке или переданы через командную строку (
-e).
7. Ansible Vault Инструмент для шифрования конфиденциальных данных (пароли, ключи API) прямо в YAML-файлах, что позволяет безопасно хранить их в Git.
# Шифрование файла с переменными
ansible-vault encrypt group_vars/all/secrets.yml
В своей работе я использую Ansible для provision базовой конфигурации серверов, управления пользователями, развертывания приложений и консистентной настройки всего парка инфраструктуры.