// 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"` }