Подтвердить что ты не робот

Включать задания из другой роли в недоступном для просмотра

Я разрабатываю своего рода библиотеку с индивидуальными задачами

поэтому в обычных ролях 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?, но она не решает мою проблему, так как она вызывает полный роль, а не подмножество задач в роли

4b9b3361

Ответ 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

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