Files
pg-instance-handler/README.md
JeremyLARDENOIS 9108981868
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is passing
feat: Initial commit
2026-03-01 14:53:04 +01:00

83 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# pg-instance-handler
Reconcilie des bases PostgreSQL à partir dun fichier YAML et gère leur cycle de vie (bases, utilisateurs, droits `CONNECT`, ownership).
## Sommaire
- Aperçu rapide
- Démarrage rapide (Docker Compose)
- Spécification YAML
- Variables denvironnement
- Build local et exécution
- Opérations et sécurité
- Dépannage
## Aperçu rapide
- Crée les bases manquantes et supprime celles non listées (sauf `postgres`).
- Crée/actualise un utilisateur par base, lui donne laccès et lownership de la base.
- Définition de létat désiré via un YAML monté dans le conteneur.
Code pertinent:
- Reconciliation: [src/app/database/database_service.rs](src/app/database/database_service.rs)
- Spéc YAML / lecture état désiré: [src/actors/driven/database_file_retriever.rs](src/actors/driven/database_file_retriever.rs)
- Accès Postgres (sqlx): [src/actors/driven/sqlx_handler.rs](src/actors/driven/sqlx_handler.rs)
- Entrée: [src/main.rs](src/main.rs)
- Conteneurs: [Dockerfile](Dockerfile), [docker-compose.yml](docker-compose.yml)
## Démarrage rapide (Docker Compose)
1) Préparez votre fichier YAML (exemple ci-dessous) à la racine du projet sous `database.yaml`.
2) Lancez:
```bash
docker compose up --build
```
Le service va:
- se connecter à PostgreSQL via `DATABASE_URL` (admin),
- réconcilier les bases selon `database.yaml`,
- créer/mettre à jour les utilisateurs et donner lownership,
## Spécification YAML
Exemple minimal: [database.yaml](database.yaml)
```yaml
databases:
- name: hello
user: hello_user
password: hello_password
```
- `name`: nom de la base à gérer
- `user`: utilisateur propriétaire/consommateur de la base
- `password`: mot de passe de cet utilisateur
Notes:
- Les noms (`name`, `user`) sont validés (lettres, chiffres, underscore; commencent par lettre/underscore).
- Le programme ne supprime jamais la base `postgres`.
## Variables denvironnement
- `DATABASE_URL`: URL admin PostgreSQL pour lorchestrateur (ex: `postgres://postgres:postgres@postgres:5432/postgres`).
Les exemples dENV sont indiqués dans [docker-compose.yml](docker-compose.yml).
## Build local et exécution
```bash
cargo build
```
Exécution locale (besoin dun Postgres accessible et dun `database.yaml`):
```bash
export DATABASE_URL="postgres://postgres:postgres@localhost:5432/postgres"
cargo run
```
## Opérations et sécurité
- Suppression: par défaut, toute base non listée est supprimée (sauf `postgres`). Pour un MVP, gardez le YAML strict et versionné. On pourra ajouter un mode « dry-run » et/ou restreindre la gestion à un préfixe (ex: `managed_`).
- Permissions: lutilisateur est `LOGIN PASSWORD`, reçoit `CONNECT` et devient owner de sa base.
- Droits DB: `DATABASE_URL` doit pointer une base admin avec droits de création/suppression et gestion des rôles.
## Dépannage
- `DROP DATABASE` échoue: des connexions actives empêchent la suppression. Le programme essaie de terminer les sessions avant `DROP`; réessayez.
---
Contributions bienvenues. Pour toute évolution (dry-run, périmètre géré, migrations), ouvrez une issue/PR.