it-swarm.com.ru

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

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

так что в обычных ролях репо у меня что то типа

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

мой 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

Проблема, с которой я столкнулся, заключается в том, что теги нельзя устанавливать в вызывающей пьесе: их нужно устанавливать только в командной строке, так как я распространяю этот доступный репо среди многих сотрудников компании, я не могу полагаться на вызовы командной строки ( было бы неплохо иметь заголовок #! в yml для обработки командой ansible-playbook)

Я также мог бы скопировать соответствующие задачи (внутри общего в вышеупомянутом дереве) в каждом рабочем процессе, но я не хочу повторять их вокруг

Может кто-то найти решение для достижения того, что я хотел бы, не повторяя задачи в разных ролях?

Я предполагаю, что краеугольным камнем моей проблемы является то, что я определяю задачи как индивидуальные, и это выглядит неестественно в ANSIBLE ...

Большое спасибо

PS: обратите внимание, что задачи в рабочем процессе должны выполняться в определенном порядке, и единственными естественными шагами для абстрагирования будут вход в систему и сохранение/выход из системы.

PPS: я видел этот вопрос Как я называю роль из другой роли в Ansible? , но это не решает мою проблему, так как вызывает полную роль, а не подмножество задач в роль

63
Louis

Просто, если кто-то столкнется с этим, версия 2.2 Ansible теперь имеет include_role. Теперь вы можете сделать что-то подобное.

---
- name: do something
  include_role:
    name: common
    tasks_from: login

Ознакомьтесь с документацией здесь .

46
uLan

Да, 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

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

45
tehK