Ejecución de Comandos de Shell Remotos
Ejecución de Comandos Ad-Hoc
Ansible te permite ejecutar comandos ad-hoc en hosts remotos sin necesidad de crear un Playbook. Esto es útil para tareas rápidas, únicas o para fines de prueba. Para ejecutar un comando ad-hoc, puedes usar la herramienta de línea de comandos ansible con la siguiente sintaxis:
ansible <patrón_de_host> -m <módulo> -a "<argumentos_del_módulo>"
Por ejemplo, para ejecutar el comando uptime en todos los hosts del grupo webservers, puedes usar el siguiente comando:
ansible webservers -m command -a "uptime"
Uso del Módulo command
El módulo command es uno de los módulos más utilizados para ejecutar comandos de shell remotos en Ansible. Permite ejecutar comandos arbitrarios en los hosts de destino. Aquí hay un ejemplo de Playbook que utiliza el módulo command:
- hosts: webservers
tasks:
- name: Ejecutar un comando simple
command: echo "Hola, LabEx!"
register: command_output
- name: Mostrar la salida del comando
debug:
var: command_output.stdout
En este ejemplo, el módulo command se utiliza para ejecutar el comando echo "Hola, LabEx!" en el grupo webservers. La salida del comando se almacena en la variable command_output, que luego se muestra utilizando el módulo debug.
Manejo de Errores de Comando
De forma predeterminada, Ansible fallará la tarea si el comando remoto devuelve un código de salida distinto de cero. Puedes manejar errores de comando utilizando la opción ignore_errors o comprobando la variable rc (código de retorno) en tu Playbook. Aquí hay un ejemplo:
- hosts: webservers
tasks:
- name: Ejecutar un comando que podría fallar
command: /path/to/command_that_might_fail
register: command_result
ignore_errors: yes
- name: Comprobar el resultado del comando
debug:
msg: "El comando falló con el código de retorno {{ command_result.rc }}"
when: command_result.rc != 0
En este ejemplo, la opción ignore_errors se utiliza para evitar que la tarea falle si el comando remoto devuelve un código de salida distinto de cero. La variable rc se comprueba luego para determinar el código de retorno del comando, y se muestra un mensaje de depuración si el comando falló.