Какие ключевые сущности и концепции есть в Ansible?

«Какие ключевые сущности и концепции есть в Ansible?» — вопрос из категории Ansible, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 базовой конфигурации серверов, управления пользователями, развертывания приложений и консистентной настройки всего парка инфраструктуры.