Ответ
Роль в 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 # Ещё одна роль
Расширенные возможности вызова ролей:
-
Передача переменных в роль:
roles: - role: apache vars: apache_listen_port: 8080 apache_vhosts: - name: myapp.local docroot: /var/www/myapp -
Условное выполнение роли с
when:roles: - role: firewall when: ansible_os_family == "Debian" -
Назначение тегов (tags) роли:
roles: - { role: postgresql, tags: ['database', 'postgres'] }Это позволяет запускать только определённые роли:
ansible-playbook site.yml --tags "database". -
Динамический импорт ролей с
include_role(внутри tasks):- name: Include a role conditionally include_role: name: "{{ item }}" loop: - nginx - php-fpm when: deploy_web_stackinclude_roleвыполняется во время работы плейбука, что позволяет использовать циклы и условные операторы.
Порядок выполнения: При использовании директивы roles: задачи роли выполняются до задач, определённых непосредственно в блоке tasks: плейбука. Это стандартный порядок выполнения: pre_tasks -> roles: -> tasks: -> post_tasks.