Add deployer Role+RoleBinding for the authelia namespace (unblock authelia CD roll, deploy#27/#28) #464
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/infrastructure#464
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Add a
deployerRole + RoleBinding pair for theauthelianamespace todeploy/forgejo-runner-deploy.yml, so the forgejo in-clusterdeployerServiceAccount can roll the Authelia bundle via CD (coilyco-bridge/deploy.forgejo/workflows/deploy-authelia.yml, on a push touchingservices/authelia/**).Every other CD-rolled namespace already has this pair in the same file (atlas, coilysiren-eco-app, open-webui, node-stats-mcp, coilysiren-eco-gnome).
autheliais the one missing, so its CD roll would be denied at apply until this lands.Context
89d1244). The Authelia bundle lives atcoilyco-bridge/deployservices/authelia/.node-stats-mcpalready has its deployer pair here, so the gated resource can roll. Only the authorization server namespace (authelia) is unwired.The scope trap - do not copy node-stats-mcp's Role verbatim
node-stats-mcp's deployer Role only grantspods(get/list/watch) +deployments/replicasets, because that service is a bare Deployment. Authelia'sservices/authelia/deploy/main.ymlapplies far more kinds, andkubectl applywill be denied on any kind the Role omits. Scope the Role to exactly the namespace-scoped kinds that manifest applies. Readcoilyco-bridge/deployservices/authelia/deploy/main.ymlas the source of truth, but it is:ConfigMap(the structural config)ServiceIngress(networking.k8s.io)PersistentVolumeClaimExternalSecret(external-secrets.io) x2Deployment(+replicasets)pods(get/list/watch, forrollout status)Model the Role on the
coilysiren-eco-gnome/coilysiren-eco-appdeployer Roles in this same file (public-Ingress services that already carry ConfigMap/Service/Ingress verbs), not on node-stats-mcp's Deployment-only Role. The RoleBinding is identical in shape to every sibling:roleRef-> the namespacedeployerRole,subjects->ServiceAccount deployerin namespaceforgejo.The
Namespaceitself is create-only and handled byrollout.sh(kubectl get ns || kubectl create), so it does not belong in this namespaced Role.Not in scope / note
services/authelia/README.md. This issue does not change that.coilyco-bridge/deploy- the CD workflow and the manifest already exist there.Done when
deploy/forgejo-runner-deploy.ymlcarries a validautheliadeployer Role (scoped to the kinds above) + RoleBinding, lints clean, and lands onmain.Provenance: director surface session, 2026-07-04, configuring deploy#28.
🔒 Reserved by
ward agent --driver claude— containerengineer-claude-infrastructure-464on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-04T06:09:26Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).
— Claude (she/her), via
ward agentWARD-OUTCOME: done - authelia deployer Role+RoleBinding landed on main (
dbfbd95), scoped to exactly the kinds services/authelia/deploy/main.yml applies.This one was refreshingly low-drama. The issue did most of the thinking for me: it flagged the scope trap up front (don't copy node-stats-mcp's Deployment-only Role) and named eco-gnome/eco-app as the pattern to model on. I still pulled
services/authelia/deploy/main.ymlstraight from the gitcache mirror to verify the kinds firsthand rather than trusting the inlined list, and they matched exactly - ConfigMap, Service, PVC, Ingress, 2x ExternalSecret, Deployment/replicasets, pods.One deliberate call worth noting: I gave pods only get/list/watch (rollout status) and left
secrets/serviceaccounts/rolesoff entirely, since the manifest applies ExternalSecrets (the operator materializes the Secret) and the RBAC bootstrap is admin-applied on first roll. So this Role is tighter than eco-app's - least-privilege by construction.Only friction was environmental: pylint's uv step couldn't write to /opt/uv/python in the sandbox, fixed by pointing UV_PYTHON_INSTALL_DIR at a writable dir. All catalog hooks and the CI lint job pass clean locally. Confidence is high - it's a pure additive RBAC block mirroring five working siblings. No follow-ups; the first authelia roll remains admin-bootstrapped per the README, as the issue scoped it.