The Kubernetes plugin for opencharly/charly —
it owns ALL Kubernetes cluster interaction, keeping the heavy
k8s.io/client-go + k8s.io/apimachinery stack out of charly's core go.mod.
The plugin is an out-of-tree Go module: charly's loader fetches this repo, go-builds the provider binary on the HOST, and serves it out-of-process over go-plugin gRPC via the charly plugin SDK.
| Capability | Surface |
|---|---|
verb:kube |
the kube: cluster-probe check verb — 11 observation methods |
deploy:kubernetes |
the target: kubernetes workload deploy substrate |
deploy:kindcluster |
the local Kubernetes-in-Docker cluster substrate |
An authored kube: <method> step (scalar sugar) or
kube: {method: …, cluster: …} (map form) desugars to the plugin input
envelope; the method + every kube-exclusive modifier live in the plugin's own
#KubeInput (schema/kube.cue). Methods: nodes, wait-nodes, pods,
wait-ready, ingress, ingressclass, storageclass, service,
lb-external-ip, addons, raw.
Every method observes and none changes state (DESIGN.md §23 D-VERB-1): the former
apply/delete methods were removed in
#32 — a cluster change belongs
to a deploy (kubectl apply -k on the egress-validated tree) or a run: step.
- check: the cluster reports at least one Ready node
id: kube-nodes-ready
kube:
method: nodes
stdout:
- contains: Ready
context: [deploy]target: kubernetes—kubectl apply -kon the plugin-generated Kustomize tree. The plugin's ownpreresolve.goresolves the cluster template + image Capabilities and GENERATES the egress-validated Kustomize tree itself (reachingverb:k8sgen/verb:egresspeer-to-peer), then applies it.target: kindcluster— a local Kubernetes-in-Docker cluster provisioned by the upstreamkindtool on the operator's container engine, then the same Kustomize workload.- k3s post-provision finalization — the guest-forward kubeconfig rewrite
(this plugin's own
k3s_post.go) + the~/.kube/configmerge.
Compose the plugin candy in a box or check bed's candy: list:
- '@github.com/opencharly/plugin-kube/candy/plugin-kube:<tag>'candy/plugin-kube/— the plugin module:plugin.go,provider.go,cluster.go,deploy.go,materialize.go,preresolve.go,merge.go,kindcluster.go,k3s_post.go,methods.go,schema/kube.cue,params/cue_types_gen.go,cmd/serve/main.go.candy/plugin-kube/charly.yml— theplugin-kube:candy entity and thecheck-k8s-skill:/kubernetes-skill:routing nodes it owns..agents/skills/<name>/SKILL.md— the prose for those two, one directory per skill at the repo root.charly.yml— the root project manifest (discover: candy)..github/workflows/tag-on-merge.yml— CalVer tag +CHANGELOG/on merge.
- Owning skills:
/charly-kubernetes:kubernetes— the Kubernetes deploy surface, cluster profiles, and Kustomize manifest generation — and/charly-kubernetes:check-k8s— thekube:check verb reference. Both are projected from this candy's ownskill:entities. /charly-internals:plugin— the plugin/provider model.opencharly/charly— the charly CLI.