Основываясь на доступной документации для роли, я могу создать несколько точек входа для ролей, создав файлы:
playbooks/roles/my_role/tasks/main.yml
playbooks/roles/my_role/tasks/other.yml
И я могу добавить роль по умолчанию main.yml
, используя этот код:
---
- name: Example 1
hosts: <hostnames>
roles:
- my_role
Но как я могу использовать точку входа other.yml
?
Я ожидал, что это будет что-то вроде этого, но ни один из них не работает:
---
- name: Example 1
hosts: <hostnames>
roles:
- my_role:other
- my_role/other
- my_role.other
Директива roles
в playbook загружает «точку входа» роли по умолчанию, то есть tasks/main.yml
. Другие файлы задач, такие как tasks/others.yml
, могут быть загружены из него на основе условий, тегов и т. д.
Однако, если вы хотите загрузить определенный файл из роли, вы можете использовать модули include_role или import_role.
Например.:
# invoke role's default "entrypoint" (main.yml)
roles:
- my_role
tasks:
# include the role, but tasks from other.yml
- include_role:
name: my_role
tasks_from: other.yml
Обратите внимание на порядок выполнения, указанный в документации, на которую вы ссылаетесь.
Другой «хакерский» вариант — использовать модули include|import_tasks
, которые работают так же, как включение простого файла «задачи» (теряя функциональность ролей), если это соответствует вашим требованиям.
tasks:
- include_tasks: path/to/my_role/tasks/other.yml