summaryrefslogtreecommitdiff
path: root/internal/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config/config.go')
-rw-r--r--internal/config/config.go76
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
}