Introducción
Ansible es una poderosa herramienta de automatización de TI que simplifica la gestión de sistemas remotos. En este tutorial, exploraremos el módulo de comandos de Ansible, que te permite ejecutar comandos en hosts de destino. Aprenderás los fundamentos de la ejecución de comandos, así como técnicas avanzadas para mejorar tus flujos de trabajo de Ansible.
Entendiendo el Módulo de Comando de Ansible
Ansible es una potente herramienta de automatización de código abierto que te permite gestionar y configurar tu infraestructura en múltiples hosts. El módulo de comando de Ansible es uno de los módulos centrales en Ansible que te permite ejecutar comandos arbitrarios en hosts remotos.
El módulo de comando de Ansible proporciona una forma sencilla y directa de ejecutar comandos en hosts de destino. Te permite ejecutar comandos de shell, scripts o cualquier otro archivo ejecutable en el sistema remoto. Este módulo es especialmente útil cuando necesitas realizar tareas ad-hoc, solucionar problemas o ejecutar comandos personalizados en tu infraestructura.
Para usar el módulo de comando de Ansible, necesitas definir el parámetro command en tu playbook de Ansible o en un comando ad-hoc. El parámetro command especifica el comando que deseas ejecutar en el host remoto. Por ejemplo:
- name: Ejecutar un comando en un host remoto
command: uptime
register: uptime_result
become: yes
En este ejemplo, el parámetro command está establecido en uptime, lo que ejecutará el comando uptime en el host remoto. El parámetro register se utiliza para capturar la salida del comando, y el parámetro become se establece en yes para ejecutar el comando con privilegios elevados (si es necesario).
El módulo de comando de Ansible también admite varias opciones, como:
creates: Especifica un archivo que debe existir antes de ejecutar el comando.removes: Especifica un archivo que no debe existir antes de ejecutar el comando.chdir: Cambia el directorio de trabajo actual a la ruta especificada antes de ejecutar el comando.stdin: Pasa la cadena especificada al comando a través de la entrada estándar.warn: Controla si mostrar una advertencia si el comando podría cambiar potencialmente un archivo importante.
Al comprender el módulo de comando de Ansible, puedes ejecutar comandos en tus hosts remotos de manera eficiente, automatizar tareas repetitivas y optimizar tus procesos de gestión de infraestructura.
Ejecución de Comandos en Hosts Remotos
Ejecución Básica de Comandos
Para ejecutar un comando en un host remoto utilizando el módulo de comando de Ansible, puedes usar la siguiente sintaxis básica:
- name: Ejecutar un comando en un host remoto
command: <command>
register: <variable_resultado>
become: yes
En este ejemplo, <command> es el comando que deseas ejecutar en el host remoto, y <variable_resultado> es la variable que almacenará la salida del comando. El parámetro become se establece en yes para ejecutar el comando con privilegios elevados (si es necesario).
Por ejemplo, para comprobar el tiempo de actividad de un host remoto:
- name: Comprobar el tiempo de actividad del host remoto
command: uptime
register: uptime_result
become: yes
La salida del comando uptime se almacenará en la variable uptime_result, que luego puedes utilizar en tu playbook o comando ad-hoc.
Manejo de Errores de Comando
De forma predeterminada, el módulo de comando de Ansible fallará si el comando ejecutado devuelve un código de salida distinto de cero. Puedes manejar errores de comando utilizando el parámetro ignore_errors:
- name: Ejecutar un comando en un host remoto
command: <command>
register: <variable_resultado>
ignore_errors: yes
Esto permitirá que el playbook continúe ejecutándose incluso si el comando falla.
Captura de la Salida del Comando
Puedes capturar la salida de un comando utilizando el parámetro register, como se muestra en los ejemplos anteriores. La salida se almacenará en la variable especificada, que luego puedes utilizar en tu playbook o comando ad-hoc.
Por ejemplo, para capturar la salida del comando uptime e imprimirla:
- name: Comprobar el tiempo de actividad del host remoto
command: uptime
register: uptime_result
become: yes
- name: Imprimir tiempo de actividad
debug:
msg: "{{ uptime_result.stdout }}"
Esto imprimirá la salida del comando uptime en la consola.
Al comprender los fundamentos de la ejecución de comandos en hosts remotos con el módulo de comando de Ansible, puedes automatizar eficazmente una amplia gama de tareas en tu infraestructura.
Técnicas Avanzadas de Ejecución de Comandos
Ejecución Condicional de Comandos
En ocasiones, es necesario ejecutar un comando solo si se cumple una determinada condición. Puedes utilizar la cláusula when para ejecutar comandos condicionalmente en tu playbook de Ansible:
- name: Ejecutar comando si se cumple la condición
command: <command>
when: <condición>
register: <variable_resultado>
become: yes
En este ejemplo, el comando <command> solo se ejecutará si la <condición> es verdadera.
Por ejemplo, para ejecutar el comando free solo si el sistema tiene menos del 20% de memoria libre:
- name: Comprobar memoria libre
command: free -m
register: memory_result
become: yes
- name: Ejecutar comando si la memoria libre es inferior al 20%
command: <command_to_execute>
when: (memory_result.stdout_lines[1].split()[3]|int / memory_result.stdout_lines[1].split()[1]|int * 100) < 20
register: <variable_resultado>
become: yes
Iteración sobre Comandos
También puedes utilizar bucles para ejecutar múltiples comandos en una sola tarea. El módulo de comando de Ansible admite el parámetro loop para este propósito:
- name: Ejecutar múltiples comandos
command: "{{ item }}"
loop:
- <command1>
- <command2>
- <command3>
register: <variable_resultado>
become: yes
En este ejemplo, los comandos especificados (<command1>, <command2> y <command3>) se ejecutarán uno a uno, y la salida se almacenará en la variable <variable_resultado>.
Manejo de Timeouts de Comandos
De forma predeterminada, Ansible esperará indefinidamente a que un comando se complete. Sin embargo, puedes establecer un tiempo límite para la ejecución del comando utilizando el parámetro timeout:
- name: Ejecutar comando con tiempo límite
command: <command>
timeout: 60
register: <variable_resultado>
become: yes
En este ejemplo, el comando se finalizará si tarda más de 60 segundos en completarse.
Dominando estas técnicas avanzadas de ejecución de comandos, puedes mejorar aún más las capacidades de automatización de Ansible y gestionar una amplia gama de escenarios en la administración de tu infraestructura.
Resumen
Este tutorial de Ansible ha proporcionado una guía completa sobre el uso del módulo de comandos para ejecutar comandos en hosts remotos. Al comprender los fundamentos y explorar las técnicas avanzadas, puedes aprovechar las capacidades de Ansible para optimizar tus operaciones de TI y mejorar la eficiencia en toda tu infraestructura.


