mirror of
https://github.com/harivansh-afk/agentikube.git
synced 2026-04-15 07:04:44 +00:00
102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Config is the top-level configuration parsed from agentikube.yaml.
|
|
type Config struct {
|
|
Namespace string `yaml:"namespace"`
|
|
Compute ComputeConfig `yaml:"compute"`
|
|
Storage StorageConfig `yaml:"storage"`
|
|
Sandbox SandboxConfig `yaml:"sandbox"`
|
|
}
|
|
|
|
type ComputeConfig struct {
|
|
Type string `yaml:"type"` // karpenter | fargate
|
|
InstanceTypes []string `yaml:"instanceTypes"`
|
|
CapacityTypes []string `yaml:"capacityTypes"`
|
|
MaxCPU int `yaml:"maxCpu"`
|
|
MaxMemory string `yaml:"maxMemory"`
|
|
Consolidation bool `yaml:"consolidation"`
|
|
FargateSelectors []FargateSelector `yaml:"fargateSelectors"`
|
|
}
|
|
|
|
type FargateSelector struct {
|
|
Namespace string `yaml:"namespace"`
|
|
}
|
|
|
|
type StorageConfig struct {
|
|
Type string `yaml:"type"` // efs
|
|
FilesystemID string `yaml:"filesystemId"`
|
|
BasePath string `yaml:"basePath"`
|
|
UID int `yaml:"uid"`
|
|
GID int `yaml:"gid"`
|
|
ReclaimPolicy string `yaml:"reclaimPolicy"`
|
|
}
|
|
|
|
type SandboxConfig struct {
|
|
Image string `yaml:"image"`
|
|
Ports []int `yaml:"ports"`
|
|
MountPath string `yaml:"mountPath"`
|
|
Resources ResourcesConfig `yaml:"resources"`
|
|
Env map[string]string `yaml:"env"`
|
|
SecurityContext SecurityContext `yaml:"securityContext"`
|
|
Probes ProbesConfig `yaml:"probes"`
|
|
WarmPool WarmPoolConfig `yaml:"warmPool"`
|
|
NetworkPolicy NetworkPolicy `yaml:"networkPolicy"`
|
|
}
|
|
|
|
type ResourcesConfig struct {
|
|
Requests ResourceValues `yaml:"requests"`
|
|
Limits ResourceValues `yaml:"limits"`
|
|
}
|
|
|
|
type ResourceValues struct {
|
|
CPU string `yaml:"cpu"`
|
|
Memory string `yaml:"memory"`
|
|
}
|
|
|
|
type SecurityContext struct {
|
|
RunAsUser int `yaml:"runAsUser"`
|
|
RunAsGroup int `yaml:"runAsGroup"`
|
|
RunAsNonRoot bool `yaml:"runAsNonRoot"`
|
|
}
|
|
|
|
type ProbesConfig struct {
|
|
Port int `yaml:"port"`
|
|
StartupFailureThreshold int `yaml:"startupFailureThreshold"`
|
|
}
|
|
|
|
type WarmPoolConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
Size int `yaml:"size"`
|
|
TTLMinutes int `yaml:"ttlMinutes"`
|
|
}
|
|
|
|
type NetworkPolicy struct {
|
|
EgressAllowAll bool `yaml:"egressAllowAll"`
|
|
IngressPorts []int `yaml:"ingressPorts"`
|
|
}
|
|
|
|
// Load reads and parses the config file at the given path.
|
|
func Load(path string) (*Config, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("reading config file: %w", err)
|
|
}
|
|
|
|
var cfg Config
|
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
|
return nil, fmt.Errorf("parsing config file: %w", err)
|
|
}
|
|
|
|
if err := Validate(&cfg); err != nil {
|
|
return nil, fmt.Errorf("validating config: %w", err)
|
|
}
|
|
|
|
return &cfg, nil
|
|
}
|