Гайды

Ansible: автоматизация конфигурации серверов

Inventory, ad-hoc и плейбуки, роли и Jinja2, vault, идемпотентность и связка с Terraform.

~10 мин чтения

Ansible: автоматизация конфигурации серверов

Ansibleagentless: управление по SSH (или API облака) с YAML-плейбуками, идемпотентными модулями (apt, copy, template, systemd). Инвентарь — список хостов и групп. IaC-облако — Terraform: основы часто создаёт машины, Ansible — настраивает ОС и приложение.


1. Структура

text
inventory/
  prod.ini
playbooks/
  site.yml
roles/
  nginx/
    tasks/main.yml
    templates/nginx.conf.j2
    handlers/main.yml
ansible.cfg

2. Inventory и ad-hoc

ini
[web]
app1.example.com
app2.example.com

[web:vars]
ansible_user=deploy
bash
ansible all -i inventory/prod.ini -m ping
ansible web -i inventory/prod.ini -m apt -a "name=nginx state=present" -b

3. Playbook

yaml
- hosts: web
  become: true
  roles:
    - nginx

roles упорядочивают задачи, переменные, шаблоны Jinja2.

Handlers — задачи, которые выполняются один раз в конце play при notify (типично reload nginx после изменения конфига):

yaml
# roles/nginx/handlers/main.yml
- name: reload nginx
  ansible.builtin.service:
    name: nginx
    state: reloaded
yaml
# 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

AnsibleTerraform
Порядок задач, конфиг ОСДекларативное состояние ресурсов облака
Может менять одну машину много разПлан изменений к 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. Чек-лист

  • --check dry-run в CI.
  • Лимит --limit для канареечных прогонов.
  • Версия коллекций в requirements.yml.
  • ansible-lint в CI на изменённые роли/плейбуки.

Дальше: CI/CD: GitLab и GitHub Actions · тег Ansible