включить задачи из другой роли в ansible playbook
я разрабатываю своего рода playbook lib с индивидуальными задачами
так что в обычных ролях РЕПО, у меня есть что-то вроде:
roles
├── common
│ └── tasks
│ ├── A.yml
│ ├── B.yml
│ ├── C.yml
│ ├── D.yml
│ ├── login.yml
│ ├── logout.yml
│ └── save.yml
├── custom_stuff_workflow
│ └── tasks
│ └── main.yml
└── other_stuff_workflow
└── tasks
└── main.yml
мой главный.yml в custom_stuff_workflow затем содержат что-то вроде:
---
- include: login.yml
- include: A.yml
- include: C.yml
- include: save.yml
- include: logout.yml
и это один в другом рабочем процессе:
---
- include: login.yml
- include: B.yml
- include: A.yml
- include: D.yml
- include: save.yml
- include: logout.yml
Я не могу найти способ сделать это естественным путем: один из способов, который работал, имел все задачи в одной роли и помечал соответствующие задачи, включая custom_stuff_workflow
проблема у меня в том, что теги не могут быть установлены в вызывающем пьес: это только в командной строке
поскольку я распространяю это ansible repo со многими людьми в компании, я не могу полагаться на вызовы командной строки (было бы неплохо иметь #!
заголовок в yml для обработки )
я мог бы также скопировать соответствующие задачи (внутри общего в приведенном выше дереве) в каждом рабочем процессе, но я не хочу их повторять вокруг
может ли кто-нибудь увидеть решение для достижения того, что я хотел бы, не повторяя задачи по разным ролям?
Я думаю, краеугольный камень моей проблемы заключается в том, что я определяю задачи как индивидуальные, и это выглядит неестественно в ansible...
Спасибо большое
PS: обратите внимание, что задачи в рабочем процессе должны выполняться в определенном порядке, и единственными естественными шагами для абстракции будут вход и сохранение / выход
PPS: я видел этот вопрос Как я могу назвать роль изнутри другой роли в Ansible? но это не решает мою проблему, поскольку она вызывает полную роль, а не подмножество задач в роли
2 ответа:
просто если кто-то еще натыкается на это, версия 2.2 Ансибля теперь имеет
include_role
.Теперь вы можете сделать что-то подобное.--- - name: do something include_role: name: common tasks_from: login
проверьте документацию здесь.
да, Ansible не очень любит задачи как отдельные компоненты. Я думаю, что он хочет, чтобы вы использовали роли, но я понимаю, почему вы не хотите использовать роли для простых, многоразовых задач.
в настоящее время я вижу два возможных решения:
1. Сделайте эти файлы задач в роли и используйте зависимости
тогда вы могли бы сделать что-то вроде этого, например, custom_stuff_workflow
dependencies: - { role: login }
посмотреть: https://docs.ansible.com/playbooks_roles.html#role-dependencies
2. Используйте include с "жестко закодированными" путями к файлам задач
- include: ../../common/tasks/login.yml
это сработало довольно хорошо в короткой тестовой книге, которую я только что сделал. Имейте в виду, вы также можете использовать параметры и т. д. в те входит.
см.:http://docs.ansible.com/ansible/latest/playbooks_reuse.html
Я надеюсь, что правильно понял этот вопрос, и это помогает.