draft doesn't capture service hostnames — teach --emit-draft the per-service GET (sibling of #75) #83
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:apply
scope:capture
scope:coolify-api
scope:fleet
scope:manifest
scope:secrets
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/cast#83
Loading…
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?
Summary
#73/#81 made a service's per-container hostnames settable (
urls) and readable (GET /services/{uuid}→applications[].fqdn), anddiff/applynow carry them asservice_domains. The draft path was not brought along.The inventory sweep reads the environment list (
GET /projects/{uuid}/{env}), which eager-loadsservicesbut notservice.applications(ProjectController@environment_details, v4.1.2), and it does not make the supplementary per-service GET. So--emit-draftemits a service with no hostnames — a drafted service that servesanalytics.example.comtoday comes back serving none, until a human declaresservice_domainsby hand.This is the exact shape of #75, one resource type over: the API answers, the sweep has not been taught to ask. #81 says so honestly rather than papering over it (
serviceSpec's UNCAPTURED row and theNO_API_COVERAGErow both spell it out), but it is a gap worth closing — and closing it is what makes a drafted blueprint actually rebuildable.What to do
--emit-draft: per drafted service,GET /services/{uuid}and emitservice_domainsfromapplications[].fqdnattachServiceDomains' projection +canonicalizeServiceDomains(cli.ts) rather than writing a second one — draft and diff must agree on the shape, or a drafted manifest diffs dirty the moment it is appliedattachServiceDomainsalready fails closed there; the draft path likely wants to report rather than abort a whole-instance sweep)service_domains (hostnames)uncaptured row and theservice hostnamesNO_API_COVERAGErow once captured, and correct the matchingsemantics.mdline (the one that currently reads "…butinventory --emit-draftdoes not yet make the per-service GET")Worth deciding once, for both this and #75
Both add one supplementary GET per resource to a verb that walks every project on the instance — a very different cost profile from
diff/apply, which are scoped to one project+environment and where the reads are already gated (opts.backups/opts.serviceDomainsinfetchLive). Whatever gating/parallelism answer #75 picks for databases should almost certainly be the same one here for services, which is why these two may be better done together than separately.Found in #72; falls out of #81 (which fixed the write/read/diff half).