OPERATOR_GITHUB_IDS (<input I3>). There is no operator role in the database to grant by hand:
the control plane sets cp.users.is_operator from that list at every sign-in and once at every
start, and every operator route also checks the id against the loaded list
(../reference/control-plane-api.md section 5.1). Operators
get no Umami access and are not members of any project.
The list is the Ansible variable sa_operator_github_ids, a comma-separated string of numeric
ids, set per environment in infra/ansible/inventories/<env>/group_vars/all.yml. bootstrap.yml
refuses to run without it or with anything other than digits and commas.
Find the numeric id
The login can change; the id cannot. Look it up from the login the person gives you:Add an operator
-
Add the id to
sa_operator_github_idsininfra/ansible/inventories/<env>/group_vars/all.yml, for examplesa_operator_github_ids: "<id 1>,<id 2>", and commit it with a line in the change description saying who and why. -
Converge the core nodes so the control plane gets the new list:
The core compose file changes (
OPERATOR_GITHUB_IDS), socontrolplaneis recreated on both core nodes. At start it syncs the flag for every user; each changed user gets an audit rowuser.operator_sync(actorsystem:startup). -
The person signs in to
https://app.<input I4>/. The operator area appears in the console. If they had never signed in before, their user row is created at that sign-in with the flag set.
Remove an operator
-
Remove the id from
sa_operator_github_ids, commit, and converge as above. -
When the control plane restarts, it sets
is_operator = falsefor that user and writesuser.operator_sync. From then on every operator route answers403 operator_requiredfor them, even with a session that is still open. -
Revoke the operator API keys that person created, unless another operator takes them over
knowingly (operator-key-revocation.md). To list them, on the
database leader:
-
If the removal is because the account may be compromised, also end that person’s console
sessions at once:
and follow security-incident.md.
Exercised
Not yet exercised with real GitHub accounts (input I2 for the OAuth app, I3 for the ids) or on a
deployed environment.