edit) each own part of one resource without overwriting each other. Each sends only the fields it cares about. The server merges them, remembers who set which field, and refuses a change to a field someone else owns.
Supported kinds: apps and databases. Other kinds answer 405. Stack resources keep changing through their stack apply, and an app or database a stack owns is refused with 409.
API
export writes:
The route uses the same per-object authorization as the v1 write routes (write ability plus any IAM policy on
app:NAME or database:NAME).
Merge rules
- Fields are tracked at leaf level, as JSON pointers such as
/spec/service/port. Lists are one field. - A field sent with the same value another manager set is shared by both.
- A field sent with a different value than another manager set is a conflict. The
409body lists eachpathandmanager. Passforce=trueto take it over. - A field a manager set before and no longer sends is removed, unless another manager still owns it.
- A field sent as
nullis removed. - Env values you cannot read are kept as they are when you do not send them.
metadata.managedFields by the PATCH response and by GET /api/v2/{kind}/{name}. Applied changes appear on the watch stream as MODIFIED events.
CLI
edit app NAME uses server-side apply too: it sends only the fields you changed, forces ownership of them, and carries the version you opened as a precondition, so a concurrent change makes the save fail instead of being overwritten.
Limits
- One server-side apply runs at a time per control plane, so the version check and the write happen together. A write through a v1 route in between can still land; the precondition catches it on the next apply.
- Database applies read the full export to find the database, which is slower on large installs.