tower - task ansible
ansible: incluir papel en un papel? (4)
AFAIK, no puedes. Para eso están las dependencias.
Si desea evitar dependencias (porque, por ejemplo, desea que el ''rol X'' se ejecute entre dos tareas), puede hacerlo en el propio libro de jugadas si cree que las tareas están relacionadas:
roles / webtier / tareas / main.yml:
- shell: echo ''hello''
- include: webtier.yml
- shell: echo ''role done''
En general, depende de lo que intentes hacer exactamente.
Pero en su ejemplo, ''todavía ocupado'' parece implicar que los
rolebooks/some_role
todavía se están ejecutando, lo que no es posible (no hay concurrencia aquí).
Obviamente, también puede secuenciar roles en un libro de jugadas maestro (que probablemente es lo que ya hace):
- name: Polite foo stuff
hosts: foo_hosts
roles:
- say_hello
- rolebooks/some_role
- say_bye
- name: Unpolite foo stuff
hosts: !foo_hosts
roles:
- rolebooks/some_role
¿Es posible reutilizar un rol en un rol? No me refiero a definir una dependencia en el archivo meta / main.yml de un rol, sino al incluir el rol en las tareas / main.yml de otro rol directamente.
Por ejemplo, defino un par de roles básicos en los libros de roles y algunos roles más de alto nivel en roles. Quiero que los roles de alto nivel incluyan algunos de los roles básicos además de algunas tareas específicas.
playbooks/
rolebooks/
some_role/
roles/
webtier/
tasks/
main.yml
En playbooks / roles / webtier / tareas / main.yml:
- shell: echo ''hello''
- { role: rolebooks/some_role }
- shell: echo ''still busy''
Gracias
Le agradezco que haya dicho que no usa metadependencias, pero la mejor solución que he encontrado es crear un rol que solo contenga meta / dependency.yml
Esto permite incluir cualquier número de roles en el orden correcto.
Asegúrese de establecer allow_duplicates: sí
---
allow_duplicates: yes
dependencies:
- { role: app-install-rpms, tags: [''rpms''] }
- { role: app-java-config, tags: [''config''] }
- { role: app-directories, tags: [''dirs''] }
- { role: app-config-site_management, tags: [''site_management''] }
- { role: app-config-initd, tags: [''initd''] }
- { role: tomcat-boapp, tags: [''config''] }
Esto nos permite esencialmente llamar un rol desde un rol.
No puedes, pero puedes hacer algo similar.
Para un diseño de:
roles/
...
common/tasks/main.yml
nginx/tasks/main.yml
...
En
nginx/tasks/main.yml
, puede llamar a su tarea común:
- name: Call the ''common'' role to do some general setup
include: ../../common/tasks/main.yml
Tenga en cuenta que debido a que no está utilizando la estructura de importación típica, es posible que se encuentre con alguna "rareza", como que las variables predeterminadas del rol no sean accesibles a menos que haya incluido el rol de manera estándar anteriormente.