Как вызвать Ansible Role в Playbook?

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

Ответ

Роль в Ansible вызывается из плейбука с помощью директивы roles:. Роли позволяют структурировать и переиспользовать код. Ansible автоматически ищет роли в стандартных путях: roles/ (относительно плейбука), ~/.ansible/roles/, /usr/share/ansible/roles/, а также в путях, указанных в ANSIBLE_ROLES_PATH.

Базовый синтаксис:

- name: Deploy and configure web servers
  hosts: webservers
  become: yes
  roles:
    - common          # Простая роль без параметров
    - nginx           # Ещё одна роль

Расширенные возможности вызова ролей:

  1. Передача переменных в роль:

    roles:
      - role: apache
        vars:
          apache_listen_port: 8080
          apache_vhosts:
            - name: myapp.local
              docroot: /var/www/myapp
  2. Условное выполнение роли с when:

    roles:
      - role: firewall
        when: ansible_os_family == "Debian"
  3. Назначение тегов (tags) роли:

    roles:
      - { role: postgresql, tags: ['database', 'postgres'] }

    Это позволяет запускать только определённые роли: ansible-playbook site.yml --tags "database".

  4. Динамический импорт ролей с include_role (внутри tasks):

    - name: Include a role conditionally
      include_role:
        name: "{{ item }}"
      loop:
        - nginx
        - php-fpm
      when: deploy_web_stack

    include_role выполняется во время работы плейбука, что позволяет использовать циклы и условные операторы.

Порядок выполнения: При использовании директивы roles: задачи роли выполняются до задач, определённых непосредственно в блоке tasks: плейбука. Это стандартный порядок выполнения: pre_tasks -> roles: -> tasks: -> post_tasks.