Guía de Ansible: El comando Ad-Hoc

El comando Ad-Hoc es el comando ansible de una sola línea que realiza una tarea en el host de destino. Te permite ejecutar una tarea sencilla de una sola línea contra uno o un grupo de hosts definidos en la configuración del archivo de inventario. Un comando Ad-Hoc sólo tendrá dos parámetros, el grupo de un host que quieres que realice la tarea y el módulo Ansible a ejecutar.

El comando Ad-Hoc te da más ventajas para explorar el propio Ansible. Puedes realizar tareas sin crear primero un playbook, como reiniciar servidores, gestionar servicios, editar la configuración de la línea, copiar un archivo a un solo host, instalar un solo paquete.

En este tutorial, mostraré el uso básico del comando Ansible Ad-Hoc. Utilizaré el comando Ad-Hoc para realizar tareas sencillas que pueden ser necesarias en tu día a día como administrador de sistemas.

Requisitos previos

Para esta guía, utilizaremos dos servidores Ubuntu 18.04 LTS, Bionic Beaver. El servidor ansible tendrá el nombre de host ‘ansible-node’ con la dirección IP 10.5.5.20 y el servidor Provision con el nombre de host ‘provision’ y la dirección IP 10.5.5.21.

¿Qué vamos a hacer?

  1. Comando básico ad hoc
  2. Transferencia de archivos
  3. Actualizar y mejorar
  4. Gestionar el paquete
  5. Gestionar Servicios
  6. Comprobación del sistema

Uso básico del comando Ad-Hoc

En primer lugar, aprenderemos el uso básico de Ansible Ad-Hoc para gestionar servidores. Aprenderemos el comando básico de Ansible Ad-Hoc, el uso del comando Ad-Hoc con autenticación de contraseña ssh, la escalada de privilegios y el uso del comando Ad-Hoc contra un grupo de hosts.

1. Comando básico

El comando básico de ansible ad-hoc contra «todos» los hosts en el archivo de inventario y utilizando el módulo «ping».

ansible all -m ping
  • El primer parámetro ‘all’ para todos los hosts del archivo de inventario.
  • El segundo parámetro dentro de la opción ‘-m’ para el módulo, ejecutando el módulo ping.

Ahora obtendrás el resultado que se muestra a continuación.

Uso de comandos ad-hoc básicos

Un comando Ad-Hoc contra el servidor de aprovisionamiento ha sido ‘SUCCESS’ sin ningún cambio realizado en el servidor y obtenemos el resultado del módulo ‘ping’ del servidor de aprovisionamiento ‘pong’.

2. Filtrar Grupo de Hosts y Host Individual

Ahora puedes utilizar el comando Ad-Hoc contra un grupo de hosts que ya están definidos en el archivo de inventario. Puedes utilizar tu archivo de inventario personalizado o utilizar el archivo de inventario por defecto ‘/etc/ansible/hosts’.

A continuación se muestra un ejemplo para ejecutar el comando ad-hoc contra el grupo de hosts llamado ‘hakase-testing’ que ya están definidos en el archivo de configuración del inventario por defecto.

ansible hakase-testing -m setup -a "filter=ansible_distribution*"

Filtrar Grupo de Hosts y Host Individual

Si utilizas el archivo de inventario personalizado, añade la opción «-i» seguida del nombre del archivo de inventario.

ansible hakase-testing -i hosts -m setup -a "filter=ansible_distribution*"

Obtendrás el mismo resultado.

Ahora, si quieres ejecutar contra un solo host en la configuración del inventario, puedes utilizar el nombre del host como el que aparece a continuación.

ansible provision -m setup -a "filter=ansible_distribution*"

Y el comando ad-hoc se ejecutará sólo en el servidor de «provisión».

Ejecutar sólo en el servidor provisto

3. Utilizar la contraseña SSH

Ahora realizaremos un comando Ad-Hoc utilizando la autenticación por contraseña ssh solicitada. Y para ello, necesitas instalar el paquete adicional llamado ‘sshpass’ en el ‘nodo-ansible’.

Instala el paquete sshpass con el siguiente comando apt.

sudo apt install sshpass -y

Ahora ejecuta el comando ad-hoc y añade la opción ‘–ask-pass’ al final.

ansible hakase-testing -m ping --ask-pass

Y se te pedirá la ‘Contraseña SSH’ para el servidor.

Utilizar la contraseña SSH

Escribe tu contraseña ssh y el comando ad-hoc se ejecutará contra el servidor.

4. Escalada de privilegios

El ansible proporciona funciones para la escalada de privilegios contra los servidores. Si quieres ejecutar el comando ad-hoc como usuario no root, puedes utilizar la opción ‘–become’ para obtener los privilegios de root y la opción ‘-K’ para solicitar la contraseña.

Ejecuta el comando ad-hoc ‘fdisk -l’ como usuario ‘hakase’ con la opción de privilegio ‘–become’ y la ‘-K’ para solicitar la ‘Contraseña SUDO’.

ansible hakase-testing -m shell -a 'fdisk -l' -u hakase --become -K

A continuación se muestra el resultado.

Escalada de privilegios

Transferencia de archivos

Ahora vamos a utilizar el comando Ad-Hoc para la transferencia de archivos desde y hacia el servidor. Podemos transferir un archivo al servidor de aprovisionamiento con el módulo ‘copy’, y descargar el archivo desde el servidor utilizando el módulo ‘fetch’.

1. Subir un archivo al servidor

Para este ejemplo, vamos a ejecutar el comando ad-hoc y utilizar el módulo ‘copy’ para subir la configuración de sudoers para el usuario hakase al directorio ‘/etc/sudoers.d’ en el grupo ‘hakase-testing’.

Ejecuta el siguiente comando ad-hoc.

ansible hakase-testing -m copy -a 'src=/home/hakase/hakase-sudo.conf dest=/etc/sudoers.d/hakase owner=root mode=0644' -u hakase --become -K

Ahora se te pedirá la ‘Contraseña SUDO’ para el usuario hakase. Escribe la contraseña y obtendrás el resultado que se muestra a continuación.

Subir el archivo al host

El archivo se ha subido al directorio de destino ‘dest’, y obtienes el resultado ‘cambiado’ como ‘true’.

2. Descargar el archivo desde el host

Ahora vamos a utilizar un comando ad-hoc con el módulo ‘fetch’ para descargar el archivo desde el servidor de aprovisionamiento al servidor local ‘ansible-node’.

Descarga el archivo de configuración ‘/etc/sudoers.d/hakase’ del servidor de ‘aprovisionamiento’ al directorio local llamado ‘backup’.

ansible provision -m fetch -a 'src=/etc/sudoers.d/hakase dest=/home/hakase/backup/hakase-sudoers flat=yes'

Y obtendrás el archivo llamado ‘hakase-sudoers’ en el directorio ‘backup’.

Descargar el archivo desde el host

Paso 3 – Actualizar el repositorio y actualizar los paquetes

Para actualizar el repositorio de los servidores de Ubuntu, podemos utilizar el comando ad-hoc con el módulo apt.

Actualiza el repositorio en el grupo hakase-testing.

ansible hakase-testing -m apt -a 'update_cache=yes' --become

Ahora actualiza los repositorios y actualiza todos los paquetes a la última versión utilizando la opción ‘upgrade=dist’.

ansible hakase-testing -m apt -a 'upgrade=dist update_cache=yes' --become

Espera a que se actualicen todos los paquetes.

Gestionar los paquetes

Esto es muy útil cuando intentas construir y depurar tu propio playbook. Porque a veces necesitas que se instale un paquete adicional en el sistema. Entonces, este comando ad-hoc te dará una forma fácil de instalar ese paquete sin tener que entrar en cada servidor.

1. Instalar paquete

Instala un único paquete utilizando el comando ad-hoc con el módulo apt como se indica a continuación.

ansible hakase-testing -m apt -a 'name=nginx state=latest' --become

2. Eliminar el paquete

Elimina el paquete y purga toda la configuración relacionada con el paquete.

ansible hakase-testing -m apt -a 'name=nginx state=absent purge=yes' --become

3. Autoremove

En el ejemplo siguiente se elimina el paquete nginx y se purga toda la configuración relacionada con él y luego se eliminan todos los paquetes no utilizados en el sistema.

ansible hakase-testing -m apt -a 'name=nginx state=absent purge=yes autoremove=yes' --become

Gestionar los servicios

En este paso, vamos a utilizar el módulo de servicio en el comando ad-hoc para gestionar el servicio del sistema en el servidor de aprovisionamiento.

1. Inicia los servicios

Inicia el servicio nginx y añádelo al tiempo de arranque.

ansible hakase-testing -m service -a 'name=nginx state=started enabled=yes' --become

Obtendrás como resultado ‘cambiado’ y ‘habilitado’ como ‘verdadero’.

2. Reiniciar el servicio

Si quieres reiniciar el servicio, puedes utilizar el siguiente comando.

ansible hakase-testing -m service -a 'name=nginx state=restarted' --become

El servicio nginx se ha reiniciado.

3. Detener un servicio

Para detener el servicio, cambia el valor de ‘estado’ a ‘detenido’.

ansible hakase-testing -m service -a 'name=nginx state=stopped' --become

Se ha detenido el servicio nginx en los servidores ‘hakase-testing’.

Comprobación del sistema

Ahora vamos a utilizar el módulo ‘shell’ dentro del comando ad-hoc. Y vamos a hacer una sencilla monitorización del sistema utilizando un simple comando de Linux a través del ad-hoc de Ansible.

En primer lugar, instala el paquete ‘sysstat’ en todos los servidores mediante el comando ad-hoc que aparece a continuación.

ansible hakase-testing -m apt -a 'name=sysstat state=latest' --become

Espera a que se instale el paquete ‘sysstat’.

Una vez que se haya completado, estarás listo para comprobar todos los servidores.

1. Disco disponible

Comprueba el disco disponible en la partición raíz utilizando el comando fdisk.

ansible hakase-testing -m shell -a 'df -h /dev/sda2' --become

Cambia el ‘/dev/sda2’ por tu propia ruta.

2. Uso de la memoria RAM

Ahora comprueba el uso de la memoria RAM en todos los servidores utilizando el comando ‘free -m’.

ansible hakase-testing -m shell -a 'free -m' --become

Y se te mostrará el resultado como se indica a continuación.

3. Uso de la CPU

Comprueba el uso de la CPU de todos los servidores utilizando el comando mpstat.

ansible hakase-testing -m shell -a 'mpstat -P ALL' --become

El comando mpstat forma parte del paquete ‘sysstat’.

4. Puertos abiertos

Comprobación de los puertos abiertos en todo el sistema utilizando el netstat a través del comando ad-hoc.

ansible hakase-testing -m shell -a 'netstat -plntu' --become

5. Tiempo de actividad

Ahora comprueba el tiempo de actividad de cada servidor.

ansible hakase-testing -m shell -a 'uptime' --become

También te podría gustar...