mirror of
https://github.com/harivansh-afk/agentikube.git
synced 2026-04-20 00:02:14 +00:00
init
This commit is contained in:
commit
0595d93c49
28 changed files with 1763 additions and 0 deletions
102
internal/config/config.go
Normal file
102
internal/config/config.go
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue