включить задачи из другой роли в 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 57

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

Я надеюсь, что правильно понял этот вопрос, и это помогает.