when tutorial run playbook how files español define arquitectura ansible ansible-playbook

tutorial - arquitectura ansible



incluir tareas de otro rol en el libro de jugadas ansible (2)

Estoy diseñando una especie de libreta de jugadas con tareas individuales

así que en el repositorio de roles habitual, tengo algo como:

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

my main.yml en custom_stuff_workflow luego contiene algo como:

--- - include: login.yml - include: A.yml - include: C.yml - include: save.yml - include: logout.yml

y este en el otro flujo de trabajo:

--- - include: login.yml - include: B.yml - include: A.yml - include: D.yml - include: save.yml - include: logout.yml

No puedo encontrar una manera de hacerlo de una manera natural: una forma que funcionó fue tener todas las tareas en un solo rol y etiquetar las tareas relevantes e incluir un flujo de trabajo personalizado

El problema que tengo con eso es que las etiquetas no se pueden configurar en el libro de jugadas de llamadas: solo se debe configurar en la línea de comandos, ya que estoy distribuyendo este repositorio ansible con muchas personas en la empresa, no puedo confiar en las invocaciones de la línea de comandos ( Sería bueno tener un encabezado #! en yml para ser procesado por el comando ansible-playbook )

También podría copiar las tareas relevantes (dentro de lo común en el árbol anterior) en cada flujo de trabajo, pero no quiero repetirlas

¿Alguien puede ver una solución para lograr lo que me gustaría sin repetir las tareas en diferentes roles?

Supongo que la piedra angular de mi problema es que defino las tareas como individuales y no parece natural en ansible ...

Muchas gracias

PD: tenga en cuenta que las tareas en el flujo de trabajo deben realizarse en un orden específico y los únicos pasos naturales para abstraer serían el inicio de sesión y guardar / cerrar sesión

PPS: He visto esta pregunta ¿Cómo llamo a un rol desde otro rol en Ansible? pero no resuelve mi problema ya que invoca un rol completo y no un subconjunto de las tareas en un rol


En caso de que alguien más se encuentre con esto, la versión 2.2 de Ansible ahora tiene include_role . Ahora puede hacer algo como esto.

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

Consulte la documentación here .


Sí, a Ansible realmente no le gustan las tareas como componentes individuales. Creo que quiere que uses roles, pero puedo ver por qué no quieres usar roles para tareas simples y reutilizables.

Actualmente veo dos posibles soluciones:

1. Convierta esos archivos de tareas en roles y use dependencias

Entonces podría hacer algo como esto en, por ejemplo, custom_stuff_workflow

dependencies: - { role: login }

Ver: https://docs.ansible.com/playbooks_roles.html#role-dependencies

2. Utilice include con rutas "codificadas" a los archivos de tareas

- include: ../../common/tasks/login.yml

Eso funcionó bastante bien en un breve libro de jugadas de prueba que acabo de hacer. Tenga en cuenta que también puede usar parámetros, etc., en esos incluye.

Ver: http://docs.ansible.com/ansible/latest/playbooks_reuse.html

Espero haber entendido esa pregunta correctamente y esto ayude.