Los Comandos Ad-hoc se utilizan en Ansible para ejecutar tareas de forma instantánea, y no es necesario guardarlos para su uso posterior. Este artículo trata sobre los Comandos Ad-hoc de Ansible.

Hay múltiples tareas en Ansible para las que no necesita escribir un libro de jugadas Ansible separado para ello; puede simplemente ejecutar un comando Ansible ad-hoc para esa tarea. Estos son comandos de una sola línea para realizar una sola tarea en el host de destino. Estos comandos están presentes en /usr/bin/ansible.

¿Qué es un comando ad-hoc de Ansible?

Un comando ad-hoc de Ansible es una herramienta útil que le permite ejecutar una única tarea en un grupo de servidores sin necesidad de crear un playbook completo. Estos comandos son estupendos para realizar tareas sencillas como comprobar el estado de un servicio o ejecutar rápidamente un comando. Sin embargo, para tareas más complejas como la instalación de software, suele ser mejor utilizar un playbook.

Para ejecutar un comando ad-hoc se introduce una única línea de código que contiene la información relevante, como el nombre del módulo deseado y cualquier parámetro que deba suministrársele.

La sintaxis de un comando ad-hoc de Ansible es la siguiente:

ansible <hosts> -m <módulo> -a "<argumentos>"

Aquí

  • es una lista separada por comas de hosts de destino,
  • es el nombre del módulo de Ansible que se va a utilizar, y
  • son los argumentos que se deben pasar al módulo.

Por ejemplo, si desea comprobar el espacio en disco de un grupo de servidores, puede utilizar el comando df -h con el módulo shell, de esta forma

ansible servidores_web -m shell -a "df -h"

El módulo shell ejecutaría el comando df -h en todos los servidores del grupo web_servers. Entonces, podrá ver la salida de cada servidor en su consola. ¡Es súper fácil y eficiente!

¿Por qué utilizar los comandos ad-hoc de Ansible?

Aparte de ser rápidos y fáciles de usar, los comandos ad-hoc son perfectos para tareas sencillas y puntuales que no requieren mucha complejidad. Además, son una forma estupenda de probar nuevos módulos o comandos antes de añadirlos a un libro de jugadas. Esto puede ayudarle a evitar errores y ahorrar tiempo a largo plazo.

Si está solucionando un problema en un servidor, puede utilizarlos para comprobar el estado de un servicio, ver los archivos de registro o realizar otras tareas de diagnóstico.

Además, ¡los comandos ad-hoc también son flexibles! Puede utilizarlos para todo tipo de tareas, como instalar paquetes, copiar archivos o ejecutar comandos en varios servidores a la vez.

Si desea que la gestión del servidor sea más sencilla y eficaz, ¡los comandos ad-hoc de Ansible son el camino a seguir!

He aquí algunas de las formas en que puede utilizarlos:

  • Reiniciar servidores
  • Gestionar archivos
  • Gestión de paquetes
  • Gestión de usuarios y grupos
  • Gestionar servicios
  • Recopilación de datos
  • Patrones y comandos ad-hoc

Tareas como hacer ping a todos los hosts para comprobar si se están ejecutando, copiar un archivo, reiniciar servidores e instalar un paquete pueden realizarse fácilmente mediante los comandos Ad-hoc de Ansible. He aquí una lista de comandos Ad-hoc de Ansible fundamentales que debe conocer.

Comandos básicos

El siguiente comando ad-hoc ejecuta un módulo ping en todos los hosts del archivo de inventario. Aquí -m es la opción para un módulo.

<strong>root@geekflare:/home/geekflare# ansible all -m ping</strong>
nodo1 | SUCCESS => {
    "ansible_facts": {
        "intérprete_descubierto_python": "/usr/bin/python"
    }, 
    "changed": falso 
    "ping": "pong"
}

El comando mencionado a continuación ejecuta el módulo setup en un grupo de hosts – Client presentes en el archivo de inventario ‘/etc/ansible/hosts’.

root@geekflare:/home/geekflare# ansible Client -m setup -a "filter=ansible_distribution*"
nodo1 | SUCCESS => {
    "ansible_facts": {
        "distribución_ansible": "Ubuntu", 
        "ansible_distribution_file_parsed": true, 
        "ansible_distribution_file_path": "/etc/os-release", 
        "ansible_distribution_file_variety": "Debian", 
        "ansible_distribution_major_version": "18", 
        "ansible_distribution_release": "cosmic", 
        "ansible_distribution_version": "18.10", 
        "intérprete_descubierto_python": "/usr/bin/python"
    }, 
    "changed": false
}

El siguiente comando se utiliza para solicitar la autenticación de la contraseña SSH. Necesita añadir la opción -ask-pass al final del comando. Después de ejecutar el comando, le pedirá que introduzca la contraseña SSH.

root@geekflare:/home/geekflare# ansible Client -m ping --ask-pass
Contraseña SSH: 
nodo1 | SUCCESS => {
    "ansible_facts": {
        "intérprete_descubierto_python": "/usr/bin/python"
    }, 
    "changed": falso 
    "ping": "pong"
}

El siguiente comando le ofrece la posibilidad de ejecutar comandos ad-hoc como usuario no root con privilegios de root. La opción --become otorga los privilegios de root y la opción -K solicita la contraseña.

root@geekflare:/home/geekflare# ansible Client -m shell -a 'fdisk -l' -u geekflare --become -K
Contraseña BECOME: 
nodo1 | CAMBIADO | rc=0 >>
Disco /dev/loop0: 14,5 MiB, 15208448 bytes, 29704 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/loop2: 42,1 MiB, 44183552 bytes, 86296 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/loop3: 149,9 MiB, 157184000 bytes, 307000 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/loop5: 140,7 MiB, 147501056 bytes, 288088 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/loop6: 151,2 MiB, 158584832 bytes, 309736 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/loop7: 14,8 MiB, 15458304 bytes, 30192 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes


Disco /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0xcef957f5

Dispositivo Arranque Inicio Fin Sectores Tamaño Id Tipo
/dev/sda1 2048 462639103 462637056 220.6G 83 Linux
/dev/sda2 * 462639104 464592895 1953792 954M 83 Linux
/dev/sda3 464592896 482168831 17575936 8.4G 82 Linux swap / Solaris
/dev/sda4 482168832 1048573951 566405120 270.1G 83 Linux


Disco /dev/loop8: 4 MiB, 4218880 bytes, 8240 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes

Este comando ad-hoc se utiliza para reiniciar el sistema con la opción -f para definir el número de bifurcaciones.

root@geekflare:/home/geekflare# ansible Client -a "/sbin/reboot" -f 1

Transferencia de archivos

El siguiente comando ad-hoc de ansible se utiliza para copiar un archivo de un origen a un destino para un grupo de hosts (Cliente) definido en el archivo de inventario. Después de introducir la contraseña, la salida con el parámetro «change» será «true», lo que significa que el archivo se ha copiado en el destino.

root@geekflare:/home/geekflare# ansible Client -m copy -a 'src=/home/geekflare/nginx.yml dest=/home/geekflare/Desktop/ owner=root mode=0644' -u root --become -K
Contraseña BECOME: 
node1 | CHANGED => {
    "ansible_facts {
        "intérprete_descubierto_python": "/usr/bin/python"
    }, 
    "changed": true 
    "checksum": "5631822866afd5f19b928edb3ba018385df22dd3", 
    "dest": "/home/geekflare/Desktop/nginx.yml", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "0d6ffe1069fc25ad4f8ad700277c4634", 
    "modo": "0644", 
    "propietario": "root", 
    "tamaño": 280, 
    "src": "/root/.ansible/tmp/ansible-tmp-1562253463.3-214622150088155/source", 
    "estado": "archivo", 
    "uid": 0
}

Ejecute el siguiente comando para verificar si el módulo de copia funcionó correctamente o no. El archivo copiado debería llegar al destino mencionado en el comando anterior.

root@geekflare:/home/geekflare# ls Escritorio/

nginx.yml

Estoy creando un nuevo directorio para ejecutar el módulo fetch n siguiente comando ad-hoc.

root@geekflare:/home/geekflare# mkdir ejemplo

root@geekflare:/home/geekflare# ls

Documentos de escritorio ejemplo ejemplos.escritorio nginx_new.yml nginx.yml

El siguiente comando ad-hoc de ansible se utiliza para descargar un archivo de un host definido en el comando. En este comando, estamos descargando un archivo utilizando el módulo fetch desde el servidor nodo1 a un destino local en el nodo ansible.

root@geekflare:/home/geekflare# ansible node1 -m fetch -a 'src=/etc/sudoers.d/nginx.yml dest=/home/geekflare/ejemplo/ flat=yes'

node1 | SUCCESS => {

    "changed": false

    "checksum": "5631822866afd5f19b928edb3ba018385df22dd3",

    "dest": "/home/geekflare/example/nginx.yml",

    "file": "/etc/sudoers.d/nginx.yml",

    "md5sum": "0d6ffe1069fc25ad4f8ad700277c4634"

}

Compruebe si el archivo se ha descargado o no en el destino mencionado en el comando.

root@geekflare:/home/geekflare# ls ejemplo

nginx.yml

Administrar paquetes

El comando mencionado a continuación instala nginx en un grupo de hosts (Cliente) mencionado utilizando un módulo apt.

root@geekflare:/home/geekflare# ansible Client -m apt -a 'name=nginx state=latest' --become

nodo1 | SUCCESS => {

    "ansible_facts": {

        "intérprete_descubierto_python": "/usr/bin/python"

    },

    "cache_update_time": 1562411227,

    "cache_updated": falso,

    "changed": falso

}

El comando mencionado a continuación elimina nginx en un grupo de hosts (Cliente) utilizando el módulo apt y purga todas las configuraciones relacionadas.

root@geekflare:/home/geekflare# ansible Client -m apt -a 'name=nginx state=absent purge=yes' --become

nodo1 | CAMBIADO => {

    "ansible_facts": {

        "intérprete_descubierto_python": "/usr/bin/python"

    },

    "cambiado": true,

    "stderr": "",

    "stderr_lines": [],

    "stdout": "Leyendo listas de paquetes...\nConstruyendo árbol de dependencias...\nLeyendo información de estado...\nLos siguientes paquetes se instalaron automáticamente y ya no son necesarios:\n libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream nginx-common nginx-core\nUse 'sudo apt autoremove' para eliminarlos.\nLos siguientes paquetes serán ELIMINADOS:\n nginx*\n0 actualizados, 0 recién instalados, 1 para eliminar y 241 no actualizados.\nDespués de esta operación, se liberarán 44,0 kB de espacio en disco.\n(Leyendo base de datos ... \r(Leyendo base de datos ... 5%\r(Leyendo base de datos ... 10%\r(Leyendo base de datos ... 15%\r(Leyendo base de datos ... 20%\r(Leyendo base de datos ... 25%\r(Leyendo base de datos ... 30%(Lectura de la base de datos ... 35%(Lectura de la base de datos ... 40%(Lectura de la base de datos ... 45%(Lectura de la base de datos ... 50%(Lectura de la base de datos ... 55%(Base de datos de lectura ... 60%(Lectura de la base de datos ... 65%(Lectura de la base de datos ... 70%(Lectura de la base de datos ... 75%(Lectura de la base de datos ... 80%(Base de datos de lectura ... 85%(Base de datos de lectura ... 90%(Lectura de la base de datos ... 95%(Lectura de la base de datos ... 100%\r(Leyendo base de datos ... 180191 archivos y directorios instalados actualmente.)\r\nQuitando nginx (1.15.5-0ubuntu2.1) ...\r\n",

    "stdout_lines": [

        "Leyendo listas de paquetes...",

        "Construyendo árbol de dependencias...",

        "Leyendo información de estado...",

        "Los siguientes paquetes se instalaron automáticamente y ya no son necesarios:",

        "libnginx-mod-http-geoip libnginx-mod-http-image-filter",

        " libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream",

        " nginx-common nginx-core",

        "Utilice 'sudo apt autoremove' para eliminarlos",

        "Los siguientes paquetes serán ELIMINADOS:",

        "nginx*",

        "0 actualizados, 0 recién instalados, 1 a eliminar y 241 no actualizados",

        "Tras esta operación, se liberarán 44,0 kB de espacio en disco",

        " (Leyendo base de datos... ",

        "(Leyendo base de datos ... 5%",

        "(Leyendo base de datos ... 10%",

        "(Leyendo base de datos ... 15%",

        "(Leyendo base de datos ... 20%",

        "(Leyendo base de datos ... 25%",

        "(Leyendo base de datos ... 30%",

        "(Leyendo base de datos ... 35%",

        "(Leyendo base de datos ... 40%",

        "(Leyendo base de datos ... 45%",

        "(Leyendo base de datos ... 50%",

        "(Leyendo base de datos ... 55%",

        "(Leyendo base de datos ... 60%",

        "(Leyendo base de datos ... 65%",

        "(Leyendo base de datos ... 70%",

        "(Leyendo base de datos ... 75%",

        "(Leyendo base de datos ... 80%",

        "(Leyendo base de datos ... 85%",

        "(Leyendo base de datos ... 90%",

        "(Leyendo base de datos ... 95%",

        "(Leyendo base de datos ... 100%",

        "(Leyendo base de datos ... 180191 archivos y directorios instalados actualmente.)",

        "Eliminando nginx (1.15.5-0ubuntu2.1) ..."

    ]

}

Administrar servicios

El siguiente comando ad-hoc de ansible ejecuta el módulo de servicio para iniciar nginx en el host. El valor de estado debe ser iniciado.

root@geekflare:/home/geekflare# ansible Client -m service -a 'name=nginx state=started enabled=yes' --become

nodo1 | SUCCESS => {

    "ansible_facts": {

        "intérprete_descubierto_python": "/usr/bin/python"

    },

    "changed": falso,

    "habilitado": true,

    "nombre": "nginx",

    "estado": "iniciado",

    "estado": {

        "ActiveEnterTimestamp": "Sat 2019-07-06 08:28:02 EDT",

        "ActiveEnterTimestampMonotonic": "31411371",

        "ActiveExitTimestampMonotonic": "0",

        "ActiveState": "activo",

        "Tras": "sysinit.target system.slice systemd-journald.socket basic.target network.target",

        "AllowIsolate": "no",

        "AmbientCapabilities": "",

        "AssertResult": "",

        "AssertTimestamp": "Sat 2019-07-06 08:27:59 EDT",

        "AssertTimestampMonotonic": "27694868",

        "Antes": "multi-user.target shutdown.target",

        "BlockIOAccounting": "no",

        "BlockIOWeight": "[no establecido]",

        "CapabilityBoundingSet": "cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend",

        "CollectMode": "inactivo",

        "ConditionResult": "sí",

        "ConditionTimestamp": "Sat 2019-07-06 08:27:59 EDT",

        "ConditionTimestampMonotonic": "27694867",

        "ConfigurationDirectoryMode": "0755",

        "Conflictos": "apagado.objetivo",

        "Grupo de control": "/system.slice/nginx.service",

        "ControlPID": "0",

        "ExecMainStartTimestamp": "Sat 2019-07-06 08:28:02 EDT",

        "ExecMainStartTimestampMonotonic": "31411353",

        "ExecMainStatus": "0",

        "ExecReload": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -g daemon on; master_process on; -s reload ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",

        "ExecStart": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -g daemon on; master_process on; ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",

        "ExecStartPre": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -t -q -g daemon on; master_process on; ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",

        "ExecStop": "{ path=/sbin/start-stop-daemon ; argv[]=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid ; ignore_errors=yes ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",

        "FailureAction": "ninguno",

        "FileDescriptorStoreMax": "0",

        "FragmentPath": "/lib/systemd/system/nginx.service",

        "GID": "[no establecido]",

        "GuessMainPID": "sí",

        "IOAccounting": "no",

        "IOSchedulingClass": "0",

        "IOSchedulingPriority": "0",

        "IOWeight": "[no establecido]",

    }

}

A continuación se ejecuta el módulo de servicio para detener nginx en el host. El valor de estado cambia a detenido.

root@geekflare:/home/geekflare# ansible Client -m service -a 'name=nginx state=stopped' --become

nodo1 | CAMBIADO => {

    "ansible_facts": {

        "intérprete_descubierto_python": "/usr/bin/python"

    },

    "cambiado": true,

    "name": "nginx",

    "estado": "detenido",

    "estado": {

        "ActiveEnterTimestamp": "Sat 2019-07-06 08:28:02 EDT",

        "ActiveEnterTimestampMonotonic": "31411371",

        "ActiveExitTimestampMonotonic": "0",

        "ActiveState": "activo",

        "Tras": "sysinit.target system.slice systemd-journald.socket basic.target network.target",

        "AllowIsolate": "no",

        "AmbientCapabilities": "",

        "AssertResult": "",

        "AssertTimestamp": "Sat 2019-07-06 08:27:59 EDT",

        "AssertTimestampMonotonic": "27694868",

        "Antes": "multi-user.target shutdown.target",

        "BlockIOAccounting": "no",

        "BlockIOWeight": "[no establecido]",

        "CPUAccounting": "[no]",

        "CPUQuotaPerSecUSec": "infinito",

        "CanReload": "yes",

        "CanStart": "sí": "yes",

        "CanStop": "sí": "yes",

        "CapabilityBoundingSet": "cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend",

        "CollectMode": "inactivo",

        "ConditionResult": "sí",

        "ConditionTimestamp": "Sat 2019-07-06 08:27:59 EDT",

        "ConditionTimestampMonotonic": "27694867",

        "ConfigurationDirectoryMode": "0755",

        "Conflictos": "apagado.objetivo",

        "Grupo de control": "/system.slice/nginx.service",

        "ControlPID": "0",

        "DefaultDependencies": "Sí",

        "Delegate": "no",

        "Descripción": "Un servidor web de alto rendimiento y un servidor proxy inverso",

        "DevicePolicy": "auto",

        "Documentación": "man:nginx(8)",

        "DynamicUser": "no",

  }

}

Comprobación del sistema

El comando ad-hoc de ansible que se menciona a continuación ejecuta un módulo shell para comprobar el disco disponible en las particiones raíz.

root@geekflare:/home/geekflare# ansible Client -m shell -a 'df -h /dev/sda2' --become

nodo1 | CAMBIADO | rc=0 >>

Filesystem Size Used Avail Use% Montado en

/dev/sda2 923M 113M 748M 14% /boot

Este comando mencionado a continuación ejecuta un módulo shell para comprobar la memoria libre (RAM) en el host.

root@geekflare:/home/geekflare# ansible Client -m shell -a 'free -m' --become

nodo1 | CAMBIADO | rc=0 >>

              total usado libre compartido buff/cache disponible

Mem:           5101 854 2760 27 1487 3947

Swap: 8581 0 8581

Este comando comprueba el tiempo de actividad de cada servidor en ejecución.

root@geekflare:/home/geekflare# Cliente ansible -a "tiempo de actividad"

nodo1 | CAMBIADO | rc=0 >>

 11:31:17 up 1 día, 2:40, 2 usuarios, carga media: 0.23, 0.05, 0.02

Recopilación de datos

El siguiente comando ad-hoc de ansible le proporcionará toda la información ad-hoc de su sistema, incluidas todas las variables presentes en el mismo.

root@geekflare:/home/geekflare# ansible all -m setup

nodo1 | SUCCESS => {

    "ansible_facts": {

        "ansible_all_ipv4_addresses": [

            "172.17.0.1",

            "10.0.2.15"

        ],

        "ansible_all_ipv6_addresses": [

            "fe80::763e:c0b4:14df:b273"

        ],

        "ansible_apparmor": {

            "estado": "enabled"

        },

        "ansible_architecture": "x86_64",

        "ansible_bios_date": "12/01/2006",

        "ansible_bios_version": "VirtualBox",

        "ansible_cmdline": {

            "BOOT_IMAGE": "/vmlinuz-4.18.0-25-generic",

            "quiet": verdadero,

            "ro": true,

            "raíz": "UUID=5f85d8b7-0ab2-48c9-9e6e-4ecfbcbdaa83",

            "splash": true

        },

        "ansible_date_time": {

            "date": "2019-07-07",

            "día": "07",

            "época": "1562525628",

            "hora": "14",

            "iso8601": "2019-07-07T18:53:48Z",

            "iso8601_basic": "20190707T145348850596",

            "iso8601_basic_short": "20190707T145348",

            "iso8601_micro": "2019-07-07T18:53:48.850697Z",

            "minuto": "53",

            "mes": "07",

            "segundo": "48",

            "hora": "14:53:48",

            "tz": "EDT",

            "tz_offset": "-0400",

            "día de la semana": "domingo",

            "número_día_semana": "0",

            "número_de_semana": "26",

            "year": "2019"

        },

        "ansible_default_ipv4": {

            "dirección": "10.0.2.15",

            "alias": "enp0s3",

            "difusión": "10.0.2.255",

            "puerta de enlace": "10.0.2.2",

            "interfaz": "enp0s3",

            "macaddress": "08:00:27:68:64:9a",

            "mtu" 1500,

            "máscara de red": "255.255.255.0",

            "red": "10.0.2.0",

            "tipo": "éter"

        },

        "ansible_default_ipv6": {},

        "ansible_device_links": {

            "ids": {

                "sda": [

                    "ata-VBOX_HARDDISK_VB3a0a2351-0b6c0ed5"

                ],

                "sda1": [

                    "ata-VBOX_HARDDISK_VB3a0a2351-0b6c0ed5-part1"

                ],

                "sda2": [

                    "ata-VBOX_HARDDISK_VB3a0a2351-0b6c0ed5-part2"

                ],

                "sda3": [

                    "ata-VBOX_HARDDISK_VB3a0a2351-0b6c0ed5-part3"

                ],

                "sda4": [

                    "ata-VBOX_HARDDISK_VB3a0a2351-0b6c0ed5-part4"

                ],

                "sr0": [

                    "ata-VBOX_CD-ROM_VB2-01700376"

                ]

            },

            "etiquetas": {

                "sr0": [

                    "VBox_GAs_6.0.2"

                ]

            },

            "maestros": {},

            "uuids": {

                "sda1": [

                    "5f85d8b7-0ab2-48c9-9e6e-4ecfbcbdaa83"

                ],

                "sda2": [

                    "b8b7f87b-c3bf-48ed-a44c-f9b3ce0afbe5"

                ],

                "sda3": [

                    "a6c77fa6-e292-4a0d-b21f-8804f1949bbd"

                ],

                "sda4": [

                    "8207f970-4d9a-47db-a5d5-f620e5b17b7b"

                ],

                "sr0": [

                    "2019-01-14-14-57-19-65"

                ]

            }

        },

        "ansible_devices": {

            "loop0": {

                "soportes": [],

                "anfitrión": "",

                "enlaces": {

                    "ids": [],

                    "etiquetas": [],

                    "maestros": [],

                    "uuids": []

                },

                "modelo": null

                "particiones": {},

                "extraíble": "0",

                "giratorio": "1",

                "sas_address": null,

                "sas_device_handle": null,

                "scheduler_mode": "none",

                "sectores": "29704",

                "tamaño de sector": "512",

                "tamaño": "14,50 MB",

                "disco_soporte": "4096",

                "vendedor": null,

                "virtual": 1

            },

            "bucle1": {

                "soportes": [],

                "anfitrión": "",

                "enlaces": {

                    "ids": [],

                    "etiquetas": [],

                    "maestros": [],

                    "uuids": []

                },

                "modelo": null

                "particiones": {},

                "extraíble": "0",

                "giratorio": "1",

                "sas_address": null,

                "sas_device_handle": null,

                "scheduler_mode": "none",

                "sectores": "0",

                "tamaño de sector": "512",

                "tamaño": "0.00 Bytes",

                "support_discard": "4096",

                "vendedor": null,

                "virtual": 1

            },

}

Así que, eso fue todo acerca de los comandos Ansible Ad-hoc. Siga adelante y pruebe estos comandos en su configuración ansible. Utilice estos comandos para ejecutar módulos ansible sin escribir ningún playbook Ansible para realizar esas tareas. Deje un comentario si se enfrenta a cualquier problema en la ejecución de estos comandos.