Skip to content

Latest commit

 

History

History
95 lines (60 loc) · 3.47 KB

15.databases-k8s-pr-env.md

File metadata and controls

95 lines (60 loc) · 3.47 KB

Gestion des données sur les environnements PR k8s

Fonctionnement

Pour chaque PR, un environnement k8s est créé automatiquement.

Tout d'abord, la base vide et l'user pg correspondant est créé, puis l'application démarre.

L'application est donc responsable de la création de la structure.

Ensuite, le dump des données est chargé à partir du fichier domifa_test.postgres.restore-data-only.sql.

Il est donc nécessaire de maintenir séparément le script de création de la structure ainsi que le script de chargement des données.

Création de la structure des données

La structure est créé par la migration typeorm 1603812391580-pr-env-create-database.ts.

Cette migration ne sera plus jamais jouée sur la base de prod ni sur nos environnements locaux (domifa_test et domifa_dev) car elle est présente dans la table migrations.

En revanche, elle est rejouée systématiquement sur l'environnement k8s créé pour chaque PR.

Le plupart du temps, il n'est pas nécessaire de modifier ce script, mais en cas de problème, ou pour faire du ménage dans les migrations, il est possible de le regénérer.

Pour ça, il faut utiliser une base vierge:

drop database domifa_dev;
create database domifa_dev;

Générer alors une migration complète typeorm:

npm run db:dev:generate
# Migration /app/packages/backend/src/_migrations/1634111480754-migration.ts has been generated successfully.

Placer le contenu de la méthode up()dans la méthode createTables() du fichier 1603812391580-pr-env-create-database.ts;

Supprimer les migrations qui ont déjà été jouées en prod (présentes dans la table migrations du backup de prod).

Si il reste des migrations de structure non-jouées en prod, alors il va falloir adapter manuellement la méthode createTables() pour y retirer les modifications.

Enfin, supprimer la migration générée précédemment.

Pour tester:

npm start

Tester en local la mise à jour des données telle que sur github/k8s

Entrer dans le container postgres:

docker exec -it domifa-postgres bash

Puis recréer une base de données de tests vierge (il faut être déconnecté de la base):

psql --username ${POSTGRES_USERNAME} --dbname postgres -c "drop database domifa_test;"
# DROP DATABASE
psql --username ${POSTGRES_USERNAME} --dbname postgres -c "create database domifa_test;"
# CREATE DATABASE

Sur le backend, exécuter les migrations pour créer la structure de la bdd:

npm run db:test:migrate-up
# WARN Migration success: 5

Enfin, importer le dump de données:

cat  /app/_scripts/db/dumps/domifa_test.postgres.truncate-data.sql  /app/_scripts/db/dumps/domifa_test.postgres.restore-data-only.sql | psql --username ${POSTGRES_USERNAME} --dbname domifa_test -1

Se connecter à la base de données d'un environnement k8s de dev

Dans rancher, se rendre sur la page des secrets: https://rancher.fabrique.social.gouv.fr/p/c-gjtkk:p-gv8gc/secrets

Choisir l'environnement concerné, et cliquer sur le lien azure-pg-user... puis sur "éditer" pour copier copier/coller les paramètres de connexion.

Ensuite, créer la connexion depuis votre client Postgres, avec les paramètres récupérés:

  • host: *********.postgres.database.azure.com
  • db name: autodevops_toub-fix-hide-sensitive-logs-in-dev-envs-13njf3
  • user name: user_************@******domifadevserver******.postgres.database.azure.com
  • SSH: ip de bastion, username et clé
  • SSL: utiliser ssl