diff options
Diffstat (limited to 'internal/config/config.go')
| -rw-r--r-- | internal/config/config.go | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index c872203..ce442a1 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -2,55 +2,66 @@ package config import ( "fmt" + "os" - "github.com/BurntSushi/toml" -) + "gopkg.in/yaml.v3" -// RPC holds RPC configuration -type RPC struct { - RPCSecret string - RPCAddr string -} + // Import des packages Docker et Kubernetes pour la gestion des conteneurs + _ "github.com/docker/docker/client" + _ "github.com/docker/go-connections/nat" + _ "k8s.io/api/core/v1" + _ "k8s.io/client-go/kubernetes" + _ "k8s.io/client-go/rest" +) // API holds API configuration type API struct { - APIAddr string - APIDomain string + APIAddr string `yaml:"api_addr"` + CORSAllow []string `yaml:"cors_allow"` + Domain string `yaml:"domain"` } // InternalDB holds internal database configuration type InternalDB struct { - Manager string - URI string + Manager string `yaml:"manager"` + URI string `yaml:"uri"` } -// ExternalDB holds external database configuration -type ExternalDB struct { - Manager string - URI string +// Orchestrator holds container orchestration configuration +type Orchestrator struct { + Type string `yaml:"type"` // "docker" or "kubernetes" + DockerHost string `yaml:"docker_host"` // Docker/Podman socket or remote host + KubeAPI string `yaml:"kube_api"` // Kubernetes API endpoint + KubeToken string `yaml:"kube_token"` // Kubernetes API token + Namespace string `yaml:"namespace"` // Kubernetes namespace for database deployments } -// Cluster holds cluster/distributed configuration -type Cluster struct { - NodeID string - IsRPCServer bool - RPCServers []string +// SuperUser holds super user configuration +type SuperUser struct { + Username string `yaml:"username"` + Password string `yaml:"password"` + Email string `yaml:"email"` } // Config holds the application configuration type Config struct { - Region string - RPC RPC - API API - InternalDB InternalDB - ExternalDB ExternalDB - Cluster Cluster + Region string + API API + InternalDB InternalDB + Orchestrator Orchestrator + SuperUser SuperUser } -// LoadConfig loads configuration from a TOML file +// LoadConfig loads configuration from a YAML file func LoadConfig(filePath string) (*Config, error) { var config Config - if _, err := toml.DecodeFile(filePath, &config); err != nil { + + data, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("failed to read config file: %w", err) + } + + if err := yaml.Unmarshal(data, &config); err != nil { return nil, fmt.Errorf("failed to decode config file: %w", err) } @@ -58,6 +69,15 @@ func LoadConfig(filePath string) (*Config, error) { if config.Region == "" { config.Region = "supabase" } + if config.Orchestrator.Type == "" { + config.Orchestrator.Type = "docker" + } + if config.Orchestrator.DockerHost == "" && config.Orchestrator.Type == "docker" { + config.Orchestrator.DockerHost = "unix:///var/run/docker.sock" + } + if config.Orchestrator.Namespace == "" && config.Orchestrator.Type == "kubernetes" { + config.Orchestrator.Namespace = "sovrabase-databases" + } return &config, nil } |
