← Назад к вопросам

Опиши структуру playbook в Ansible

1.0 Junior🔥 241 комментариев
#Ansible и управление конфигурацией

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структура Ansible Playbook

Ansible playbook — это файл YAML, который определяет серию задач (tasks) для выполнения на удаленных хостах. Это основной способ описания конфигурации и автоматизации в Ansible.

Базовая структура

---
- name: Название play
  hosts: webservers
  become: yes
  gather_facts: yes
  vars:
    app_version: "1.0.0"
    app_port: 8080
  tasks:
    - name: Установить пакеты
      apt:
        name:
          - nginx
          - curl
        state: present
      when: ansible_os_family == "Debian"
    - name: Стартовать сервис nginx
      service:
        name: nginx
        state: started
        enabled: yes
  handlers:
    - name: Перезагрузить nginx
      service:
        name: nginx
        state: restarted
  post_tasks:
    - name: Проверка здоровья
      uri:
        url: "http://localhost:{{ app_port }}"
        status_code: 200

Ключевые компоненты

name — описание play, выводится при выполнении.

hosts — целевые хосты из inventory. Может быть группа или конкретный хост.

become — повышение привилегий (sudo). Если true, используется become_user.

gather_facts — автоматически собирать информацию о хостах через setup модуль.

vars — переменные, доступные в пределах play.

tasks — основной список действий (модули Ansible), выполняются последовательно.

handlers — срабатывают при notify только если была изменена конфигурация.

post_tasks — выполняются после основных задач, для проверок и cleanup.

Структура задачи

  • name: Описание
  • register: сохраняет результат в переменную
  • when: условное выполнение
  • notify: вызывает handler при изменении
  • tags: для выборочного запуска

Лучшие практики

  • Использовать роли для организации playbooks
  • Разделять переменные в отдельные файлы
  • Использовать идемпотентные модули
  • Добавлять информативные имена задач
  • Использовать handlers вместо прямых рестартов
  • Тестировать с флагом --check (dry-run режим)

В production я часто организую playbooks в роли и применяю их через комбинацию Ansible с GitOps для управления инфраструктурой.