Как использовать роль из многофайловой пьесы
У меня есть сборник пьес, организованный следующим образом (упрощенный ради этого вопроса):
├── 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 ответ
Итак, я нашел два способа решения этой проблемы.
- разделите роль на две (или более) части и используйте роль галактики в качестве зависимости от того, что ей нужно подготовить. В общем, мне нравится эта идея, но в моем конкретном случае использования я не делаю, поскольку мне нужно было бы создать 3 роли для чего-то действительно единого.
- Используйте модуль 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