Ir al contenido principal

Guía de scripting con Ansible

Run Ansible playbooks on managed devices using Level's scripting engine, with setup instructions for Unix and Windows endpoints.

Introducción

Level puede ejecutar playbooks de Ansible en dispositivos gestionados a través de su motor de scripting. La diferencia clave respecto a una configuración típica de Ansible: Level no utiliza un nodo de control central. Cada dispositivo descarga y ejecuta el playbook localmente, y Level transmite la salida a tu consola en tiempo real.

Esta guía cubre el modelo de ejecución, cómo crear un script de Level que llama a ansible-playbook, y cómo preparar los endpoints de Windows que necesitan un entorno compatible con POSIX para ejecutar Ansible.


⚙️ REQUISITOS PREVIOS

  • Ansible instalado en cada dispositivo de destino (no en un nodo de control central — véase más adelante)

  • Para dispositivos Unix/macOS/Linux: ansible y ansible-playbook disponible en PATH

  • Para dispositivos Windows: un entorno compatible con POSIX (WSL o Cygwin/Git Bash) con Ansible instalado

  • Agente de Level desplegado en todos los dispositivos de destino


Cómo ejecuta Level los playbooks de Ansible

El Ansible estándar utiliza una máquina de control central para acceder por SSH a los hosts de destino y ejecutar tareas de forma remota. El modelo de Level es diferente: cada dispositivo ejecuta el playbook localmente sobre sí mismo.

Cuando un script de Level que contiene un ansible-playbook se ejecuta en un dispositivo:

  1. El script (y cualquier archivo de playbook adjunto) se descarga en el dispositivo.

  2. El dispositivo ejecuta ansible-playbook localmente usando su propia instalación de Ansible.

  3. El agente de Level captura stdout/stderr y lo transmite a la consola de Level mientras se ejecuta el playbook.

Esto significa que cada dispositivo necesita Ansible instalado, no solo una máquina central. También significa que los playbooks que apuntan a hosts: localhost o los tipos de conexión local funcionan mejor para la automatización distribuida por Level.

ℹ️ NOTA: Los playbooks que apuntan a hosts remotos a través de SSH siguen funcionando — el dispositivo actúa como nodo de control de Ansible para esas conexiones remotas. Esto es útil en casos donde un dispositivo gestionado necesita comunicarse con otros en su red local.


Creación de un script de Level para Ansible

El script de Level es un envoltorio de shell que llama a ansible-playbook. El archivo del playbook en sí se adjunta por separado y se descarga al dispositivo en tiempo de ejecución.

Para Linux y macOS

1. Ve a Automatizaciones → Scripts y haz clic en + Nuevo script.

2. Establece el intérprete en Shell (Bash).

3. Agrega la invocación del playbook:

Bash

#!/bin/bash
ansible-playbook /path/to/playbook.yml
if [ $? -ne 0 ]; then
echo "Playbook failed on $(hostname)" >&2
exit 1
fi

4. Adjunta el archivo del playbook al script o súbelo a Automatizaciones → Archivos y usa una Descargar archivo acción para colocarlo en el dispositivo antes de que se ejecute el script.

💡 CONSEJO: Usa ansible-playbook --check durante el desarrollo para realizar una ejecución en seco que valide la sintaxis y la conectividad sin realizar cambios.

Para Windows (mediante WSL)

  1. Establece el intérprete en PowerShell.

  2. Llama a Ansible a través de WSL:

PowerShell

wsl ansible-playbook /mnt/c/LevelPlaybooks/network_test.yml

WSL debe estar ya instalado y configurado en el dispositivo. Consulta Configuración de Ansible en Windows más adelante.

Para Windows (mediante Cygwin o Git Bash)

PowerShell

C:\cygwin64\bin\bash.exe -lc "ansible-playbook /cygdrive/c/LevelPlaybooks/playbook.yml"

Configuración de Ansible en endpoints de Windows

Dado que cada dispositivo ejecuta el playbook localmente, los endpoints de Windows necesitan un shell compatible con POSIX con Python y Ansible instalados. Dos opciones:

Opción A: Subsistema de Windows para Linux (WSL)

1. En PowerShell como Administrador, ejecuta:

PowerShell

wsl --install

Reinicia cuando se indique.

2. Desde el shell de Ubuntu que se abre tras el reinicio:

Bash

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip
pip3 install ansible

3. Verifica:

Bash

ansible --version
ansible-playbook --version

4. En los scripts de Level, llama a Ansible mediante wsl ansible-playbook ... desde PowerShell.

Opción B: Cygwin o Git Bash

1. Instala Cygwin o Git para Windows, seleccionando Python 3, pip y OpenSSH durante la instalación.

2. Desde el shell de Cygwin o Git Bash:

Bash

pip3 install ansible

3. En los scripts de Level, llama a Ansible invocando directamente el ejecutable de Bash:

PowerShell

C:\cygwin64\bin\bash.exe -lc "ansible-playbook /path/to/playbook.yml"

⚠️ ADVERTENCIA: Alinea las versiones de Python y Ansible en todos los endpoints de Windows. Las discrepancias de versiones entre endpoints generan comportamientos inconsistentes difíciles de diagnosticar.


Configuración del playbook para ejecución local

Cuando los playbooks se ejecutan localmente en cada dispositivo en lugar de desde un nodo de control central, algunos ajustes de configuración son de ayuda:

Usa hosts: localhost con connection: local para las tareas que deben ejecutarse en el propio dispositivo:

YAML

- name: Local configuration
hosts: localhost
connection: local
tasks:
- name: Check connectivity
ansible.builtin.ping:

Agrega indicadores de modo detallado en desarrollo para obtener salida detallada en la consola de Level:

Bash

ansible-playbook /path/to/playbook.yml -vv

Level transmite toda la salida de stdout/stderr, por lo que el modo detallado muestra el detalle tarea por tarea de forma integrada.


Buenas prácticas

  • Valida localmente antes de desplegar a través de Level. Ejecuta ansible-playbook playbook.yml --check en un dispositivo de prueba primero. Los errores de sintaxis en el playbook aparecen de inmediato en lugar de a mitad de una ejecución en producción.

  • Termina con código distinto de cero en caso de fallo. Level marca una ejecución de script como fallida solo si el script termina con un código distinto de cero. La if [ $? -ne 0 ] verificación en el envoltorio anterior lo hace automáticamente. Sin ella, un playbook fallido puede parecer un éxito en el historial de ejecuciones de Level.

  • Mantén los playbooks idempotentes. Los playbooks de Ansible deben producir el mismo resultado tanto si se ejecutan una vez como diez veces. Esto permite volver a ejecutarlos mediante Level sin efectos secundarios no deseados.

  • Usa el repositorio de archivos de Level para los playbooks. Sube los archivos del playbook .yml archivos a Automatizaciones → Archivos, luego usa una Descargar archivo acción antes del paso del script para colocarlos en cada dispositivo. Esto mantiene tus playbooks con control de versiones en Level y garantiza que cada dispositivo recibe la versión actual.


Preguntas frecuentes

  • ¿Necesito Ansible en cada dispositivo gestionado o solo en un servidor central? Cada dispositivo en el que quieras ejecutar un playbook necesita Ansible instalado localmente. Level no accede por SSH desde un nodo de control central — distribuye y ejecuta el playbook en cada dispositivo de forma independiente.

  • ¿Puede el playbook apuntar a otros hosts a través de SSH desde el dispositivo gestionado? Sí. El dispositivo gestionado actúa como nodo de control de Ansible para cualquier conexión remota definida en el playbook. Las claves SSH y las credenciales deben estar presentes en el propio dispositivo gestionado.

  • Mi playbook se ejecuta correctamente en local pero falla en Level. ¿Qué debo comprobar primero? Comprueba la configuración Ejecutar como configuración. Usuario actual ejecuta el script como un usuario activo con sesión iniciada en Linux o macOS. En Linux, este modo establece el HOME, USER, LOGNAME, SHELL, y una base PATH, y luego agrega el entorno de sesión de systemd correspondiente cuando esté disponible. En macOS, cambiar el usuario de ejecución no reconstruye el entorno del usuario; el script hereda el entorno del agente. Usa rutas absolutas y establece explícitamente cualquier variable de entorno adicional que necesite el playbook.

  • ¿Cómo paso variables al playbook en tiempo de ejecución? Usa el --extra-vars indicador en la ansible-playbook llamada. Las variables del sistema de Level y las variables de automatización se pueden pasar usando el {x} selector en el editor de scripts. Por ejemplo:
    ​ansible-playbook /path/to/playbook.yml --extra-vars "hostname={{level_device_name}}"

  • ¿Puedo programar la ejecución del playbook de forma recurrente? Sí. Adjunta el script a una automatización con un disparador programado. Establece el horario, agrega una acción de Descargar archivo para el playbook si está almacenado en el repositorio de archivos de Level, y luego agrega la acción Ejecutar script. La automatización ejecuta el playbook en cada dispositivo que coincida con las condiciones del disparador.

¿Ha quedado contestada tu pregunta?