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

import_playbook no puede ser una tarea

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 --list-tags

Las etiquetas dentro incluyen no enumeradas

Todas las etiquetas aparecen con --list-tags

Utilizando --list-tasks

Tareas dentro de incluye no enumeradas

Todas las tareas aparecen con --list-tasks

Notificar a los manipuladores

No se pueden activar controladores dentro de las inclusiones

Puede activar manipuladores importados individuales

Utilizando --start-at-task

No se puede comenzar en tareas dentro de incluye

Puede comenzar en tareas importadas

Usar variables de inventario

Poder include_*: inventory_var

No poder import_*: inventory_var

Con libros de jugadas

No include_playbook

Puede importar libros de jugadas completos

Con archivos de variables

Puede incluir archivos de variables

Usar vars_files: importar variables

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* y import* 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