Módulo de Acción Local de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Bienvenido al Laboratorio del Módulo de Acción Local de Ansible. En este laboratorio, profundizarás en el uso del módulo de acción local de Ansible. El módulo de acción local te permite ejecutar tareas en la máquina de control donde se está ejecutando Ansible. Esto es útil cuando necesitas realizar operaciones localmente, como ejecutar comandos de shell o scripts.

¡Comencemos!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/AnsibleSetupandConfigurationGroup(["Ansible Setup and Configuration"]) ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible/AnsibleSetupandConfigurationGroup -.-> ansible/local_action("Delegate Action Locally") ansible/ModuleOperationsGroup -.-> ansible/command("Execute Commands") ansible/ModuleOperationsGroup -.-> ansible/debug("Test Output") ansible/ModuleOperationsGroup -.-> ansible/shell("Execute Shell Commands") subgraph Lab Skills ansible/local_action -.-> lab-290189{{"Módulo de Acción Local de Ansible"}} ansible/command -.-> lab-290189{{"Módulo de Acción Local de Ansible"}} ansible/debug -.-> lab-290189{{"Módulo de Acción Local de Ansible"}} ansible/shell -.-> lab-290189{{"Módulo de Acción Local de Ansible"}} end

Ejecutando un Comando Simple Localmente

En este paso, aprenderás a usar el módulo de acción local de Ansible para ejecutar un comando simple en la máquina de control. Esto te ayudará a entender el uso básico y la sintaxis del módulo.

Primero, complete el archivo /home/labex/project/execute_local_command.yml.
Agregue el siguiente contenido al archivo de playbook:

- name: Ejecutando un Comando Simple Localmente
  gather_facts: false
  hosts: localhost

  tasks:
    - name: Imprimir un mensaje localmente
      local_action:
        module: command
        cmd: echo "Hello, World!"
      register: result

    - name: Depurar la salida
      debug:
        var: result.stdout
  • gather_facts: Esto especifica si Ansible debe recopilar información sobre los hosts objetivo. En este caso, está establecido en false, lo que significa que no se recopilarán datos.
  • hosts: Esto especifica el host objetivo en el que se ejecutará el playbook. En este caso, el playbook se ejecutará en el host local porque el host objetivo es localhost.
  • tasks: Esta es una lista de tareas que se ejecutarán.
  • local_action: Esto indica que la acción debe realizarse localmente en la máquina de control donde se está ejecutando Ansible.
  • module: Esto especifica el módulo de Ansible que se utilizará para la acción. En este caso, es el módulo command.
  • cmd: Este es el comando real que se ejecutará. En este caso, es el comando de shell echo "Hello, World!", que imprimirá el mensaje "Hello, World!" en la consola.
  • register: Esto registra la salida del comando en la variable result para su posterior uso en el playbook.
  • debug: Este es el módulo de Ansible utilizado para imprimir información de depuración.
  • var: Este es un parámetro del módulo debug que especifica la variable que se va a depurar. En este caso, es result.stdout, que contiene la salida estándar del comando ejecutado en la tarea anterior.

En resumen, este playbook ejecuta un comando simple echo "Hello, World!" localmente en la máquina de control, registra la salida y luego imprime la salida utilizando el módulo debug.

Luego, muestre la salida del comando en el playbook de Ansible.

ansible-playbook /home/labex/project/execute_local_command.yml

Salida de ejemplo:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Print a message locally] *************************************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "Hello, World!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Aquí "result.stdout": "Hello, World!" es la salida del comando echo "Hello, World!".

Ejecutando un Comando con Sustitución de Variables

En este paso, profundizarás tu comprensión del módulo de acción local incorporando la sustitución de variables. Esto te permitirá cambiar dinámicamente el comando que se está ejecutando en función de las variables definidas en tu playbook.

Primero, complete el archivo /home/labex/project/execute_command_with_variable_substitution.yml.
Agregue el siguiente contenido al archivo de playbook:

- name: Ejecutando un Comando con Sustitución de Variables
  gather_facts: false
  hosts: localhost
  vars:
    message: "Hello, Ansible!"

  tasks:
    - name: Imprimir un mensaje con sustitución de variables
      local_action:
        module: command
        cmd: echo "{{ message }}"
      register: result

    - name: Depurar la salida
      debug:
        var: result.stdout
  • vars: Esta sección se utiliza para definir variables. En este playbook, define una variable llamada message con el valor "Hello, Ansible!".
  • local_action: Esto indica que la acción debe realizarse localmente en la máquina de control donde se está ejecutando Ansible.
  • module: Esto especifica el módulo de Ansible que se utilizará para la acción. En este caso, es el módulo command.
  • cmd: Este es el comando real que se ejecutará. En este caso, es el comando de shell echo "{{ message }}", donde {{ message }} se reemplaza con el valor de la variable message definida anteriormente.
  • register: Esto registra la salida del comando en la variable result para su posterior uso en el playbook.
  • debug: Este es el módulo de Ansible utilizado para imprimir información de depuración.
  • var: Este es un parámetro del módulo debug que especifica la variable que se va a depurar. En este caso, es result.stdout, que contiene la salida estándar del comando ejecutado en la tarea anterior.

En resumen, este playbook ejecuta el comando echo "{{ message }}" localmente en la máquina de control, donde {{ message }} se reemplaza con el valor de la variable message definida en la sección vars. Registra la salida del comando y luego imprime la salida utilizando el módulo debug.

Luego, muestre la salida del comando en el playbook de Ansible.

ansible-playbook /home/labex/project/execute_command_with_variable_substitution.yml

Salida de ejemplo:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Print a message with variable substitution] ******************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "Hello, Ansible!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Aquí "result.stdout": "Hello, Ansible!" es la salida del comando echo "{{ message }}".

Ejecutando una Acción Local Compleja

En este paso, explorarás un uso más complejo del módulo de acción local de Ansible. Ejecutarás un script de shell localmente y pasarás argumentos al script.

Primero, complete el archivo /home/labex/project/execute_complex_local_action.yml.
Agregue el siguiente contenido al archivo de playbook:

- name: Ejecutando una Acción Local Compleja
  gather_facts: false
  hosts: localhost

  tasks:
    - name: Ejecutar un script de shell con argumentos
      local_action:
        module: shell
        cmd:./script.sh 5 7
      register: result

    - name: Depurar la salida
      debug:
        var: result.stdout
  • local_action: Esto indica que la acción debe realizarse localmente en la máquina de control donde se está ejecutando Ansible.
  • module: Esto especifica el módulo de Ansible que se utilizará para la acción. En este caso, es el módulo shell.
  • cmd: Este es el comando de shell real que se ejecutará. En este caso, es ./script.sh 5 7, que ejecuta un script de shell llamado script.sh con los argumentos 5 y 7.
  • register: Esto registra la salida del comando en la variable result para su posterior uso en el playbook.
  • debug: Este es el módulo de Ansible utilizado para imprimir información de depuración.
  • var: Este es un parámetro del módulo debug que especifica la variable que se va a depurar. En este caso, es result.stdout, que contiene la salida estándar del comando ejecutado en la tarea anterior.

En resumen, este playbook ejecuta un script de shell script.sh con los argumentos 5 y 7 localmente en la máquina de control. Registra la salida del script y luego imprime la salida utilizando el módulo debug.

Consejos: Te hemos preparado este script de shell, está en el directorio /home/labex/project/ y se llama script.sh. La función de este script es calcular la suma de dos parámetros.

Luego, muestre la salida del comando en el playbook de Ansible.

ansible-playbook /home/labex/project/execute_complex_local_action.yml

Salida de ejemplo:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Local Action Module Challenge] *******************************************

TASK [Execute a shell script with arguments] ***********************************
changed: [localhost]

TASK [Debug the output] ********************************************************
ok: [localhost] => {
    "result.stdout": "La suma de 5 y 7 es 12."
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Aquí "result.stdout": "La suma de 5 y 7 es 12." es la salida del script ./script.sh 5 7.

Resumen

¡Felicitaciones por completar el Laboratorio del Módulo de Acción Local de Ansible! En este laboratorio, aprendiste a usar el módulo de acción local de Ansible para ejecutar comandos y scripts localmente. Comenzando con la ejecución de comandos simples, progresaste hasta incorporar la sustitución de variables y ejecutar scripts de shell complejos con argumentos.

Al completar este laboratorio, has adquirido valiosa experiencia en el uso del módulo de acción local para tareas que deben realizarse en la máquina de control. Sigue explorando Ansible y sus módulos para mejorar aún más tus capacidades de automatización.

¡Que disfrutes automatizando!