vars tower commands ansible ansible-playbook

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


Antigua pregunta PERO para el registro : use Ansible 2.2+ y estará listo para include_role . Exactamente para este mismo propósito ... vea la documentación here .

Echa un vistazo a import_role también ... ver documentación here


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.