Ansible local_action

Ansible local_action
En la mayoría de las situaciones, usamos Ansible para administrar y configurar hosts remotos desde un solo nodo de control. Por lo tanto, al crear libros de jugadas, es con el entendimiento que ejecutarán en las máquinas remotas que especificamos en el bloque del host de los libros de jugadas.

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: localhost

El 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:

---
- Anfitriones: todos
gateo_facts: no
hecho realidad
tareas:
- Nombre: ArchivethelocallogFiles
Local_action:
Módulo: comunidad.general.archivo
ruta: /var /log
Dest:/var/log/log.alquitrán.GZ
Formato: GZ
Force_archive: verdadero
- Nombre: copylogarchivetoremotehost
ansible.incorporado.Copiar:
src:/var/log/log.alquitrán.GZ
Dest: /Home /Ubuntu

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.general

La 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.YML

Al 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.

---
- Anfitriones: todos
gateo_facts: no
hecho realidad
tareas:
- Nombre: Countfiles y Directororios en el control remoto
Shell: LS-La ~ | WC -L
Registrarse: remota_files
- Nombre: PrintremoteFiles
depurar:
Msg: 'remotos_files.stdout '
- Nombre: Countfiles y Directororios en localmachine
Local_action: shellls-la ~ | WC -L
Registrarse: Local_Files
- Nombre: PrintLocalFiles
depurar:
Msg: 'local_files.stdout '

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.YML

Local_action con run_once

Puede usar el módulo local_action junto con el parámetro run_once.

---
- Anfitriones: todos
gateo_facts: no
hecho realidad
tareas:
- Nombre: StopTheApacheserver
Local_action:
Módulo: Ansible.incorporado.servicio
Nombre: httpd
Estado: detenido
run_once: verdadero

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.