Documentation
¶
Overview ¶
Package gen turns an extract.Manifest into a Go struct source file: one field per resolved, non-alias flag, tagged with the flag's real kebab-case name as its yaml key. See docs/agent/design-config-codegen.md -- the flag name, not the Go field name, is the source of truth for what a valid config.yaml key looks like.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Registry = map[string]map[string]Entry{ "k3s": { "v1_31": {Server: k3s_v1_31.ServerConfig{}, Agent: k3s_v1_31.AgentConfig{}, Addons: k3s_v1_31.Addons, CNIs: k3s_v1_31.CNIs, IngressControllers: k3s_v1_31.IngressControllers}, "v1_32": {Server: k3s_v1_32.ServerConfig{}, Agent: k3s_v1_32.AgentConfig{}, Addons: k3s_v1_32.Addons, CNIs: k3s_v1_32.CNIs, IngressControllers: k3s_v1_32.IngressControllers}, "v1_33": {Server: k3s_v1_33.ServerConfig{}, Agent: k3s_v1_33.AgentConfig{}, Addons: k3s_v1_33.Addons, CNIs: k3s_v1_33.CNIs, IngressControllers: k3s_v1_33.IngressControllers}, "v1_34": {Server: k3s_v1_34.ServerConfig{}, Agent: k3s_v1_34.AgentConfig{}, Addons: k3s_v1_34.Addons, CNIs: k3s_v1_34.CNIs, IngressControllers: k3s_v1_34.IngressControllers}, "v1_35": {Server: k3s_v1_35.ServerConfig{}, Agent: k3s_v1_35.AgentConfig{}, Addons: k3s_v1_35.Addons, CNIs: k3s_v1_35.CNIs, IngressControllers: k3s_v1_35.IngressControllers}, "v1_36": {Server: k3s_v1_36.ServerConfig{}, Agent: k3s_v1_36.AgentConfig{}, Addons: k3s_v1_36.Addons, CNIs: k3s_v1_36.CNIs, IngressControllers: k3s_v1_36.IngressControllers}, "v1_37": {Server: k3s_v1_37.ServerConfig{}, Agent: k3s_v1_37.AgentConfig{}, Addons: k3s_v1_37.Addons, CNIs: k3s_v1_37.CNIs, IngressControllers: k3s_v1_37.IngressControllers}, }, "rke2": { "v1_31": {Server: rke2_v1_31.ServerConfig{}, Agent: rke2_v1_31.AgentConfig{}, Addons: rke2_v1_31.Addons, CNIs: rke2_v1_31.CNIs, IngressControllers: rke2_v1_31.IngressControllers}, "v1_32": {Server: rke2_v1_32.ServerConfig{}, Agent: rke2_v1_32.AgentConfig{}, Addons: rke2_v1_32.Addons, CNIs: rke2_v1_32.CNIs, IngressControllers: rke2_v1_32.IngressControllers}, "v1_33": {Server: rke2_v1_33.ServerConfig{}, Agent: rke2_v1_33.AgentConfig{}, Addons: rke2_v1_33.Addons, CNIs: rke2_v1_33.CNIs, IngressControllers: rke2_v1_33.IngressControllers}, "v1_34": {Server: rke2_v1_34.ServerConfig{}, Agent: rke2_v1_34.AgentConfig{}, Addons: rke2_v1_34.Addons, CNIs: rke2_v1_34.CNIs, IngressControllers: rke2_v1_34.IngressControllers}, "v1_35": {Server: rke2_v1_35.ServerConfig{}, Agent: rke2_v1_35.AgentConfig{}, Addons: rke2_v1_35.Addons, CNIs: rke2_v1_35.CNIs, IngressControllers: rke2_v1_35.IngressControllers}, "v1_36": {Server: rke2_v1_36.ServerConfig{}, Agent: rke2_v1_36.AgentConfig{}, Addons: rke2_v1_36.Addons, CNIs: rke2_v1_36.CNIs, IngressControllers: rke2_v1_36.IngressControllers}, "v1_37": {Server: rke2_v1_37.ServerConfig{}, Agent: rke2_v1_37.AgentConfig{}, Addons: rke2_v1_37.Addons, CNIs: rke2_v1_37.CNIs, IngressControllers: rke2_v1_37.IngressControllers}, }, }
Registry maps distro id (e.g. "k3s", "rke2") -> sanitized minor version package name (e.g. "v1_35") -> Entry. See Lookup in lookup.go for the consumer-facing API.
Functions ¶
func GenerateComponents ¶
func GenerateComponents(opts ComponentsOptions) ([]byte, error)
GenerateComponents renders and gofmt's the packaged-component source for opts. It is always written, even when every list is empty: the generated registry references these vars in every distro/version package, so a package missing them fails to build.
func Keys ¶
Keys returns the set of yaml key names declared on a generated config struct (an Entry's Server or Agent field), derived from each field's `yaml:"name,omitempty"` tag.
func UnknownAddons ¶
UnknownAddons returns the entries of a config.yaml `disable:` value that aren't packaged components of the distro/version addons came from, sorted. It reports nothing when addons is empty -- a version whose component source was never pulled has no vocabulary to check against, and treating that as "everything is unknown" would be worse than not checking at all.
disable is the raw decoded value, which is a YAML list in practice but is legal as a bare scalar, so both shapes are accepted.
Types ¶
type ComponentsOptions ¶
type ComponentsOptions struct {
PackageName string // must already be a valid Go package identifier
Distro string
Version string
Components extract.Components
}
ComponentsOptions configures one generated packaged-component file.
type Entry ¶
type Entry struct {
Server any
Agent any
// Addons is the set of packaged components this distro/version accepts in `disable:`.
// Empty when no component source was pulled for it -- consumers must treat empty as "no
// data", not as "nothing is valid".
Addons []string
// CNIs and IngressControllers are the values `cni:` and `ingress-controller:` accept.
// Both are empty for distros that declare no such flag (k3s).
CNIs []string
IngressControllers []string
}
Entry holds the zero-value generated Server/Agent config structs for one distro/version, as produced by mage generate:engineConfig. Registry (in the generated zz_registry.go) is keyed by distro id and minor-version package name (e.g. "v1_35").
func Lookup ¶
Lookup returns the Entry registered for distroID (e.g. "k3s", "rke2") and an engine version string in any format containing a dotted major.minor (e.g. "1.35.3-k3s1", "v1.35.3+k3s1"). The version is truncated to its minor release before lookup, the same way mage generate:pullEngineSource truncates upstream tags before pulling source -- so a single generated version covers every patch release in that minor line. Reports false if no source was ever pulled/generated for that distro/minor-version pair.