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.