gen

package
v0.28.1 Latest Latest
Warning

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

Go to latest
Published: Sep 30, 2026 License: Apache-2.0 Imports: 23 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},
	},
}

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 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 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

Jump to

Keyboard shortcuts

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