Как использовать роль из многофайловой пьесы

У меня есть сборник пьес, организованный следующим образом (упрощенный ради этого вопроса):

├── deploy.yml
├── hosts
├── requirements.yml
├── roles
│   └── web
│       ├── meta
│       │   └── main.yml
│       └── tasks
│           └── main.yml
└── site.retry

Мой упрощенный deploy.yml является:

---
- name: Everything I need
  hosts: somewhere
  roles:
    - web

И мой упрощенный roles/web/tasks/main.yml является

---
- name: Various things that work
  become: yes
  [whatever]

- name: the thing that I have a problem with
  become: yes
  davidedelvento.nbextension: name=foo state=present

Это не с:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

Поэтому я попытался изменить roles/web/tasks/main.yml в

---
- name: Various things that work
  become: yes
  [whatever]

- name: the thing that I have a problem with
  become: yes
  roles:
    - { role: davidedelvento.nbextension, name: foo, state: present}

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

Однако мне не ясно, как я могу достичь того, что я хочу, а именно делать то, что делает nbextension в данный момент времени. Я мог бы переместить эту роль из roles/web/tasks/main.yml в roles/web/meta/main.yml и это работает, но выполняется до Various things that work и мне нужно, чтобы он был выполнен после. Как это сделать?

Обратите внимание, что я написал nbextension, однако та же проблема возникает с аналогичными другими ролями из галактики.

РЕДАКТИРОВАТЬ: Обратите внимание также, что расширение установлено правильно и может использоваться из автономного однофайлового плейбука, такого как

---
- name: Example
  hosts: all
  become: yes
  roles:
    - { role: davidedelvento.nbextension, name: foo, state: present}

однако мне нужно, чтобы он "интегрировался" в более крупный проект, описанный выше для роли "веб" (у меня больше ролей, которые я не показываю)

РЕДАКТИРОВАТЬ 2: обратите внимание, что роль галактики в этом вопросе была переименована в jupyterextension, но, как я уже сказал, проблема (и решение) одинакова для любой роли

1 ответ

Итак, я нашел два способа решения этой проблемы.

  1. разделите роль на две (или более) части и используйте роль галактики в качестве зависимости от того, что ей нужно подготовить. В общем, мне нравится эта идея, но в моем конкретном случае использования я не делаю, поскольку мне нужно было бы создать 3 роли для чего-то действительно единого.
  2. Используйте модуль include_role, с оговоркой, что на данный момент он "помечен как предварительный просмотр", а именно, он не гарантирует наличие обратно совместимого интерфейса. Однако это работает довольно хорошо для моей текущей настройки:

- name: the thing that I have not a problem with anymore become: yes include_role: name: davidedelvento.nbextension with_items: - foo - bar loop_control: loop_var: name

Другие вопросы по тегам