An ad-hoc command is a one-off, while a playbook is reusable. The ad-hoc command runs one module against a set of hosts, straight from the command line with the ansible tool. The playbook is a YAML file of ordered plays and tasks. You run it with ansible-playbook and keep it in version control.
# Check that every web server responds
ansible webservers -m ansible.builtin.ping
# Restart a service on all of them, with sudo
ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted" --become
# Reboot a group of servers
ansible atlanta -a "/sbin/reboot"
-m picks the module and -a passes its arguments. Without -m, Ansible runs the command module.
Use ad-hoc commands for quick, one-off jobs, such as checking connectivity or rebooting a group of servers. They are fast to type but not reusable.
Use a playbook for anything you will repeat or review. It chains many tasks with variables, handlers and roles, and it runs the same way every time. Both call the same modules, so an ad-hoc command that works turns into a playbook task almost word for word.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓