Files
kubesolo-os/cloud-init/config.go
Adolfo Delorenzo 61bd28c692
Some checks failed
CI / Go Tests (push) Has been cancelled
CI / Build Go Binaries (amd64, linux, linux-amd64) (push) Has been cancelled
CI / Build Go Binaries (arm64, linux, linux-arm64) (push) Has been cancelled
CI / Shellcheck (push) Has been cancelled
feat: cloud-init supports all documented KubeSolo CLI flags
Add missing flags (--local-storage-shared-path, --debug, --pprof-server,
--portainer-edge-id, --portainer-edge-key, --portainer-edge-async) so all
10 documented KubeSolo parameters can be configured via cloud-init YAML.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:49:31 -06:00

69 lines
2.4 KiB
Go

// Package cloudinit implements a lightweight cloud-init parser for KubeSolo OS.
//
// It reads a simplified cloud-init YAML config and applies:
// - hostname
// - network configuration (static IP or DHCP)
// - KubeSolo extra flags and settings
// - NTP servers
//
// The config file is typically at /mnt/data/etc-kubesolo/cloud-init.yaml
// or specified via kubesolo.cloudinit= boot parameter.
package cloudinit
// Config is the top-level cloud-init configuration.
type Config struct {
Hostname string `yaml:"hostname"`
Network NetworkConfig `yaml:"network"`
KubeSolo KubeSoloConfig `yaml:"kubesolo"`
NTP NTPConfig `yaml:"ntp"`
Airgap AirgapConfig `yaml:"airgap"`
Portainer PortainerConfig `yaml:"portainer"`
}
// NetworkConfig defines network settings.
type NetworkConfig struct {
Mode string `yaml:"mode"` // "dhcp" or "static"
Interface string `yaml:"interface"` // e.g. "eth0" (auto-detected if empty)
Address string `yaml:"address"` // CIDR notation, e.g. "192.168.1.100/24"
Gateway string `yaml:"gateway"` // e.g. "192.168.1.1"
DNS []string `yaml:"dns"` // nameservers
}
// KubeSoloConfig defines KubeSolo-specific settings.
type KubeSoloConfig struct {
ExtraFlags string `yaml:"extra-flags"`
LocalStorage *bool `yaml:"local-storage"`
LocalStorageSharedPath string `yaml:"local-storage-shared-path"`
ExtraSANs []string `yaml:"apiserver-extra-sans"`
Debug bool `yaml:"debug"`
PprofServer bool `yaml:"pprof-server"`
PortainerEdgeID string `yaml:"portainer-edge-id"`
PortainerEdgeKey string `yaml:"portainer-edge-key"`
PortainerEdgeAsync bool `yaml:"portainer-edge-async"`
}
// NTPConfig defines NTP settings.
type NTPConfig struct {
Servers []string `yaml:"servers"`
}
// AirgapConfig defines air-gapped deployment settings.
type AirgapConfig struct {
ImportImages bool `yaml:"import-images"`
ImagesDir string `yaml:"images-dir"`
}
// PortainerConfig defines Portainer Edge Agent settings.
type PortainerConfig struct {
EdgeAgent EdgeAgentConfig `yaml:"edge-agent"`
}
// EdgeAgentConfig holds Portainer Edge Agent connection details.
type EdgeAgentConfig struct {
Enabled bool `yaml:"enabled"`
EdgeID string `yaml:"edge-id"`
EdgeKey string `yaml:"edge-key"`
PortainerURL string `yaml:"portainer-url"`
Image string `yaml:"image"`
}