Esteban, miembro de este equipo, nos ha hecho el favor de redactar esta sección ya que conoce muy bien el tema.
Puede escribir un libro de jugadas simple en un archivo muy grande, y la mayoría de los usuarios aprenden primero el enfoque de un solo archivo. Sin embargo, dividir las tareas en diferentes archivos es una forma excelente de organizar conjuntos complejos de tareas y reutilizarlos. Los artefactos más pequeños y distribuidos le permiten reutilizar las mismas variables, tareas y jugadas en varios libros de jugadas para abordar diferentes casos de uso. Puede usar artefactos distribuidos en varios libros de jugadas para padres o incluso varias veces dentro de un libro de jugadas. Por ejemplo, es posible que desee actualizar su base de datos de clientes como parte de varios libros de jugadas diferentes. Si coloca todas las tareas relacionadas con la actualización de su base de datos en un archivo de tareas, puede reutilizarlas en muchos libros de jugadas y mantenerlas en un solo lugar.
- Creación de roles y archivos reutilizables
- Reutilizar los libros de jugadas
-
Reutilización de archivos y roles
- Incluye: reutilización dinámica
- Importaciones: static reutilizar
- Comparación de inclusiones e importaciones: dinámicas y static reutilizar
-
Reutilización de tareas como controladores
- Activación de controladores incluidos (dinámicos)
- Activando importados (static) manipuladores
Creación de roles y archivos reutilizables
Ansible ofrece cuatro artefactos distribuidos y reutilizables: archivos de variables, archivos de tareas, libros de jugadas y roles.
- Un archivo de variables contiene solo variables.
- Un archivo de tarea contiene solo tareas.
- Un libro de jugadas contiene al menos una obra de teatro y puede contener variables, tareas y otro contenido. Puede reutilizar libros de jugadas estrictamente enfocados, pero solo puede reutilizarlos estáticamente, no dinámicamente.
- Un rol contiene un conjunto de tareas relacionadas, variables, valores predeterminados, controladores e incluso módulos u otros complementos en un árbol de archivos definido. A diferencia de los archivos de variables, los archivos de tareas o los libros de jugadas, los roles se pueden cargar y compartir fácilmente a través de Ansible Galaxy. Ver Roles para obtener detalles sobre la creación y el uso de roles.
Nuevo en la versión 2.4.
Reutilizar los libros de jugadas
Puede incorporar varios libros de jugadas en un libro de jugadas principal. Sin embargo, solo puede usar importaciones para reutilizar los libros de jugadas. Por ejemplo:
-import_playbook: webservers.yml -import_playbook: databases.yml
La importación incorpora libros de jugadas en otros libros de jugadas de forma estática. Ansible ejecuta las jugadas y las tareas en cada libro de jugadas importado en el orden en que se enumeran, como si se hubieran definido directamente en el libro de jugadas principal.
Reutilización de archivos y roles
Ansible ofrece dos formas de reutilizar archivos y roles en un libro de jugadas: dinámico y static.
-
Para reutilización dinámica, agregue un
include_*
tarea en la sección de tareas de una obra de teatro:- include_role
- include_tasks
- include_vars
-
Para static reutilizar, agregar un
import_*
tarea en la sección de tareas de una obra de teatro:- import_role
- import_tasks
Las instrucciones de inclusión e importación de tareas se pueden utilizar con una profundidad arbitraria.
Todavía puedes usar el desnudo roles palabra clave en el nivel de juego para incorporar un rol en un libro de jugadas estáticamente. Sin embargo, el desnudo incluir La palabra clave, que alguna vez se usó tanto para archivos de tareas como para inclusiones a nivel de libro de jugadas, ahora está en desuso.
Incluye: reutilización dinámica
Incluir roles, tareas o variables los agrega a un libro de jugadas de forma dinámica. Los procesos de Ansible incluyeron archivos y roles a medida que aparecen en un libro de jugadas, por lo que las tareas incluidas pueden verse afectadas por los resultados de tareas anteriores dentro del libro de jugadas de nivel superior. Los roles y tareas incluidos son similares a los controladores: pueden ejecutarse o no, según los resultados de otras tareas en el manual de estrategias de nivel superior.
La principal ventaja de usar include_*
declaraciones está en bucle. Cuando se usa un bucle con una inclusión, las tareas o el rol incluidos se ejecutarán una vez para cada elemento del bucle.
Puede pasar variables a inclusiones. Ver Precedencia de variables: ¿Dónde debo poner una variable? para obtener más detalles sobre la herencia y la precedencia de las variables.
Importaciones: static reutilizar
La importación de roles, tareas o libros de jugadas los agrega a un libro de jugadas de forma estática. Ansible preprocesa archivos y roles importados antes de ejecutar cualquier tarea en un libro de jugadas, por lo que el contenido importado nunca se ve afectado por otras tareas dentro del libro de jugadas de nivel superior.
Puede pasar variables a las importaciones. Debe pasar variables si desea ejecutar un archivo importado más de una vez en un libro de jugadas. Por ejemplo:
tasks:-import_tasks: wordpress.yml vars:wp_user: timmy -import_tasks: wordpress.yml vars:wp_user: alice -import_tasks: wordpress.yml vars:wp_user: bob
Ver Precedencia de variables: ¿Dónde debo poner una variable? para obtener más detalles sobre la herencia y la precedencia de las variables.
Comparación de inclusiones e importaciones: dinámicas y static reutilizar
Cada enfoque para reutilizar artefactos Ansible distribuidos tiene ventajas y limitaciones. Puede elegir la reutilización dinámica para algunos libros de jugadas y static reutilización para otros. Aunque puede utilizar tanto dinámicos como static reutilizar en un solo libro de jugadas, es mejor seleccionar un enfoque por libro de jugadas. Mezclar static y la reutilización dinámica puede introducir errores difíciles de diagnosticar en sus libros de jugadas. Esta tabla resume las principales diferencias para que pueda elegir el mejor enfoque para cada libro de jugadas que cree.
Incluir_* |
Importar_* |
|
---|---|---|
Tipo de reutilización |
Dinámica |
Estático |
Cuando se procesa |
En tiempo de ejecución, cuando se encuentra |
Preprocesado durante el análisis del libro de jugadas |
Tarea o juego |
Todo incluye son tareas |
|
Opciones de tareas |
Aplicar solo para incluir la tarea en sí |
Aplicar a todas las tareas secundarias en la importación |
Llamando desde bucles |
Ejecutado una vez para cada elemento de bucle |
No se puede usar en un bucle |
Utilizando |
Las etiquetas dentro incluyen no enumeradas |
Todas las etiquetas aparecen con |
Utilizando |
Tareas dentro de incluye no enumeradas |
Todas las tareas aparecen con |
Notificar a los manipuladores |
No se pueden activar controladores dentro de las inclusiones |
Puede activar manipuladores importados individuales |
Utilizando |
No se puede comenzar en tareas dentro de incluye |
Puede comenzar en tareas importadas |
Usar variables de inventario |
Poder |
No poder |
Con libros de jugadas |
No |
Puede importar libros de jugadas completos |
Con archivos de variables |
Puede incluir archivos de variables |
Usar |
Nota
- También hay grandes diferencias en el consumo de recursos y el rendimiento, las importaciones son bastante ágiles y rápidas, mientras que las inclusiones requieren mucha gestión y contabilidad.
Reutilización de tareas como controladores
También puede utilizar inclusiones e importaciones en el Controladores: ejecutar operaciones sobre el cambio sección de un libro de jugadas. Por ejemplo, si desea definir cómo reiniciar Apache, solo tiene que hacerlo una vez para todos sus libros de jugadas. Podrías hacer un restarts.yml
archivo que se parece a:
# restarts.yml-name: Restart apache ansible.builtin.service:name: apache state: restarted -name: Restart mysql ansible.builtin.service:name: mysql state: restarted
Puede activar controladores desde una importación o una inclusión, pero el procedimiento es diferente para cada método de reutilización. Si incluye el archivo, debe notificar a la inclusión en sí, que desencadena todas las tareas en restarts.yml
. Si importa el archivo, debe notificar las tareas individuales dentro de restarts.yml
. Puede mezclar tareas y controladores directos con tareas y controladores incluidos o importados.
Activación de controladores incluidos (dinámicos)
Las inclusiones se ejecutan en tiempo de ejecución, por lo que el nombre de la inclusión existe durante la ejecución de la reproducción, pero las tareas incluidas no existen hasta que se activa la inclusión. Usar el Restart apache
tarea con reutilización dinámica, consulte el nombre de la inclusión en sí. Este enfoque activa todas las tareas del archivo incluido como controladores. Por ejemplo, con el archivo de tareas que se muestra arriba:
-name: Trigger an included (dynamic) handler hosts: localhost handlers:-name: Restart services include_tasks: restarts.yml tasks:-command:"true"notify: Restart services
Activando importados (static) manipuladores
Las importaciones se procesan antes de que comience la reproducción, por lo que el nombre de la importación ya no existe durante la ejecución de la reproducción, pero sí existen los nombres de las tareas importadas individuales. Usar el Restart apache
tarea con static reutilizar, consulte el nombre de cada tarea o tareas dentro del archivo importado. Por ejemplo, con el archivo de tareas que se muestra arriba:
-name: Trigger an imported (static) handler hosts: localhost handlers:-name: Restart services import_tasks: restarts.yml tasks:-command:"true"notify: Restart apache -command:"true"notify: Restart mysql
Ver también
- Módulos de utilidades
-
Documentación de la
include*
yimport*
módulos discutidos aquí. - Trabajar con libros de jugadas
-
Revise las características básicas del idioma de Playbook
- Usando Variables
-
Todo sobre las variables en los libros de jugadas
- Condicionales
-
Condicionales en los libros de jugadas
- Bucles
-
Bucles en los libros de jugadas
- Consejos y trucos
-
Consejos y trucos para libros de jugadas
- Guía del usuario de Galaxy
-
Cómo compartir roles en galaxy, gestión de roles
- Ejemplos de GitHub Ansible
-
Archivos completos del libro de jugadas de la fuente del proyecto de GitHub
- Lista de correo
-
¿Preguntas? ¿Ayudar? Ideas? Pasa por la lista de Grupos de Google
Sección de Reseñas y Valoraciones
Recuerda que puedes dar visibilidad a esta sección si si solucionó tu problema.