Módulo de Script 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

En este laboratorio, aprenderá a usar el módulo de script de Ansible para ejecutar scripts personalizados en hosts remotos. El módulo de Script le permite ejecutar scripts escritos en cualquier lenguaje de programación en los hosts destino, lo que le proporciona flexibilidad y opciones de personalización en sus tareas de automatización.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible/ModuleOperationsGroup -.-> ansible/debug("Test Output") ansible/ModuleOperationsGroup -.-> ansible/script("Run Scripts") ansible/ModuleOperationsGroup -.-> ansible/shell("Execute Shell Commands") subgraph Lab Skills ansible/debug -.-> lab-289411{{"Módulo de Script de Ansible"}} ansible/script -.-> lab-289411{{"Módulo de Script de Ansible"}} ansible/shell -.-> lab-289411{{"Módulo de Script de Ansible"}} end

Ejecutar un script simple

En este paso, ejecutará un script simple en un host remoto utilizando el módulo de script de Ansible.

Primero, cree un nuevo archivo de playbook de Ansible llamado /home/labex/project/script-module-playbook.yaml y abrálo en un editor de texto.
Agregue el siguiente contenido al archivo de playbook:

- hosts: localhost
  tasks:
    - name: Ejecutar un script simple
      script: /home/labex/project/simple_script.sh
      register: script_output

    - name: Mostrar la salida del script
      debug:
        var: script_output.stdout_lines
  • hosts: Esto especifica el host destino en el que se ejecutará el playbook. En este caso, el playbook se ejecutará en el host local porque el host destino es "localhost".
  • tasks: Esta es una lista de tareas que se ejecutarán.
  • name: Este es el nombre descriptivo de la tarea que identifica el propósito de la tarea.
  • script: Este es el comando real que la tarea ejecuta. Indica a Ansible que ejecute el script llamado "simple_script.sh" ubicado en el directorio "/home/labex/project/" en el host destino.
  • register: Esto registra la salida del script en la variable script_output 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 muestra la salida estándar del script de la tarea anterior. script_output.stdout_lines contiene cada línea de la salida del script.

En resumen, el principal propósito de este playbook es ejecutar un script en el host local y mostrar la salida estándar del script después de que se ejecute. La variable registrada script_output contiene la salida del script, que luego se imprime utilizando el módulo Debug.

Luego, cree un archivo de script simple llamado /home/labex/project/simple_script.sh con el siguiente contenido:

#!/bin/bash
echo "This is a simple script."

Asegúrese de que el archivo de script sea ejecutable (chmod +x simple_script.sh) y coloque el archivo de script en el directorio /home/labex/project/ especificado en el playbook.

Finalmente, ejecute el playbook con el siguiente comando:

chmod +x simple_script.sh
ansible-playbook script-module-playbook.yaml

Observe la salida del script mostrada en la salida de la ejecución del playbook.
Salida de ejemplo:

...
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Execute a simple script] *************************************************
changed: [localhost]

TASK [Display script output] ***************************************************
ok: [localhost] => {
    "script_output.stdout_lines": [
        "This is a simple script."
    ]
}

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

Aquí "This is a simple script." es la salida del script simple_script.sh.

Pasar variables a scripts

En este paso, aprenderá a pasar variables de su playbook de Ansible a los scripts ejecutados utilizando el módulo de Script.

Primero, modifique el archivo de playbook existente eliminando todo el contenido y agregando el siguiente contenido al archivo de playbook:

- hosts: localhost
  tasks:
    - name: Ejecutar script con una variable
      script: /home/labex/project/var_script.sh "{{ message }}"
      register: variable_script_output

    - name: Mostrar la salida del script con variable
      debug:
        var: variable_script_output.stdout_lines
  • script: Este es el comando real que la tarea ejecutará. Y {{ message }} es una variable que se pasa al script. Las llaves dobles indican que esta es una variable de Ansible y su valor se reemplazará dinámicamente durante la ejecución.
  • register: Esto registra la salida del script en la variable "variable_script_output" 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 parámetro del módulo debug muestra la salida estándar del script de la tarea anterior. variable_script_output.stdout_lines contiene cada línea de la salida del script.

En resumen, este playbook ejecuta un script en el host local, pasando una variable llamada "message" al script. La salida del script se registra en la variable variable_script_output y luego se imprime utilizando el módulo debug.

Luego, cree un archivo de script simple llamado /home/labex/project/var_script.sh con el siguiente contenido:

#!/bin/bash
echo $1

Asegúrese de que el archivo de script sea ejecutable (chmod +x var_script.sh) y coloque el archivo de script en el directorio /home/labex/project/ especificado en el playbook.

Finalmente, al pasar la variable message como variable adicional utilizando la opción -e al ejecutar el playbook.

chmod +x var_script.sh
ansible-playbook script-module-playbook.yaml -e "message=Hello,Ansible"

Observe la salida del script con el mensaje proporcionado.
Salida de ejemplo:

...
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Execute script with a variable] ******************************************
changed: [localhost]

TASK [Display variable script output] ******************************************
ok: [localhost] => {
    "variable_script_output.stdout_lines": [
        "Hello,Ansible"
    ]
}

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

Aquí "Hello,Ansible" es la salida del script simple_script.sh.

Manejar el fracaso del script

En este paso, aprenderá a manejar el fracaso del script cuando se ejecutan scripts utilizando el módulo de Script. Manejará los casos en los que el script devuelve un estado de salida no nulo, lo que indica un fracaso.

Primero, modifique el archivo de playbook existente eliminando todo el contenido y agregando el siguiente contenido al archivo de playbook:

- hosts: localhost
  tasks:
    - name: Ejecutar un script que falla
      script: /home/labex/project/failing_script.sh
      register: failing_script_output
      ignore_errors: yes

    - name: Manejar el fracaso del script
      debug:
        msg: "El script ha fallado. Realizando acción de recuperación."
      when: failing_script_output.failed
  • script: Este es el comando real que la tarea ejecutará.
  • register: Esto registra la salida del script en la variable "failing_script_output" para su posterior uso en el playbook.
  • ignore_errors: Este parámetro se establece en yes para permitir que Ansible siga ejecutando las tareas subsiguientes incluso si esta tarea de script falla. El fracaso se registrará en la variable failing_script_output.
  • debug: Este es el módulo de Ansible utilizado para imprimir información de depuración.
  • msg: Este parámetro del módulo debug imprime un mensaje que indica que el script ha fallado. Esta tarea solo se ejecutará cuando la tarea anterior (failing_script_output) haya fallado.
  • when: Esta condición asegura que esta tarea solo se ejecute cuando el script en la primera tarea ha fallado. Si el script tiene éxito, esta tarea se omitirá.

En resumen, este playbook intenta ejecutar un script que puede fallar. Si el script falla, el playbook maneja el fracaso imprimiendo un mensaje de depuración y realizando una acción de recuperación. El parámetro ignore_errors: yes permite que el playbook siga ejecutándose incluso si el script falla, y la condición when: failing_script_output.failed asegura que la tarea de manejo solo se ejecute cuando sea necesario.

Luego, cree un archivo de script que falla llamado /home/labex/project/failing_script.sh con el siguiente contenido:

#!/bin/bash
exit 1

Asegúrese de que el archivo de script sea ejecutable (chmod +x failing_script.sh) y coloque el archivo de script en el directorio /home/labex/project/ especificado en el playbook.

Finalmente, ejecute el playbook y observe que el script que falla se ejecuta pero se ignora debido a ignore_errors: yes.

chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml

El playbook mostrará un mensaje de depuración que indica el fracaso y realiza una acción de recuperación.
Salida de ejemplo:

...
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Execute a failing script] ************************************************
fatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring

TASK [Handle script failure] ***************************************************
ok: [localhost] => {
    "msg": "El script ha fallado. Realizando acción de recuperación."
}

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

El "msg": "El script ha fallado. Realizando acción de recuperación." indica que el script failing_script.sh no se pudo ejecutar correctamente.

Resumen

¡Felicidades! Ha completado con éxito el laboratorio del Módulo de Script de Ansible. Ha aprendido a usar el Módulo de Script para ejecutar scripts personalizados en hosts remotos, pasar variables a scripts y manejar los errores de los scripts.

El Módulo de Script le brinda gran flexibilidad y opciones de personalización en sus tareas de automatización al permitirle aprovechar el poder de los scripts personalizados. Sin embargo, asegúrese de escribir scripts seguros y confiables y validar cualquier entrada para prevenir vulnerabilidades de seguridad.

Ahora que tiene una buena comprensión del Módulo de Script, puede incorporarlo en sus playbooks de Ansible para automatizar varias tareas y lograr escenarios de automatización más avanzados. ¡Que disfrute escribiendo scripts con Ansible!