Pregunta ¿Cuál es la diferencia entre include_tasks y import_tasks?


En Ansible 2.4, el include módulo está en desuso. En su lugar, se envía con dos módulos de reemplazo, import_tasks y include_tasks. Pero tienen descripciones muy similares:

  • include_tasks: Incluye un archivo con una lista de tareas que se ejecutarán en el libro de jugadas actual.
  • import_tasks: Importa una lista de tareas que se agregarán al libro de jugadas actual para su posterior ejecución.

¿Cuándo debo usar el primero y cuándo debo usar el último?


35
2017-09-24 16:38


origen


(También: la advertencia de desaprobación se refiere a tareas "dinámicas" y "estáticas". Leí los documentos pero no los entendí). - Ben S


Respuestas:


Hay un poco de este tema en la documentación:

La principal diferencia es:

Todos import* las declaraciones se procesan previamente en el momento en que se analizan los libros de jugadas.
  Todos include* Las declaraciones se procesan como se encontraron durante la ejecución del libro de jugadas.

Asi que import es estático, include es dinamico

Desde mi experiencia, deberías usar import cuando se trata de "unidades" lógicas. Por ejemplo, separe una larga lista de tareas en archivos de subtareas:

main.yml:

- import_tasks: prepare_filesystem.yml
- import_tasks: install_prerequisites.yml
- import_tasks: install_application.yml

Pero tu usarías include para lidiar con diferentes flujos de trabajo y tomar decisiones basadas en algunos datos recopilados dinámicamente:

Requisitos previos de instalación:

- include_tasks: prerequisites_{{ ansible_os_family | lower }}.yml

44
2017-09-25 06:30



He encontrado este enlace muy útil: docs.ansible.com/ansible/latest/… Indica un caso en el que la importación y la inclusión se comportan de manera diferente: un 'cuándo' condicional donde las tareas en el archivo pueden cambiar los criterios utilizados para determinar la importación. Con import_tasks, cada tarea verifica los criterios, por lo que el comportamiento cambia cuando los criterios cambian. Con include_tasks, las tareas están presentes o no en función de si la condición se evaluó como verdadera cuando se ejecutó la sentencia include_tasks. Si entiendo bien ... - Ethel Evans
¿Cuál fue el comportamiento de include? Si estuviéramos usando include haría import_tasks ser el equivalente? - Andy Shinn
include tenía static: yes (se comportó como import_tasks), y static: no (me gusta include_tasks). - Konstantin Suvorov
¿Cuál es el valor predeterminado para static? - Andy Shinn
static es None por defecto: Desde Ansible 2.0, las tareas incluyen dinámicas y se comportan más como tareas reales. Esto significa que se pueden enlazar, omitir y usar variables de cualquier fuente. Ansible intenta detectar esto automáticamente, pero puede usar la directiva estática (que se agregó en Ansible 2.1) para omitir la autodetección. - Konstantin Suvorov