plugin-group
| Placement | compiled-in (in-process) |
| Source | github.com/opencharly/charly/candy/plugin-group |
| Version | 2026.182.0440 |
| Candy | plugin-group |
This plugin is listed in charly/charly.yml’s compiled_plugins:, so its providers are compiled into the charly binary and register in-process.
Providers
Section titled “Providers”The reserved words this plugin serves:
group— kind class
What it does
Section titled “What it does”The group STRUCTURAL deploy KIND relocated into a candy (C2-group): a TARGETLESS deploy
group (resource members brought up ALONGSIDE on the shared network, no own workload). Its
OpLoad decodes the group’s scalar config (disposable/lifecycle/description/…) from op.Params
into a spec.Deploy and ATTACHES the AUTHORED members the host pre-decoded + threaded via
op.Env (F5 authored-member input-threading), returning the complete spec.Deploy the host
folds into uf.Bundle — byte-equivalent to the former builtin groupKind. COMPILED-IN (in the
embedded compiled_plugins:), like the tier-1 kinds, because group is a core deploy
primitive every box/submodule must always resolve; also serves out-of-process via cmd/serve.
Parameter schema
Section titled “Parameter schema”The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.
schema/group.cue
Section titled “schema/group.cue”// schema/group.cue — the SELF-CONTAINED CUE schema validating the `group` KIND's authored VALUE:// the TARGETLESS deploy-group config. Ships over Describe (schema_cue); references NO base def so it// compiles standalone (BuildCapabilities compiles it alone, failing loudly if broken) AND splices onto// the base (the base ++ plugin splice detects a def-name collision, not resolves base refs).//// This is a PURPOSE-BUILT targetless-group value surface — the identity + lifecycle fields a group// (no own workload) carries — NOT a clone of the full #Deploy: the workload fields (image/from/port/// env/volume/security/secret/sidecar/tunnel/route/probes/storage/expose/replica/…) are MEANINGLESS on// a targetless group and are now correctly rejected (the former builtin validated the value against the// whole #Deploy, so those fields were accepted-but-ignored; rejecting them is stricter + correct — no// real group authors them). The authored MEMBER children ride op.Env (host-pre-decoded, F5// authored-member input-threading), NOT this value. The complex lifecycle sub-objects// (ephemeral/preemptible) are PERMISSIVE here — validate_ephemeral validates them on the folded// uf.Bundle entry (the real deploy-level gate), and plan steps are validated by validateOps there too —// so this def stays small, self-contained, and drift-free (no #Iterate/#Ephemeral/#Deploy clone).#GroupInput: { // identity + description version?: string description?: string // disposability + lifecycle (the fields real groups author: disposable/lifecycle/description) disposable?: bool lifecycle?: string // lifecycle sub-objects — permissive (validated by validate_ephemeral on the folded Bundle) ephemeral?: {...} preemptible?: {...} // exclusive/shared host-resource arbitration on a group requires_exclusive?: [...string] requires_shared?: [...string] // iterate — the AI-benchmark harness on a group bed (a folded data child, e.g. charly-cli). // Permissive here — validateIterateBed validates it on the folded uf.Bundle entry (the real gate). iterate?: {...} // direct plan steps on the group node (checks are usually on members; permitted + validated by // validateOps on the folded Bundle entry) plan?: [...{...}]}See also the candy reference for this candy’s install surface.