Гайды
Ansible: автоматизация конфигурации серверов
Inventory, ad-hoc и плейбуки, роли и Jinja2, vault, идемпотентность и связка с Terraform.
~10 мин чтения
Ansible: автоматизация конфигурации серверов
Ansible — agentless: управление по SSH (или API облака) с YAML-плейбуками, идемпотентными модулями (apt, copy, template, systemd). Инвентарь — список хостов и групп. IaC-облако — Terraform: основы часто создаёт машины, Ansible — настраивает ОС и приложение.
1. Структура
inventory/
prod.ini
playbooks/
site.yml
roles/
nginx/
tasks/main.yml
templates/nginx.conf.j2
handlers/main.yml
ansible.cfg
2. Inventory и ad-hoc
[web]
app1.example.com
app2.example.com
[web:vars]
ansible_user=deploy
ansible all -i inventory/prod.ini -m ping
ansible web -i inventory/prod.ini -m apt -a "name=nginx state=present" -b
3. Playbook
- hosts: web
become: true
roles:
- nginx
roles упорядочивают задачи, переменные, шаблоны Jinja2.
Handlers — задачи, которые выполняются один раз в конце play при notify (типично reload nginx после изменения конфига):
# roles/nginx/handlers/main.yml
- name: reload nginx
ansible.builtin.service:
name: nginx
state: reloaded
# roles/nginx/tasks/main.yml
- ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: reload nginx
Теги — прогон части play: ansible-playbook site.yml --tags nginx. Полезно для быстрых hotfix без полного прогона.
4. Переменные и vault
group_vars/web.yml, host_vars/. Секреты — ansible-vault encrypt для файлов или внешний vault.
5. Идемпотентность
Модули стремятся к желаемому состоянию; command с creates: — если нет встроенного модуля.
6. Ansible vs Terraform
| Ansible | Terraform |
|---|---|
| Порядок задач, конфиг ОС | Декларативное состояние ресурсов облака |
| Может менять одну машину много раз | План изменений к API |
Часто связка: Terraform output IP → dynamic inventory.
7. Коллекции и качество
collections/requirements.yml фиксирует версии коллекций (ansible.posix, community.general, облачные amazon.aws и т.д.). В CI: ansible-galaxy collection install -r collections/requirements.yml и ansible-lint на плейбуки — ловит антипаттерны и устаревший синтаксис до прогона по инфраструктуре.
ansible-navigator (TUI/CLI) удобен для отладки с тем же окружением, что и в пайплайне.
8. Чек-лист
-
--checkdry-run в CI. - Лимит
--limitдля канареечных прогонов. - Версия коллекций в
requirements.yml. -
ansible-lintв CI на изменённые роли/плейбуки.
Дальше: CI/CD: GitLab и GitHub Actions · тег Ansible