Включать задания из другой роли в недоступном для просмотра
Я разрабатываю своего рода библиотеку с индивидуальными задачами
поэтому в обычных ролях repo у меня есть что-то вроде:
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
my main.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
Проблема с этим заключается в том, что теги не могут быть установлены в вызывающем playbook: он должен быть установлен только в командной строке
поскольку я распространяю это нерешенное репо со многими людьми в компании, я не могу полагаться на вызовы командной строки (было бы неплохо, если заголовок #!
в yml обрабатывался командой ansible-playbook
)
Я мог бы также скопировать соответствующие задачи (внутри общего дерева в приведенном выше дереве) в каждом рабочем процессе, но я не хочу повторять их вокруг
Может ли кто-нибудь увидеть решение для достижения того, что я хотел бы, не повторяя задачи над разными ролями?
Я думаю, что краеугольным камнем моей проблемы является то, что я определяю задачи как индивидуальные, и это выглядит неестественно в недоступном...
Спасибо большое
PS: обратите внимание, что задачи в рабочем процессе должны выполняться в определенном порядке, и единственными естественными шагами для абстракции могут быть логин и сохранение/выход из системы
PPS: Я видел этот вопрос Как мне назначить роль из другой роли в Ansible?, но она не решает мою проблему, так как она вызывает полный роль, а не подмножество задач в роли
Ответы
Ответ 1
Просто запустите кого-то другого, версия 2.2 от Ansible теперь имеет include_role
. Теперь вы можете сделать что-то вроде этого.
---
- name: do something
include_role:
name: common
tasks_from: login
Ознакомьтесь с документацией здесь.
Ответ 2
Да, Ansible не очень нравится задачам как отдельные компоненты. Я думаю, он хочет, чтобы вы использовали роли, но я понимаю, почему вы не хотите использовать роли для простых задач многократного использования.
В настоящее время я вижу два возможных решения:
1. Сделайте эти файлы задач в роли и используйте зависимости
Тогда вы можете сделать что-то подобное, например. custom_stuff_workflow
dependencies:
- { role: login }
Смотрите: https://docs.ansible.com/playbooks_roles.html#role-dependencies
2. Использование включает в себя "жестко закодированные" пути к файлам задач
- include: ../../common/tasks/login.yml
Это очень хорошо работало в коротком тестовом учебнике, которое я только что сделал. Имейте в виду, вы также можете использовать параметры и т.д. В том числе.
Смотрите: https://docs.ansible.com/playbooks_roles.html#task-include-files-and-encouraging-reuse
Надеюсь, я правильно понял этот вопрос, и это помогает.