Comandos ad-hoc para controlar módulos

Los comandos ad-hoc de la línea de comandos también pueden ser usados para lanzar instrucciones concretas usando módulos específicos de Ansible en un servidor.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Cuando trabajamos con Ansible, una de las herramientas más potentes que tenemos a nuestra disposición son los comandos ad hoc, que nos permiten ejecutar tareas rápidas y directas en nuestros servidores sin necesidad de escribir playbooks completos. Ya hemos visto cómo hacer un simple ping a varias máquinas, pero la verdadera potencia reside en la enorme librería de módulos que Ansible ofrece para gestionar prácticamente cualquier aspecto de nuestros sistemas.

Estos módulos están organizados en categorías muy variadas: desde gestión de la nube, clústeres, comandos, criptografía, bases de datos, herramientas de sistema, hasta gestión de paquetes. Incluso podemos administrar servidores Windows mediante módulos que ejecutan comandos PowerShell, lo que amplía mucho el rango de sistemas que podemos controlar con Ansible.

Cuando hablamos de gestión de paquetes, cada sistema operativo tiene su propio gestor, y Ansible cuenta con un módulo específico para cada uno. Por ejemplo, para sistemas Debian o derivados, usamos el módulo apt. Si trabajamos con Arch Linux, el módulo sería pacman, y para macOS, homebrew. Además, existen módulos para gestores de paquetes específicos de lenguajes o herramientas, como Bower, Composer para PHP o npm para JavaScript. Esto nos permite instalar, actualizar o eliminar paquetes de forma remota y automatizada, adaptándonos a la plataforma que estemos administrando.

Es importante entender que Ansible no nos obliga a conocer todos los módulos, porque la cantidad es enorme y crece constantemente. Si necesitamos algo que no está disponible, probablemente exista un proyecto comunitario que lo implemente o aparecerá en futuras versiones. Esto nos ahorra mucho trabajo, ya que no tenemos que programar desde cero para cada herramienta o sistema.

Para ejecutar comandos remotos más avanzados que un simple ping, podemos usar el módulo shell (que se asume por defecto si no especificamos otro). Por ejemplo, podemos lanzar comandos como echo, ls /, o uname -a directamente desde Ansible hacia nuestros servidores. La salida que recibimos incluye tanto la salida estándar del comando como el código de estado, que nos indica si el comando se ejecutó correctamente (código 0) o si hubo algún error (código distinto de 0). Esto nos permite controlar el flujo y reaccionar ante posibles fallos.

Un ejemplo sencillo sería ejecutar:

ansible makigas.es -a "echo hola"

Esto ejecuta el comando echo hola en el servidor remoto makigas.es usando el módulo por defecto shell.

Cuando queremos hacer algo más específico, como instalar un paquete, usamos el módulo adecuado. En Debian, para instalar el paquete bim, usaríamos el módulo apt con parámetros que indican el nombre del paquete y el estado deseado. Por ejemplo, para asegurarnos de que bim esté instalado, el parámetro state debe ser present.

El comando sería algo así:

ansible makigas.es -m apt -a "name=bim state=present"

Sin embargo, aquí nos encontramos con un problema común: la gestión de paquetes suele requerir permisos de superusuario. Si intentamos ejecutar este comando sin privilegios elevados, recibiremos un error de permiso denegado porque apt-get necesita ser ejecutado con sudo.

Para solucionar esto, Ansible nos ofrece la opción become, que nos permite ejecutar comandos como otro usuario, normalmente root. Para activar esta opción en un comando ad hoc, usamos la bandera -b. Así, el comando para instalar bim con permisos elevados sería:

ansible makigas.es -m apt -a "name=bim state=present" -b

Pero aún falta algo: si el servidor remoto requiere que introduzcamos la contraseña para sudo, debemos indicarle a Ansible que nos la pida con la opción -k. Esto hará que Ansible solicite la contraseña de sudo en el servidor remoto antes de ejecutar el comando.

El comando completo quedaría:

ansible makigas.es -m apt -a "name=bim state=present" -b -k

Al ejecutarlo, Ansible se conectará al servidor, solicitará la contraseña de sudo, y procederá a instalar el paquete bim. La salida puede parecer un poco extraña porque apt genera mensajes que esperan una terminal interactiva, pero el paquete se instalará correctamente.

Si volvemos a ejecutar el mismo comando, Ansible detectará que bim ya está instalado y no realizará ningún cambio, mostrando que el estado deseado ya está cumplido.

Finalmente, podemos comprobar directamente en el servidor que el paquete está instalado y funcionando, ejecutando el comando bim.

Con estos pasos, vemos cómo combinar la ejecución de comandos remotos con la gestión de paquetes y el uso de permisos elevados, todo ello mediante módulos de Ansible y comandos ad hoc, lo que facilita enormemente la administración de servidores Linux y Windows desde una única herramienta.

Lista de reproducción
  1. 1
    ¿Qué es Ansible?
    6 minutos
  2. 2
    Instalación de Ansible
    7 minutos
  3. 3
    Inventario
    7 minutos
  4. 4
    Comandos básicos ad-hoc
    7 minutos
  5. 5
    Comandos ad-hoc para controlar módulos
    9 minutos
  6. 6
    Redactando un playbook
    9 minutos
  7. 7
    Conectarse como otro usuario (inciso)
    8 minutos
  8. 8
    Handlers
    5 minutos