Писали ли вы роли для Ansible?

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

Ответ

Да, я создавал и поддерживал множество ролей Ansible для стандартизации настройки инфраструктуры. Роли — это отличный способ упаковать повторяющиеся задачи, переменные и шаблоны в переиспользуемые компоненты.

Структура типичной роли, которую я создаю:

roles/
  nginx/
    tasks/          # Основные задачи
      main.yml
    handlers/       # Обработчики (например, перезагрузка сервиса)
      main.yml
    templates/      # Jinja2 шаблоны конфигов
      nginx.conf.j2
    vars/           # Переменные по умолчанию для роли
      main.yml
    defaults/       # Переменные с низким приоритетом (для переопределения)
      main.yml
    meta/           # Зависимости роли
      main.yml

Пример задачи из roles/nginx/tasks/main.yml для установки и настройки Nginx на Ubuntu:

- name: Install Nginx
  apt:
    name: nginx
    state: present
    update_cache: yes

- name: Deploy Nginx configuration template
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
  notify:
    - Reload Nginx  # Вызов обработчика

- name: Ensure Nginx is running and enabled
  service:
    name: nginx
    state: started
    enabled: yes

Пример обработчика (handlers/main.yml):

- name: Reload Nginx
  service:
    name: nginx
    state: reloaded

Использование роли в плейбуке:

- hosts: web_servers
  become: yes
  roles:
    - role: nginx
      vars:
        nginx_worker_processes: 4

Мой опыт: Роли позволяют легко применять одну и ту же конфигурацию к разным группам серверов, тестировать их отдельно и делиться ими между командами. Я также использовал Ansible Galaxy для загрузки готовых ролей и управления зависимостями через requirements.yml.