An empty AWX instance describes an incomplete API
AWX hides POST on endpoints you have nothing to create against, so an empty instance hands back a schema that looks fine and is missing half its fields.
If you read the AWX API description off a fresh instance, you get back less than the API actually has, and nothing anywhere tells you that.
AWX hides POST on endpoints the user has nothing to create against, which sounds reasonable until you are reading the description programmatically. So download from an empty instance and every writable attribute comes off hosts, inventory_sources and job_templates.
There’s no error anywhere in that.
The schema comes back, it looks perfectly reasonable, and it is quietly missing half of the fields you actually need.
Approval templates are worse, because they have no list endpoint at all.
The description has to come from an instance URL, which means one has to exist before there is anything for AWX to describe.
curl -sk -u admin:password -X OPTIONS \ https://awx.example.com/api/v2/hosts/ | jq '.actions | keys'On an empty instance that gives you back ["GET"], and once it’s seeded you get ["GET", "POST"], where the POST block is the part carrying every writable field.
So we seed the instance before reading anything off it, and it has to be seeded with the kinds of object whose endpoints go quiet.
An organization, a project, an inventory, a host and a group, a job template with a survey and a schedule, a workflow with an approval node, a couple of credentials, a team and a user.
That is enough to light up the endpoints that otherwise go quiet.
I generate a terraform provider from this description, so for me it showed up as overrides in the config, fields I’d marked as needing correction because AWX was being inconsistent about them.
AWX was being perfectly consistent. I was reading the description off whatever instance I had lying around, which was sometimes seeded and sometimes not.
So that went unnoticed for years, and I only found it by accident.