• Get application security done the right way! Detect, Protect, Monitor, Accelerate, and more…
  • Ad-hoc Commands are used in Ansible to execute tasks instantly, and you need not save them for later use. This article is all about Ansible Ad-hoc Command.

    There are multiple tasks in Ansible where you don’t need to write a separate Ansible playbook for it; you can just run an ansible ad-hoc command for that task. These are one-liner command to perform a single task on the target host. These commands are present in /usr/bin/ansible

    Tasks like pinging all the hosts to check if they are running, copying a file, rebooting servers, installing a package can be easily done through Ansible Ad-hoc Commands. Here is a list of fundamental Ansible Ad-hoc commands which you must know.

    Basic Commands

    The ad-hoc command below runs a ping module on all the hosts in the inventory file. Here -m is the option for a module.

    [email protected]:/home/geekflare# ansible all -m ping
    node1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }

    The command mentioned below runs setup module on a group of hosts – Client present in the inventory file ‘/etc/ansible/hosts’.

    [email protected]:/home/geekflare# ansible Client -m setup -a "filter=ansible_distribution*"
    node1 | SUCCESS => {
        "ansible_facts": {
            "ansible_distribution": "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", 
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false
    }

    The command below is used to prompt SSH password authentication. You need to add –ask-pass option at the end of the command. After running the command, it will ask you to enter the SSH password.

    [email protected]:/home/geekflare# ansible Client -m ping --ask-pass
    SSH password: 
    node1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }

    The command below gives you the feature of running ad-hoc commands as a non-root user with root privileges. The option --become gives the root privileges and -K option asks for the password.

    [email protected]:/home/geekflare# ansible Client -m shell -a 'fdisk -l' -u geekflare --become -K
    BECOME password: 
    node1 | CHANGED | rc=0 >>
    Disk /dev/loop0: 14.5 MiB, 15208448 bytes, 29704 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/loop2: 42.1 MiB, 44183552 bytes, 86296 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/loop3: 149.9 MiB, 157184000 bytes, 307000 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/loop5: 140.7 MiB, 147501056 bytes, 288088 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/loop6: 151.2 MiB, 158584832 bytes, 309736 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/loop7: 14.8 MiB, 15458304 bytes, 30192 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    
    Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xcef957f5
    
    Device     Boot     Start        End   Sectors   Size Id Type
    /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
    
    
    Disk /dev/loop8: 4 MiB, 4218880 bytes, 8240 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    This ad-hoc command is used to reboot the system with -f option for defining the number of forks.

    [email protected]:/home/geekflare# ansible Client -a "/sbin/reboot" -f 1

    File Transfer

    The ansible ad-hoc command below is used to copy a file from a source to a destination for a group of hosts (Client) defined in the inventory file. After you enter the password, the output with “change” parameter will be “true”, which means the file has been copied to the destination.

    [email protected]:/home/geekflare# ansible Client -m copy -a 'src=/home/geekflare/nginx.yml dest=/home/geekflare/Desktop/ owner=root mode=0644' -u root --become -K
    BECOME password: 
    node1 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": true, 
        "checksum": "5631822866afd5f19b928edb3ba018385df22dd3", 
        "dest": "/home/geekflare/Desktop/nginx.yml", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "0d6ffe1069fc25ad4f8ad700277c4634", 
        "mode": "0644", 
        "owner": "root", 
        "size": 280, 
        "src": "/root/.ansible/tmp/ansible-tmp-1562253463.3-214622150088155/source", 
        "state": "file", 
        "uid": 0
    }

    Run the below command to verify if the copy module worked correctly or not. The copied file should come at the destination mentioned in the previous command.

    [email protected]:/home/geekflare# ls Desktop/
    
    nginx.yml

    I am creating a new directory to run fetch module n next ad-hoc command.

    [email protected]:/home/geekflare# mkdir example
    
    [email protected]:/home/geekflare# ls
    
    Desktop  Documents  example  examples.desktop  nginx_new.yml  nginx.yml

    The ansible ad-hoc command below is used to download a file from a host defined in the command. In this command, we are downloading a file using fetch module from node1 server to a local destination on ansible node.

    [email protected]:/home/geekflare# ansible node1 -m fetch -a 'src=/etc/sudoers.d/nginx.yml dest=/home/geekflare/example/ flat=yes'
    
    node1 | SUCCESS => {
    
        "changed": false,
    
        "checksum": "5631822866afd5f19b928edb3ba018385df22dd3",
    
        "dest": "/home/geekflare/example/nginx.yml",
    
        "file": "/etc/sudoers.d/nginx.yml",
    
        "md5sum": "0d6ffe1069fc25ad4f8ad700277c4634"
    
    }

    Check if the file got downloaded or not at the destination mentioned in the command.

    [email protected]:/home/geekflare# ls example
    
    nginx.yml

    Manage Packages

    The command mentioned below installs nginx on a group of hosts (Client) mentioned using an apt module.

    [email protected]:/home/geekflare# ansible Client -m apt -a 'name=nginx state=latest' --become
    
    node1 | SUCCESS => {
    
        "ansible_facts": {
    
            "discovered_interpreter_python": "/usr/bin/python"
    
        },
    
        "cache_update_time": 1562411227,
    
        "cache_updated": false,
    
        "changed": false
    
    }

    The command mentioned below removes nginx on a group of hosts (Client) using apt module and purges all the related configurations.

    [email protected]:/home/geekflare# ansible Client -m apt -a 'name=nginx state=absent purge=yes' --become
    
    node1 | CHANGED => {
    
        "ansible_facts": {
    
            "discovered_interpreter_python": "/usr/bin/python"
    
        },
    
        "changed": true,
    
        "stderr": "",
    
        "stderr_lines": [],
    
        "stdout": "Reading package lists...\nBuilding dependency tree...\nReading state information...\nThe following packages were automatically installed and are no longer required:\n  libnginx-mod-http-geoip libnginx-mod-http-image-filter\n  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream\n  nginx-common nginx-core\nUse 'sudo apt autoremove' to remove them.\nThe following packages will be REMOVED:\n  nginx*\n0 upgraded, 0 newly installed, 1 to remove and 241 not upgraded.\nAfter this operation, 44.0 kB disk space will be freed.\n(Reading database ... \r(Reading database ... 5%\r(Reading database ... 10%\r(Reading database ... 15%\r(Reading database ... 20%\r(Reading database ... 25%\r(Reading database ... 30%\r(Reading database ... 35%\r(Reading database ... 40%\r(Reading database ... 45%\r(Reading database ... 50%\r(Reading database ... 55%\r(Reading database ... 60%\r(Reading database ... 65%\r(Reading database ... 70%\r(Reading database ... 75%\r(Reading database ... 80%\r(Reading database ... 85%\r(Reading database ... 90%\r(Reading database ... 95%\r(Reading database ... 100%\r(Reading database ... 180191 files and directories currently installed.)\r\nRemoving nginx (1.15.5-0ubuntu2.1) ...\r\n",
    
        "stdout_lines": [
    
            "Reading package lists...",
    
            "Building dependency tree...",
    
            "Reading state information...",
    
            "The following packages were automatically installed and are no longer required:",
    
            "  libnginx-mod-http-geoip libnginx-mod-http-image-filter",
    
            "  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream",
    
            "  nginx-common nginx-core",
    
            "Use 'sudo apt autoremove' to remove them.",
    
            "The following packages will be REMOVED:",
    
            "  nginx*",
    
            "0 upgraded, 0 newly installed, 1 to remove and 241 not upgraded.",
    
            "After this operation, 44.0 kB disk space will be freed.",
    
            "(Reading database ... ",
    
            "(Reading database ... 5%",
    
            "(Reading database ... 10%",
    
            "(Reading database ... 15%",
    
            "(Reading database ... 20%",
    
            "(Reading database ... 25%",
    
            "(Reading database ... 30%",
    
            "(Reading database ... 35%",
    
            "(Reading database ... 40%",
    
            "(Reading database ... 45%",
    
            "(Reading database ... 50%",
    
            "(Reading database ... 55%",
    
            "(Reading database ... 60%",
    
            "(Reading database ... 65%",
    
            "(Reading database ... 70%",
    
            "(Reading database ... 75%",
    
            "(Reading database ... 80%",
    
            "(Reading database ... 85%",
    
            "(Reading database ... 90%",
    
            "(Reading database ... 95%",
    
            "(Reading database ... 100%",
    
            "(Reading database ... 180191 files and directories currently installed.)",
    
            "Removing nginx (1.15.5-0ubuntu2.1) ..."
    
        ]
    
    }

    Manage Services

    The ansible ad-hoc command below runs service module to start nginx on the host. The state value should be started.

    [email protected]:/home/geekflare# ansible Client -m service -a 'name=nginx state=started enabled=yes' --become
    
    node1 | SUCCESS => {
    
        "ansible_facts": {
    
            "discovered_interpreter_python": "/usr/bin/python"
    
        },
    
        "changed": false,
    
        "enabled": true,
    
        "name": "nginx",
    
        "state": "started",
    
        "status": {
    
            "ActiveEnterTimestamp": "Sat 2019-07-06 08:28:02 EDT",
    
            "ActiveEnterTimestampMonotonic": "31411371",
    
            "ActiveExitTimestampMonotonic": "0",
    
            "ActiveState": "active",
    
            "After": "sysinit.target system.slice systemd-journald.socket basic.target network.target",
    
            "AllowIsolate": "no",
    
            "AmbientCapabilities": "",
    
            "AssertResult": "yes",
    
            "AssertTimestamp": "Sat 2019-07-06 08:27:59 EDT",
    
            "AssertTimestampMonotonic": "27694868",
    
            "Before": "multi-user.target shutdown.target",
    
            "BlockIOAccounting": "no",
    
            "BlockIOWeight": "[not set]",
    
            "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": "inactive",
    
            "ConditionResult": "yes",
    
            "ConditionTimestamp": "Sat 2019-07-06 08:27:59 EDT",
    
            "ConditionTimestampMonotonic": "27694867",
    
            "ConfigurationDirectoryMode": "0755",
    
            "Conflicts": "shutdown.target",
    
            "ControlGroup": "/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": "none",
    
            "FileDescriptorStoreMax": "0",
    
            "FragmentPath": "/lib/systemd/system/nginx.service",
    
            "GID": "[not set]",
    
            "GuessMainPID": "yes",
    
            "IOAccounting": "no",
    
            "IOSchedulingClass": "0",
    
            "IOSchedulingPriority": "0",
    
            "IOWeight": "[not set]",
    
        }
    
    }

    The below runs service module to stop nginx on the host. The state value changes to stopped.

    [email protected]:/home/geekflare# ansible Client -m service -a 'name=nginx state=stopped' --become
    
    node1 | CHANGED => {
    
        "ansible_facts": {
    
            "discovered_interpreter_python": "/usr/bin/python"
    
        },
    
        "changed": true,
    
        "name": "nginx",
    
        "state": "stopped",
    
        "status": {
    
            "ActiveEnterTimestamp": "Sat 2019-07-06 08:28:02 EDT",
    
            "ActiveEnterTimestampMonotonic": "31411371",
    
            "ActiveExitTimestampMonotonic": "0",
    
            "ActiveState": "active",
    
            "After": "sysinit.target system.slice systemd-journald.socket basic.target network.target",
    
            "AllowIsolate": "no",
    
            "AmbientCapabilities": "",
    
            "AssertResult": "yes",
    
            "AssertTimestamp": "Sat 2019-07-06 08:27:59 EDT",
    
            "AssertTimestampMonotonic": "27694868",
    
            "Before": "multi-user.target shutdown.target",
    
            "BlockIOAccounting": "no",
    
            "BlockIOWeight": "[not set]",
    
            "CPUAccounting": "no",
    
            "CPUQuotaPerSecUSec": "infinity",
    
            "CanReload": "yes",
    
            "CanStart": "yes",
    
            "CanStop": "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": "inactive",
    
            "ConditionResult": "yes",
    
            "ConditionTimestamp": "Sat 2019-07-06 08:27:59 EDT",
    
            "ConditionTimestampMonotonic": "27694867",
    
            "ConfigurationDirectoryMode": "0755",
    
            "Conflicts": "shutdown.target",
    
            "ControlGroup": "/system.slice/nginx.service",
    
            "ControlPID": "0",
    
            "DefaultDependencies": "yes",
    
            "Delegate": "no",
    
            "Description": "A high performance web server and a reverse proxy server",
    
            "DevicePolicy": "auto",
    
            "Documentation": "man:nginx(8)",
    
            "DynamicUser": "no",
    
      }
    
    }

    Checking the System

    The ansible ad-hoc command mentioned below runs a shell module to check the disk available at root partitions.

    [email protected]:/home/geekflare# ansible Client -m shell -a 'df -h /dev/sda2' --become
    
    node1 | CHANGED | rc=0 >>
    
    Filesystem      Size  Used Avail Use% Mounted on
    
    /dev/sda2       923M  113M  748M  14% /boot

    This command mentioned below runs a shell module to check the free memory (RAM) on the host.

    [email protected]:/home/geekflare# ansible Client -m shell -a 'free -m' --become
    
    node1 | CHANGED | rc=0 >>
    
                  total        used        free      shared  buff/cache   available
    
    Mem:           5101         854        2760          27        1487        3947
    
    Swap:          8581           0        8581

    This command checks the uptime of each server running.

    [email protected]:/home/geekflare# ansible Client -a "uptime"
    
    node1 | CHANGED | rc=0 >>
    
     11:31:17 up 1 day,  2:40,  2 users,  load average: 0.23, 0.05, 0.02

    Gathering Facts

    The ansible ad-hoc command below will give you all the ad-hoc information of your system, including all the variables present in the system.

    [email protected]:/home/geekflare# ansible all -m setup
    
    node1 | 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": {
    
                "status": "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": true,
    
                "ro": true,
    
                "root": "UUID=5f85d8b7-0ab2-48c9-9e6e-4ecfbcbdaa83",
    
                "splash": true
    
            },
    
            "ansible_date_time": {
    
                "date": "2019-07-07",
    
                "day": "07",
    
                "epoch": "1562525628",
    
                "hour": "14",
    
                "iso8601": "2019-07-07T18:53:48Z",
    
                "iso8601_basic": "20190707T145348850596",
    
                "iso8601_basic_short": "20190707T145348",
    
                "iso8601_micro": "2019-07-07T18:53:48.850697Z",
    
                "minute": "53",
    
                "month": "07",
    
                "second": "48",
    
                "time": "14:53:48",
    
                "tz": "EDT",
    
                "tz_offset": "-0400",
    
                "weekday": "Sunday",
    
                "weekday_number": "0",
    
                "weeknumber": "26",
    
                "year": "2019"
    
            },
    
            "ansible_default_ipv4": {
    
                "address": "10.0.2.15",
    
                "alias": "enp0s3",
    
                "broadcast": "10.0.2.255",
    
                "gateway": "10.0.2.2",
    
                "interface": "enp0s3",
    
                "macaddress": "08:00:27:68:64:9a",
    
                "mtu": 1500,
    
                "netmask": "255.255.255.0",
    
                "network": "10.0.2.0",
    
                "type": "ether"
    
            },
    
            "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"
    
                    ]
    
                },
    
                "labels": {
    
                    "sr0": [
    
                        "VBox_GAs_6.0.2"
    
                    ]
    
                },
    
                "masters": {},
    
                "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": {
    
                    "holders": [],
    
                    "host": "",
    
                    "links": {
    
                        "ids": [],
    
                        "labels": [],
    
                        "masters": [],
    
                        "uuids": []
    
                    },
    
                    "model": null,
    
                    "partitions": {},
    
                    "removable": "0",
    
                    "rotational": "1",
    
                    "sas_address": null,
    
                    "sas_device_handle": null,
    
                    "scheduler_mode": "none",
    
                    "sectors": "29704",
    
                    "sectorsize": "512",
    
                    "size": "14.50 MB",
    
                    "support_discard": "4096",
    
                    "vendor": null,
    
                    "virtual": 1
    
                },
    
                "loop1": {
    
                    "holders": [],
    
                    "host": "",
    
                    "links": {
    
                        "ids": [],
    
                        "labels": [],
    
                        "masters": [],
    
                        "uuids": []
    
                    },
    
                    "model": null,
    
                    "partitions": {},
    
                    "removable": "0",
    
                    "rotational": "1",
    
                    "sas_address": null,
    
                    "sas_device_handle": null,
    
                    "scheduler_mode": "none",
    
                    "sectors": "0",
    
                    "sectorsize": "512",
    
                    "size": "0.00 Bytes",
    
                    "support_discard": "4096",
    
                    "vendor": null,
    
                    "virtual": 1
    
                },
    
    }

    So, that was all about Ansible Ad-hoc Commands. Go ahead and try these commands on your ansible setup. Use these commands to run ansible modules without writing any Ansible playbook to perform those tasks. Drop a comment if you face any issue in running these commands.