gen

package
v0.30.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2026 License: Apache-2.0 Imports: 30 Imported by: 0

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

View Source
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 Generate

func Generate(opts Options) ([]byte, error)

Generate renders and gofmt's the struct source for opts.Manifest.

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

func Keys(v any) map[string]struct{}

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

func UnknownAddons(disable any, addons []string) []string

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

func Lookup(distroID, version string) (Entry, bool)

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.

type Options

type Options struct {
	PackageName string // must already be a valid Go package identifier
	StructName  string
	Manifest    extract.Manifest
}

Options configures one generated struct file.

Directories

Path Synopsis
k3s
rke2
upstream

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL