Sin embargo, hay casos en los que es posible que necesite realizar una acción específica en la máquina local en lugar de hosts remotos. En tales casos, una característica como local_accion Viene muy bien.
Esta guía le mostrará cómo trabajar con el módulo ansible local_action para ejecutar tareas localmente.
Cómo funciona el módulo ansible local_action
Como se mencionó anteriormente, al crear libros de jugadas, el objetivo suele ser hosts remotos. Si necesita realizar una tarea para hosts que no sean los hosts remotos, puede usar módulos Ansible como Local_Action y Delegate_TO.
Delegate_to es útil cuando necesita establecer una tarea para ejecutar en un host específico. Apunta el módulo delegado_to a los hosts de destino especificando su nombre de host o dirección IP.
Local_action, por otro lado, ejecutará las tareas establecidas solo en la máquina local. Es similar a establecer el valor de Delegate_TO en Localhost o 127.0.0.1
Delegate_to: localhostEl módulo local_action es conveniente cuando primero necesita realizar una tarea en la máquina local antes de enviarla a sistemas remotos. Estos son principalmente comandos personalizados o de shell dentro del sistema local.
La mejor manera de entender cómo usar el módulo local_action es utilizando los libros de jugadas de ejemplo.
Casos de uso de ejemplo de Ejemplo de Local_Action
Para simplificar, intentaremos mantener los libros de jugadas cortos y no demasiado complejos.
Antes de centrarnos en los libros de jugadas, describamos nuestra configuración Ansible, que nos permitirá comprender cómo funciona el módulo local_action.
En nuestra configuración de ejemplo, tenemos un Ubuntu 20.Servidor 04 que tiene Ansible instalado. Esto servirá como el nodo de control Ansible.
A continuación, tenemos tres máquinas remotas: un Ubuntu 21.04 servidor, un servidor Debian 11 y un servidor CentOS 8.
Tenemos el archivo de inventario Ansible que contiene las direcciones IP de los tres hosts en el nodo de control.
Una vez que ejecutamos un libro de jugadas, se ejecuta en los tres anfitriones.
NOTA: Limitaremos la salida a un solo host para evitar la complejidad y la confusión.
Local_action usando un módulo
Considere el siguiente libro de jugadas:
---En el primer bloque, especificamos los hosts de destino para ejecutar las tareas a menos que se especifique lo contrario.
El libro de jugadas continúa deshabilitando la recopilación de hechos sobre los hosts remotos al establecer el bloque Cateo_Facts en No.
Para tener el permiso de lectura y escritura, establecemos el bloqueo en verdad.
En los bloques posteriores, definimos dos tareas:
La primera tarea crea un archivo de los archivos de registro del sistema local. Deleguamos la tarea de ejecutar en el sistema local utilizando el bloque local_actiob. En nuestro ejemplo, utilizamos un módulo comunitario que podemos instalar usando el comando:
Ansible-Galaxy Collection Instalar Community.generalLa siguiente tarea copia el archivo de registro del sistema local a la ruta especificada en el host remoto.
Guardar el libro de jugadas y ejecutarlo usando el comando:
ansible-playbook local_action.YMLAl finalizar con éxito, debería ver una salida similar a la que se muestra a continuación:
Local_action usando un comando shell
El siguiente ejemplo le muestra cómo ejecutar los comandos de shell usando el módulo local_action.
---En el libro de jugadas de ejemplo anterior, usamos el módulo Local_Action para ejecutar un comando shell. El comando shell cuenta el número de archivos y directorios guardados en una variable.
Luego usamos el módulo de depuración para imprimir el número de archivos tanto en el control remoto como en localhost.
Ejecute el archivo como:
Ansible-Playbook FileCount.YMLLocal_action con run_once
Puede usar el módulo local_action junto con el parámetro run_once.
---El libro de jugadas anterior ejecutará el bloque local_action una vez en el sistema local.
Conclusión
El módulo local_action es útil cuando desea delegar una tarea para ejecutarse en la máquina local. Puede usarlo tanto con un módulo ansible o un comando shell.