devnet-8: move ready clients to trunk and propose Watchtower-gated delivery - #81
devnet-8: move ready clients to trunk and propose Watchtower-gated delivery#81qu0b wants to merge 1 commit into
Conversation
This comment has been minimized.
This comment has been minimized.
4999b7c to
772ebba
Compare
|
Reworked and force-pushed as one clean commit. The devnet-local Python controller and timer are gone; the PR now keeps only the trunk-tag/Watchtower ownership changes and a stack-wide Argo + shared Ansible + Assertor + VictoriaMetrics delivery design. The earlier buildoor Watchtower finding remains fixed in the final diff. |
This comment has been minimized.
This comment has been minimized.
772ebba to
97afdd6
Compare
|
Revised again after the operational-simplicity concern: Watchtower remains the install-once node-local actuator. The shared control plane now advances deterministic per-node registry channel tags; it does not SSH, run per-release Ansible, or access Docker. The design also uses the Nicholas Fedor fork read-only container-details endpoint to prove the running manifest digest. I clarified that today, before those shared pieces exist, client updates remain explicit staged Ansible operations—the PR does not activate the proposed controller. |
There was a problem hiding this comment.
Summary
The PR trims devnet-8 Watchtower scope to non-critical tooling only, moves grandine/erigon/ethrex from the frozen glamsterdam-devnet-8 tags to the floating trunk tags devnet-9 already uses (tags verified to exist upstream), and adds a forward-looking design doc for stack-wide progressive client delivery. Config edits are internally consistent, match the stated intent, and the doc's concrete claims about the Nicholas Fedor Watchtower fork check out against the fork's source; I found no blockers.
Issues
- 🟡
ansible/inventories/devnet-8/group_vars/all/images.yaml:10— un-pinning to trunk tags while unwatching clients means reprovisioned hosts silently pull untested trunk — see the thread on that line
Reviewed @ 97afdd66
"Programs must be written for people to read, and only incidentally for machines to execute." — Abelson & Sussman
| prysm_validator: registry-1.docker.io/ethpandaops/prysm-validator:glamsterdam-devnet-8 | ||
| teku: registry-1.docker.io/ethpandaops/teku:master | ||
| grandine: registry-1.docker.io/ethpandaops/grandine:glamsterdam-devnet-8 | ||
| grandine: registry-1.docker.io/ethpandaops/grandine:develop |
There was a problem hiding this comment.
🟡 un-pinning to trunk tags while unwatching clients means reprovisioned hosts silently pull untested trunk
grandine/erigon/ethrex move from the immutable glamsterdam-devnet-8 tags to floating develop/main in the same PR that removes execution/beacon/validator from Watchtower. With ethpandaops.general's pull-always + image_name_mismatch:recreate semantics (ethereum_node_images_always_pull: true here), any host rebuild/reprovision or images.yaml ref change now resolves the current trunk digest with none of the staged gates this PR exists to establish, undercutting the doc's 'failure is closed / client updates stay explicit' framing. It matches devnet-9, so likely acceptable, but worth confirming the interim absence of any digest pin is intended.
97afdd6 to
578bb29
Compare
|
Clarification and builder grounding added: the design means Argo Workflows, not Argo CD. Argo CD deploys the already-present Argo Workflows installation and proposed WorkflowTemplate; workflow pods coordinate external APIs while Watchtower remains the Docker-host actuator. I also audited eth-client-docker-image-builder and revised the artifact contract around its real branch/short-SHA/per-platform tags, including the required manifest hardening before those outputs are safe to promote. |
SummaryMoves devnet-8 Grandine/Erigon/Ethrex onto the same floating trunk tags as devnet-9, drops execution/beacon/validator from the Watchtower scope on normal and buildoor hosts, and adds docs/client-image-delivery.md sketching a digest-channel, Watchtower-actuated progressive rollout. The tags match devnet-9, the Watchtower scopes are restricted as described, the fork endpoint claim in the doc is accurate, and nothing here blocks merge. One cross-cutting concern about non-deterministic client state during the interim stands. Issues
Reviewed @ |
Summary
Runtime model
Every managed component follows a deterministic per-node OCI release-channel tag. The platform freezes a completed builder digest and advances one node's channel at a time; the existing Nicholas Fedor Watchtower pulls and replaces the container locally.
This proposal means Argo Workflows, not Argo CD. Argo CD already deploys the platform's Argo Workflows installation and would deploy the WorkflowTemplate. Argo Workflows executes durable steps as Kubernetes pods, but those pods only call the registry, Assertoor, and VictoriaMetrics APIs. The Ethereum clients remain Docker containers on external hosts. There is no SSH, remote Docker access, or per-release Ansible.
Grounded in the existing builder
The proposal now follows the actual eth-client-docker-image-builder contract:
Before automatic rollout, the existing manifest action needs a narrow hardening:
No second builder or correctness-critical webhook is proposed. Six-hour intake reads the builder catalog and completed commit-qualified outputs, validates them, resolves them to immutable digests, and coalesces intermediate builds.
Health-gated flow
After the one-time normal stack deployment, releases require no playbook, host login, or inventory commit. If the workflow or health systems fail, tags remain unchanged and Watchtower finds nothing new. A 15-minute scan remains cheap; the six-hour controller policy limits digest changes and therefore restarts.
See docs/client-image-delivery.md for the exact builder gaps, bootstrap, ownership boundaries, rollout gates, security, rollback, coupled beacon/validator behavior, and failure semantics.
Current behavior
This PR is a design proposal, not the controller implementation. Until the shared builder, collection, and platform changes land, client updates remain explicit staged Ansible operations. Watchtower manages only xatu-sentry on normal hosts and xatu-sentry plus buildoor on buildoor hosts, so direct trunk tags cannot cause autonomous client churn.
Validation