Ansible: desired state, applied without an agent
Every mechanism has a step-by-step animation, the configuration explained line by line and the exam notes. Where a parameter changes the outcome, you get a simulator in which you change it yourself.
TL;DR
Ansible runs only on the control node: it reads the inventory and a YAML playbook, connects itself to every device (SSH with Python on servers, network_cli / netconf / httpapi on network devices) and brings each host to the described state. Every module compares the desired state with the real one and changes only the difference, which is why the second run gives changed=0. Variables and Jinja2 templates produce different configurations from the same text; handlers run once, at the end; resource modules describe state in a structured way, with merged / replaced / overridden / deleted. Secrets live in Vault, scaling is done with forks and serial, and in production the playbook runs from CI or from AWX, with inventory from NetBox and validation with pyATS.
How to read the notes: red = critical for the exam, green = theory, blue = numbers, yellow = pitfalls, cyan = differences between platforms, collections and versions, and where Ansible stands next to the other tools. In the animations, the configuration lines used at the current step are highlighted automatically; the ← → arrows change the step when the animation is selected.
The analogy, in short
Think of a gardening company with work sheets: the office writes once “hedge at 1.2 m” and sends mobile crews to every garden; nobody lives there, the crew arrives, measures, trims only what is needed and leaves. At houses with an intercom they don’t go in: they dictate instructions to the resident gardener, in his language.
The model holds up to §12. From §13 onwards (CI/CD, NetBox, pyATS) it breaks down; see the full analogy and its limits in §16.