diff options
| author | exatombe <jeremy27.clara22@gmail.com> | 2025-11-03 00:15:46 +0100 | 
|---|---|---|
| committer | exatombe <jeremy27.clara22@gmail.com> | 2025-11-03 00:15:46 +0100 | 
| commit | b477fed6c0819c780c5eb1d782907f7ec84d2918 (patch) | |
| tree | 63872780c45316a6acd7e776d28b8019f655b12a /internal/orchestrator/README.md | |
| parent | f232228974b12b1c2b5b07718532eec26a88841d (diff) | |
Diffstat (limited to 'internal/orchestrator/README.md')
| -rw-r--r-- | internal/orchestrator/README.md | 235 | 
1 files changed, 0 insertions, 235 deletions
diff --git a/internal/orchestrator/README.md b/internal/orchestrator/README.md deleted file mode 100644 index d681bd1..0000000 --- a/internal/orchestrator/README.md +++ /dev/null @@ -1,235 +0,0 @@ -# Orchestrator - Gestionnaire de bases de données - -Le package `orchestrator` permet de gérer automatiquement des instances de bases de données PostgreSQL via Docker/Podman ou Kubernetes. - -## Fonctionnalités - -- ✅ Création automatique de conteneurs PostgreSQL par projet -- ✅ Gestion des conflits et détection des bases existantes -- ✅ Assignment automatique des ports -- ✅ Génération sécurisée des mots de passe -- ✅ Limites de ressources (CPU/Mémoire) -- ✅ Attente automatique du démarrage de PostgreSQL -- ✅ Suppression propre des conteneurs et volumes -- ✅ Liste de toutes les bases gérées -- ✅ Support Docker, Podman et Kubernetes (en cours) - -## Configuration - -Fichier `config.toml` : - -```toml -[orchestrator] -type = "docker" -docker_host = "unix:///mnt/wsl/podman-sockets/podman-machine-default/podman-root.sock" - -# Pour Docker standard -# docker_host = "unix:///var/run/docker.sock" - -# Pour Podman rootless -# docker_host = "unix:///run/user/1000/podman/podman.sock" - -# Pour Kubernetes -# type = "kubernetes" -# kube_api = "https://kubernetes.default.svc" -# kube_token = "your-token" -# namespace = "sovrabase-databases" -``` - -## Utilisation - -### Création d'un orchestrateur - -```go -import ( -    "github.com/ketsuna-org/sovrabase/internal/config" -    "github.com/ketsuna-org/sovrabase/internal/orchestrator" -) - -// Charger la configuration -cfg, err := config.LoadConfig("config.toml") -if err != nil { -    log.Fatal(err) -} - -// Créer l'orchestrateur -orch, err := orchestrator.NewOrchestrator(&cfg.Orchestrator) -if err != nil { -    log.Fatal(err) -} -``` - -### Créer une base de données - -```go -ctx := context.Background() - -options := &orchestrator.DatabaseOptions{ -    PostgresVersion: "16-alpine", -    Port:            5434,         // Auto-assigné si 0 -    Memory:          "512m",       // Optionnel -    CPUs:            "0.5",        // Optionnel -    Password:        "",           // Généré si vide -} - -dbInfo, err := orch.CreateDatabase(ctx, "my-project", options) -if err != nil { -    log.Fatal(err) -} - -fmt.Printf("Connection: %s\n", dbInfo.ConnectionString) -``` - -### Récupérer les informations - -```go -dbInfo, err := orch.GetDatabaseInfo(ctx, "my-project") -if err != nil { -    log.Fatal(err) -} - -fmt.Printf("Database: %s\n", dbInfo.Database) -fmt.Printf("Port: %s\n", dbInfo.Port) -fmt.Printf("Status: %s\n", dbInfo.Status) -``` - -### Lister toutes les bases - -```go -databases, err := orch.ListDatabases(ctx) -if err != nil { -    log.Fatal(err) -} - -for _, db := range databases { -    fmt.Printf("%s - %s (port %s)\n", db.ProjectID, db.Status, db.Port) -} -``` - -### Supprimer une base - -```go -err := orch.DeleteDatabase(ctx, "my-project") -if err != nil { -    log.Fatal(err) -} -``` - -### Vérifier l'existence - -```go -exists, err := orch.DatabaseExists(ctx, "my-project") -if err != nil { -    log.Fatal(err) -} -``` - -## Structure DatabaseInfo - -```go -type DatabaseInfo struct { -    ProjectID         string    // ID du projet -    ContainerID       string    // ID du conteneur -    ContainerName     string    // Nom du conteneur -    Status            string    // "running" ou "stopped" -    PostgresVersion   string    // Version PostgreSQL -    Host              string    // Hôte (localhost) -    Port              string    // Port de connexion -    Database          string    // Nom de la DB -    User              string    // Utilisateur -    Password          string    // Mot de passe -    ConnectionString  string    // String de connexion complète -    CreatedAt         time.Time // Date de création -} -``` - -## Gestion des erreurs - -Le package gère automatiquement : - -- **Conflits** : Détecte si une base existe déjà -- **Ports occupés** : Trouve automatiquement un port libre (5433-6000) -- **Échec de démarrage** : Nettoie le conteneur si PostgreSQL ne démarre pas -- **Timeout** : Attend max 30 secondes le démarrage de PostgreSQL -- **Nettoyage** : Supprime les volumes lors de la suppression - -## Labels des conteneurs - -Tous les conteneurs créés ont les labels suivants : - -``` -sovrabase.managed=true -sovrabase.project_id=<project-id> -sovrabase.type=postgres -sovrabase.version=<pg-version> -sovrabase.created_at=<timestamp> -``` - -## Scripts de test - -### Test complet de l'API - -```bash -cd scripts -go run test_orchestrator_api.go -``` - -### Test simple de création - -```bash -cd scripts -go run test_orchestrator.go -``` - -### Nettoyage - -```bash -cd scripts -go run cleanup_test.go -``` - -## Commandes utiles - -```bash -# Voir tous les conteneurs Sovrabase -podman ps -a --filter "label=sovrabase.managed=true" - -# Logs d'un conteneur -podman logs sovrabase-db-<project-id> - -# Se connecter à la DB -podman exec -it sovrabase-db-<project-id> psql -U <user> -d <database> - -# Supprimer tous les conteneurs Sovrabase -podman rm -f $(podman ps -aq --filter "label=sovrabase.managed=true") -``` - -## Architecture - -``` -orchestrator/ -├── orchestrator.go          # Interface et implémentations -├── docker.go               # Logique Docker/Podman -└── kubernetes.go           # Logique Kubernetes (TODO) -``` - -## Roadmap - -- [x] Support Docker/Podman -- [x] Gestion des conflits -- [x] Assignment automatique des ports -- [x] Limites de ressources -- [x] Attente du démarrage -- [ ] Support Kubernetes -- [ ] Backup/Restore automatique -- [ ] Métriques et monitoring -- [ ] Mise à jour des versions PostgreSQL -- [ ] Réplication et haute disponibilité - -## Contribution - -Les contributions sont les bienvenues ! Assurez-vous que tous les tests passent : - -```bash -go test ./internal/orchestrator/... -```  | 
