Allow cluster workloads to configure domains and HTTP ports, and enable
individual nodes as ingress proxies. Reconcile Caddy routes and firewall
rules as network revisions so domain changes apply without redeploying.
Refresh ingress routing when workload placements change and merge node
metadata under a row lock to preserve concurrent updates.
Add ingress controls, domain links, and regression and end-to-end coverage.
Add UpdateNodeWorkloadConfiguration to create a new workload revision
when the command, ports or environment change. Revisions now store the
environment separately, and a shared NodeWorkload::createRevision helper
builds them. The cluster application page can edit these settings.
Deployments take a pull policy ('missing' or 'newer'), which is passed
through to Sentinel. User redeploys use 'newer' so mutable tags pull the
latest image. Before a move starts, the source node must support
workload.lifecycle.v1 and the target must support workload.deploy.v1.
The coordinated workload.move.v1 command no longer needs its own
capability. Adds a migration for Sentinel capabilities on nodes.
Adds a 'naked' dev QEMU profile runtime. These VMs boot with the
coolify-flux hosts entry and are not seeded, so they can be added
through the Node onboarding UI. Removes the standalone scripts/dev-qemu
script in favour of scripts/dev.
Conflict resolution:
- Development QEMU: keep next's instance mode and prepared template images;
re-add v5 Podman worker Node profiles, Node seeding, Podman templates, and
the node-dev compose overlay through ./scripts/dev.
- Terminal: use next's token-based TerminalSessionService; add Node targets
with the v5 readiness and team checks at issue and redeem time.
- Sentinel: keep v5 Flux imports and next's SentinelSynchronized event; use
next's viewSentinel policy.
- Clusters page: follow next's no-placeholder rule for empty descriptions.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>