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 ¶
- Variables
- func Generate(opts Options) ([]byte, error)
- func GenerateComponents(opts ComponentsOptions) ([]byte, error)
- func GenerateNestedKeys(opts NestedKeysOptions) ([]byte, error)
- func Keys(v any) map[string]struct{}
- func UnknownAddons(disable any, addons []string) []string
- type ComponentsOptions
- type Entry
- type NestedKeysOptions
- type Options
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}, }, "upstream": { "v1_32": {Server: upstream_v1_32.ClusterConfigurationKeys, Addons: upstream_v1_32.Addons, CNIs: upstream_v1_32.CNIs, IngressControllers: upstream_v1_32.IngressControllers}, "v1_33": {Server: upstream_v1_33.ClusterConfigurationKeys, Addons: upstream_v1_33.Addons, CNIs: upstream_v1_33.CNIs, IngressControllers: upstream_v1_33.IngressControllers}, "v1_34": {Server: upstream_v1_34.ClusterConfigurationKeys, Addons: upstream_v1_34.Addons, CNIs: upstream_v1_34.CNIs, IngressControllers: upstream_v1_34.IngressControllers}, "v1_35": {Server: upstream_v1_35.ClusterConfigurationKeys, Addons: upstream_v1_35.Addons, CNIs: upstream_v1_35.CNIs, IngressControllers: upstream_v1_35.IngressControllers}, "v1_36": {Server: upstream_v1_36.ClusterConfigurationKeys, Addons: upstream_v1_36.Addons, CNIs: upstream_v1_36.CNIs, IngressControllers: upstream_v1_36.IngressControllers}, "v1_37": {Server: upstream_v1_37.ClusterConfigurationKeys, Addons: upstream_v1_37.Addons, CNIs: upstream_v1_37.CNIs, IngressControllers: upstream_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 GenerateNestedKeys ¶ added in v0.30.0
func GenerateNestedKeys(opts NestedKeysOptions) ([]byte, error)
GenerateNestedKeys renders and gofmt's opts.Node as a literal extract.FieldNode value, unlike Generate (a real Go struct consumed via reflect): upstream's config document is genuinely nested, so what's extracted is a key tree, not a flag set, and there's no struct shape to declare -- the tree itself is what gets consumed at validation time.
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.
type NestedKeysOptions ¶ added in v0.30.0
type NestedKeysOptions struct {
PackageName string // must already be a valid Go package identifier
VarName string // exported Go identifier for the generated var
Distro string
Version string
RootType string // the source struct this tree was extracted from, e.g. "ClusterConfiguration"
Node extract.FieldNode
}
NestedKeysOptions configures one generated nested-key-tree file.