Add a whole-set form for scheduler-k3s annotations and labels
Description of feature
The scheduler-k3s metadata commands are all per-key, so there is no way to declare the complete set of annotations or labels an app should carry. scheduler-k3s:annotations:set, scheduler-k3s:labels:set, and scheduler-k3s:node-sysctls:set each take one key and one value, writing through common.PropertyMapSet or deleting that single key through common.PropertyMapDelete when the value is empty. There is no --replace, no multi-pair form, and no clear-all.
A caller that wants the stored map to match a declared map therefore has to read scheduler-k3s:annotations:report --format json, compute the difference in both directions, and issue one command per added, changed, and removed key. That is N non-atomic invocations, and a failure partway through leaves the app carrying a mixture of the old and new sets.
scheduler-k3s:autoscaling-auth:set is a near miss in the other direction. Supplied with --metadata it merges without deleting anything first, and omitting --metadata entirely deletes every key for that trigger. So "clear everything" is expressible and "set exactly these" is not, except as those two steps run back to back.
The request is a whole-set form for these commands, so the stored map can be replaced in one call. Dokku already has this shape elsewhere and the precedents differ slightly, so it is worth picking one deliberately: ports:set and buildpacks:set --replace both write the full list and reject an empty argument list, deferring the empty case to ports:clear and buildpacks:clear; network:set <app> attach-post-create takes trailing varargs and clears the property when given none. The varargs form reads most naturally for key=value pairs.
Related but distinct: storage:create --annotation and storage:set --annotation do replace their whole map, and are deprecated in favour of the per-key storage:annotations:set. If per-key is the intended long-term shape for entry metadata, then the gap above is worth closing deliberately rather than by reverting that deprecation.
Source: dokku/dokku