Skip to main content
RunBook Academy

AnsibleXXXIX · Automation Platforms, RBAC and Event-DrivenAutomation platforms, RBAC and event-driven automation

What a platform adds over the command line

Intermediate⏱ ~24 minansible-playbookansible-config

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

Not yet marked complete on this device.

Six weeks after a change, somebody asks the question that decides whether this part is worth reading:

Three hundred servers had their sshd_config rewritten 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:

Read-only / Safethe controller keeps no record unless you ask it to
$ 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:

Configuration changea logged run - the full log file, nothing omitted
$ ANSIBLE_LOG_PATH=./run.log ansible-playbook -i inventory.ini patch.yml \
--limit web01.example.com -e '{"package_state":"latest"}'
cat run.log
2026-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=0

You 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 addsThe problem it solvesRoughly, the CLI equivalent
Run historyWho changed what, when, with which arguments, against which hostslog_path plus a discipline nobody keeps
Central executionEvery run happens in one environment, not on fourteen laptops with fourteen collection versionsA shared controller and a pinned virtualenv
Credential storageSecrets live somewhere other than on the machines of the people who use themA vault password file, readable by whoever can run the playbook
Inventories as objectsOne authoritative host list with a change history, rather than an -i argument someone typedA checked-in inventory directory
Job templatesA saved, reviewed, named invocation instead of a command line reconstructed from memoryA wrapper script in the repository
RBACWho may edit, who may run, against what, with which credentials — enforced rather than documentedsudo 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:

  1. Can you reconstruct who ran what, six weeks later, without asking a person? If not, you have the problem.
  2. Does more than one person run automation against production? If not, most of a platform is overhead you do not need yet.
  3. 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.
  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

  1. 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?

  2. 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.

  3. Q3. AWX is the supported commercial product and automation controller is its community-supported upstream.

  4. 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.