Widen node-stats-mcp deployer Role: add services/configmaps/ingresses/middlewares (CD half-applied on #28, RBAC forbidden) #465
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#465
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
Widen the
node-stats-mcpdeployerRole indeploy/forgejo-runner-deploy.ymlso CD can apply everything the node-stats bundle now contains. Today that Role grants onlypods(get/list/watch) +deployments/replicasets, but deploy#28 expanded thenode-stats-mcpnamespace to also hold a Service, a ConfigMap, two Ingresses, and a Traefik Middleware.Evidence (live CD failure)
The
deploy-node-stats-mcp.ymlCD run on the #28 push (89d1244) half-applied: Deployments went through, everything else was denied. Verbatim:The consequence downstream: the
node-stats-mcp-metapod sat inContainerCreatingfor 64m withFailedMount: configmap "node-stats-mcp-meta" not found, because RBAC blocked the ConfigMap the meta pod mounts.The fix
Add rules to the existing
node-stats-mcpdeployer Role (around line 155 ofdeploy/forgejo-runner-deploy.yml) covering every kind the bundle applies. Scope to exactly whatcoilyco-bridge/deployservices/node-stats-mcp/deploy/main.ymldeclares — currently:""(core):pods(get/list/watch),services,configmapsapps:deployments,replicasetsnetworking.k8s.io:ingressestraefik.io:middlewaresGive the mutable kinds the same verb set the sibling public-Ingress services use (
get, list, watch, create, update, patch, delete). Model on thecoilysiren-eco-gnome/coilysiren-eco-appdeployer Roles in this same file (they already carry Service/Ingress/ConfigMap/Middleware verbs), not the current node-stats-mcp Role. The RoleBinding already exists and is unchanged.Coordination note
coilyco-flight-deck/infrastructure#464(authelia deployer Role) is in flight against this same file concurrently. It adds a newautheliablock; this issue edits the existingnode-stats-mcpblock, so they touch different regions and should 3-way-merge cleanly. If #464 has already landed when you start, rebase onto it; if not, expect to resolve a trivial adjacency at most.Not in scope
ls-remote unavailable (unauthenticated runner?)falling back to the running sha for the image tag. Real but independent - filed/handled separately if it recurs.coilyco-bridge/deploy.Done when
The
node-stats-mcpdeployer Role indeploy/forgejo-runner-deploy.ymlcovers services/configmaps/ingresses/middlewares (+ existing pods/deployments), lints clean, lands onmain, and a subsequentdeploy-node-stats-mcp.ymlCD run applies the full bundle with noForbiddenerrors.Provenance: director surface session, 2026-07-04, configuring deploy#28 (node-stats CD half-applied on RBAC).
🔒 Reserved by
ward agent --driver claude— containerengineer-claude-infrastructure-465on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-04T07:05:19Z). 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 - node-stats-mcp deployer Role widened to services/configmaps/ingresses/middlewares, landed on main (
be85c09), CI green.Straightforward one. #464 (authelia) had already landed ahead of me, so the coordination note resolved itself - no adjacency to reconcile, the authelia block sat well clear of the node-stats-mcp region. I modeled the new rules on the authelia block specifically because it already does the clean thing of splitting read-only
pods(get/list/watch) out from the mutable kinds, rather than flattening everything to one verb set. Sopodsstays read-only and services/configmaps/ingresses/middlewares get the full get/list/watch/create/update/patch/delete.Only thing that fought back was environmental: the pylint pre-commit hook choked trying to write uv's python interpreter into
/opt/uv/python(permission denied in this container). PinningUV_PYTHON_INSTALL_DIRto a writable home dir cleared it, and the hook then passed - my diff is YAML-only so pylint was never actually unhappy with the change.Confident in the result: the diff mirrors the proven eco/authelia Roles exactly, and the post-push commit status shows both
CI / lintand TruffleHog green. The real end-to-end proof is the nextdeploy-node-stats-mcp.ymlCD run applying the full bundle with no Forbidden errors - that runs on the coilyco-bridge/deploy side and I can't trigger it from here, so worth a glance next time #28's bundle redeploys. No follow-ups to file.