AnsibleXXXIX · Automation Platforms, RBAC and Event-DrivenAutomation platforms, RBAC and event-driven automation
What a platform adds over the command line
What you'll learn
- State what an ansible-playbook run leaves behind on the controller by default
- Name the six capabilities a platform adds and the problem each one solves
- Distinguish AWX from Red Hat Ansible Automation Platform accurately
- Decide whether your estate has the problem a platform solves
Prerequisites
Verified against ansible-core 2.21.x · ansible (community package) 14.x · Python (controller) 3.12+ · ansible-lint 26.x · Molecule 26.x · Ubuntu 24.04 LTS · Debian 12 (Bookworm) · RHEL / Rocky / AlmaLinux 9.x · 2026-08-11
Six weeks after a change, somebody asks the question that decides whether this part is worth reading:
Three hundred servers had their
sshd_configrewritten on the 14th of March. Who ran that, against which hosts, from which commit, and what did it change?
If the answer is “let me ask around”, the estate has the problem an automation platform solves. If the answer is a URL, it already does not.
Everything else a platform offers — scheduling, workflows, an API, a web interface — is real, and none of it is the argument. The argument is that a run history outlives the person who ran the job.
What a command-line run leaves behind
This is worth establishing precisely rather than assuming, because most teams believe they have more of a record than they do.
By default, ansible-playbook writes nothing to disk. The configuration
setting that would change that describes itself unambiguously:
$ ansible-config list | grep -A 5 '^DEFAULT_LOG_PATH:'DEFAULT_LOG_PATH:
default: null
description:
- File to which Ansible will log on the controller.
- When not set the logging is disabled.“When not set the logging is disabled” is the whole of it. On a stock controller, a run that changed three hundred servers exists in exactly two places: the operator’s terminal scrollback, and the servers themselves.
So you set log_path, which is the right thing to do and which every
serious controller should have. Here is what you then have:
$ ANSIBLE_LOG_PATH=./run.log ansible-playbook -i inventory.ini patch.yml \
--limit web01.example.com -e '{"package_state":"latest"}'
cat run.log2026-08-11 22:23:37,295 p=162009 u=ebrandi n=ansible INFO| PLAY [Patch the web tier] ******
2026-08-11 22:23:37,298 p=162009 u=ebrandi n=ansible INFO| TASK [Update all packages] *****
2026-08-11 22:23:37,308 p=162009 u=ebrandi n=ansible INFO| ok: [web01.example.com] => {
"msg": "stand-in for a package update on web01.example.com"
}
2026-08-11 22:23:37,309 p=162009 u=ebrandi n=ansible INFO| TASK [Restart the service] *****
2026-08-11 22:23:37,317 p=162009 u=ebrandi n=ansible INFO| ok: [web01.example.com] => {
"msg": "stand-in for a service restart on web01.example.com"
}
2026-08-11 22:23:37,318 p=162009 u=ebrandi n=ansible INFO| PLAY RECAP *********************
2026-08-11 22:23:37,318 p=162009 u=ebrandi n=ansible INFO| web01.example.com : ok=2 changed=0 unreachable=0 failed=0You get a timestamp, a process ID, and a username. That is genuinely useful and it is more than most teams have.
Now read it for what it does not contain.
That is the shape of the problem. Not “we have no logs” — most teams have some — but “our logs cannot reconstruct the decision”.
The six things a platform adds
A platform in this sense is AWX or Red Hat Ansible Automation Platform’s
automation controller component. Both wrap ansible-playbook rather than
replacing it: the same collections, the same modules, the same YAML.
| What it adds | The problem it solves | Roughly, the CLI equivalent |
|---|---|---|
| Run history | Who changed what, when, with which arguments, against which hosts | log_path plus a discipline nobody keeps |
| Central execution | Every run happens in one environment, not on fourteen laptops with fourteen collection versions | A shared controller and a pinned virtualenv |
| Credential storage | Secrets live somewhere other than on the machines of the people who use them | A vault password file, readable by whoever can run the playbook |
| Inventories as objects | One authoritative host list with a change history, rather than an -i argument someone typed | A checked-in inventory directory |
| Job templates | A saved, reviewed, named invocation instead of a command line reconstructed from memory | A wrapper script in the repository |
| RBAC | Who may edit, who may run, against what, with which credentials — enforced rather than documented | sudo policy, separate controllers, per-environment vault identities |
Every row has a CLI equivalent, which is why this course does not depend on either product. Read the right-hand column as the thing you should build anyway. A platform’s real contribution is that its version is enforced rather than agreed.
What it does not add
This is the section that keeps the rest of the course honest.
A platform does not make an unsafe playbook safe. A play with
hosts: all and no serial is exactly as dangerous inside a job
template as it is at a shell prompt. It now has a button, a schedule, and
an audit trail proving you did it.
A platform does not test your automation. Check mode, lint, Molecule
and staging remain yours. A job template can run --check; it will not
decide that it should have.
A platform does not fix your inventory. If the group webservers
contains a database, the platform faithfully reproduces that error with
better logging.
A platform does not remove the need to understand ansible-playbook.
The web form is a command-line builder. Every field maps to an argument
you already know, and when a job fails the output you read is the output
this course has been teaching you to read since Part XI.
AWX and Ansible Automation Platform, stated accurately
These names are used loosely in the wild and the distinction matters when you are choosing.
AWX is the open-source upstream project. It provides a web UI, a REST API and a task engine on top of Ansible. Development happens here first and releases are frequent. It is community-supported: no Red Hat subscription, no support contract, no lifecycle guarantees.
Red Hat Ansible Automation Platform is the commercial product. Automation controller is the component within it that corresponds to AWX. It is produced by taking selected AWX releases and hardening them for long-term supportability, and it comes with Red Hat support.
The relationship is the familiar upstream/downstream one: AWX is to automation controller roughly what Fedora is to RHEL.
Deciding whether you need one
The honest test is not headcount or server count. It is these four questions:
- Can you reconstruct who ran what, six weeks later, without asking a person? If not, you have the problem.
- Does more than one person run automation against production? If not, most of a platform is overhead you do not need yet.
- Do the people who run automation need to hold the credentials it uses? If the answer should be no and is currently yes, that is the security argument, and it is covered in lesson 4.
- Does anything need to run when nobody is at a keyboard? Cron on the controller answers this adequately for a long time. Lesson 5 covers where it stops being adequate.
A three-person team with one controller, a checked-in inventory, a vault
password file with sane permissions and log_path enabled is in a
defensible position and does not need to buy or deploy anything.
A twenty-person estate where four teams run automation against a shared production fleet and everyone has the vault password has a real problem, and it is not primarily a tooling problem — it is a blast-radius problem wearing tooling clothes. Which is the subject of lesson 3.
Knowledge check
Knowledge check · 4 questions
Q1. A controller has log_path set and has been logging every run for a year. An auditor asks which hosts a specific run on 14 March targeted. What does the log tell you?
Q2. Which of these are things an automation platform genuinely provides that are awkward to reproduce with a shell script and cron? Select all that apply.
Q3. AWX is the supported commercial product and automation controller is its community-supported upstream.
Q4. A team adopts a controller and, within six months, engineers regularly ssh to the controller host and run playbooks directly because a job template lacks an option they need. What is the most serious consequence?
Passing score: 75%. Answers are checked in this browser.