Comandos ad-hoc de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá sobre los comandos ad-hoc de Ansible. Los comandos ad-hoc son tareas rápidas y puntuales que puede ejecutar sin necesidad de un playbook completo. Son perfectos para operaciones simples como verificar el estado del sistema, administrar archivos o ejecutar comandos rápidos en múltiples servidores. Al final de este laboratorio, entenderá cómo usar los comandos ad-hoc de manera efectiva, lo cual es crucial para realizar tareas rápidas y solucionar problemas en su entorno administrado por Ansible.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible/ModuleOperationsGroup -.-> ansible/command("Execute Commands") ansible/ModuleOperationsGroup -.-> ansible/copy("Transfer Files") ansible/ModuleOperationsGroup -.-> ansible/file("Manage Files/Directories") ansible/ModuleOperationsGroup -.-> ansible/ping("Network Test") ansible/InventoryManagementGroup -.-> ansible/groups_inventory("Define Inventory Groups") linux/SystemInformationandMonitoringGroup -.-> linux/df("Disk Space Reporting") subgraph Lab Skills ansible/command -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} ansible/copy -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} ansible/file -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} ansible/ping -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} ansible/groups_inventory -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} linux/df -.-> lab-390441{{"Comandos ad-hoc de Ansible"}} end

Comprender la estructura de los comandos ad-hoc de Ansible

Comencemos por entender la estructura básica de un comando ad-hoc de Ansible. La sintaxis general es:

ansible [pattern] -m [module] -a "[module options]"

Donde:

  • [pattern] es el host o grupo de hosts de su inventario que desea seleccionar.
  • -m [module] especifica qué módulo de Ansible se debe utilizar.
  • -a "[module options]" proporciona argumentos al módulo.

Antes de comenzar a ejecutar comandos, aseguremos que tenemos un archivo de inventario adecuado. Cree o edite el archivo de inventario:

nano /home/labex/project/inventory

Agregue el siguiente contenido:

localhost ansible_connection=local

[webservers]
localhost

[dbservers]
localhost

Guarde y salga del editor.

Ahora, intentemos un comando ad-hoc simple para hacer ping a todos los hosts de nuestro inventario:

ansible all -i /home/labex/project/inventory -m ping

Debería ver una salida similar a esta:

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Este comando utiliza el módulo ping para verificar la conectividad con todos los hosts del inventario. La palabra clave all selecciona todos los hosts.

Desglosemos este comando:

  • all es el patrón, que selecciona todos los hosts del inventario.
  • -i /home/labex/project/inventory especifica el archivo de inventario a utilizar.
  • -m ping le dice a Ansible que utilice el módulo ping.

Ejecutar comandos con el módulo command

Uno de los módulos más utilizados en los comandos ad-hoc es el módulo command. Permite ejecutar comandos arbitrarios en los hosts de destino.

Usemos el módulo command para verificar el espacio en disco de todos los hosts:

ansible all -i /home/labex/project/inventory -m command -a "df -h"

Debería ver una salida que muestra el uso del disco en su máquina local.

Ahora, intentemos ejecutar un comando solo en el grupo webservers:

ansible webservers -i /home/labex/project/inventory -m command -a "uptime"

Este comando mostrará el tiempo de actividad de todos los hosts en el grupo webservers.

El módulo command es el módulo predeterminado, por lo que puede omitir -m command si está utilizando este módulo. Por ejemplo:

ansible dbservers -i /home/labex/project/inventory -a "free -m"

Este comando mostrará el uso de memoria en todos los hosts del grupo dbservers.

Recuerde, el módulo command no admite variables de shell u operaciones como |, >, <, &. Para esas, necesitaría usar el módulo shell.

Usar otros módulos útiles en comandos ad-hoc

Si bien el módulo command es versátil, Ansible proporciona muchos otros módulos que pueden ser muy útiles en comandos ad-hoc. Exploremos algunos de ellos.

  1. El módulo copy:
    Este módulo se utiliza para copiar archivos desde la máquina local a los hosts remotos. Creemos un archivo simple y cópielo a todos los hosts:

    echo "Hello from Ansible" > /home/labex/project/hello.txt
    ansible all -i /home/labex/project/inventory -m copy -a "src=/home/labex/project/hello.txt dest=/tmp/hello.txt"

    Este comando copia el archivo hello.txt desde la máquina local al directorio /tmp en todos los hosts remotos.

  2. El módulo file:
    Este módulo se utiliza para administrar archivos y directorios. Creemos un directorio en todos los servidores web:

    ansible webservers -i /home/labex/project/inventory -m file -a "path=/tmp/test_dir state=directory mode=0755"

    Este comando crea un directorio llamado test_dir en el directorio /tmp en todos los servidores web, con permisos establecidos en 0755.

  3. El módulo setup:
    Este módulo se utiliza para recopilar información (facts) sobre los hosts remotos. Se ejecuta automáticamente al comienzo de los playbooks, pero también se puede usar en comandos ad-hoc:

    ansible dbservers -i /home/labex/project/inventory -m setup

    Este comando mostrará una gran cantidad de información sobre los hosts en el grupo dbservers. Para limitar la salida, puede usar filtros:

    ansible dbservers -i /home/labex/project/inventory -m setup -a "filter=ansible_distribution*"

    Esto solo mostrará información relacionada con la distribución del sistema operativo.

Estos ejemplos demuestran cómo se pueden usar diferentes módulos para realizar diversas tareas rápidamente utilizando comandos ad-hoc.

Resumen

En este laboratorio, has aprendido sobre los comandos ad-hoc de Ansible y cómo usarlos de manera efectiva. Estos son los puntos clave:

  1. Los comandos ad-hoc son tareas rápidas y puntuales que se pueden ejecutar sin crear un playbook completo.

  2. La estructura básica de un comando ad-hoc es:

    ansible [pattern] -m [module] -a "[module options]"
  3. El módulo ping es útil para verificar la conectividad con los hosts.

  4. El módulo command te permite ejecutar comandos arbitrarios en los hosts de destino. Es el módulo predeterminado, por lo que se puede omitir -m command.

  5. Otros módulos útiles para comandos ad-hoc incluyen:

    • copy: para copiar archivos a hosts remotos
    • file: para administrar archivos y directorios
    • setup: para recopilar información (facts) sobre hosts remotos
  6. Puedes seleccionar grupos específicos de hosts utilizando los nombres de grupo definidos en tu archivo de inventario.

  7. Los comandos ad-hoc son excelentes para tareas rápidas, pero para operaciones más complejas o repetibles, los playbooks son más adecuados.

Los comandos ad-hoc son una característica poderosa de Ansible que te permite realizar tareas rápidas en toda tu infraestructura. Son especialmente útiles para solucionar problemas, recopilar información o realizar cambios rápidos. Sin embargo, para tareas más complejas o repetibles, es mejor utilizar playbooks.

A medida que continúes trabajando con Ansible, practica el uso de diferentes módulos en comandos ad-hoc. Explora la documentación de Ansible para aprender sobre más módulos y sus usos. Recuerda, aunque los comandos ad-hoc son poderosos, no proporcionan la idempotencia y reproducibilidad de los playbooks, así que utilízalos con prudencia en entornos de producción.