Skip to content
Snippets Groups Projects
  • Mathieu Leguay's avatar
    [DLAB-4154] Update mongo init · 17db9bce
    Mathieu Leguay authored
    - Update PKI scripts: Restructuring scripts on an overload strategy
    - Renew PKI dev (missing CA, useful when we need to connect vitamui to others applications)
    - Update application assets according to the new dev PKI
    - Add/update readme
    17db9bce

En Développement

Ce projet est en développement.

Pre-requis

Disposer à minima de 8GO de RAM et de 20 GO de disk

Centos - Installer docker en dernière version de docker engine
    sudo yum check-update
    curl -fsSL https://get.docker.com/ | sh
    sudo systemctl start docker
    sudo systemctl status docker
    sudo systemctl enable docker (to start automatically)

Lancement des services Mongo avec docker

Pour lancer Mongo exécuter la commande :

./start_XXX.sh

Cette commande permet de démarrer les containers et de lancer les services Mongo.

Arrêt des services Mongo avec docker

Pour arrêter les services Mongo exécuter la commande :

./stop_XXX.sh

Aucune donnée n'est sauvegardée à l'arrêt de la base.

Suppression du container Mongo

Pour détruire le container vitamui-mongo :

docker rm vitamui-mongo

Ajouter un utilisateur Admin pour mongo

$ docker exec -it vitamui-mongo mongo admin connecting to: admin

> db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Successfully added user: {
    "user" : "jsmith",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}

Initialisation de la base Mongo

Afin de mutualiser le code et les scripts Mongo exploités en developpement ou lors du déploiement sur un environnement, l'intelligence a été répartie de la manière suivante:

  • Les scripts Mongo figurent à l'emplacement suivant: ~/tools/docker/mongo/database_scripts
  • Le role Ansible d'initialisation figure à l'emplacement suivant: ~/deployment/roles/mongo_init

Le role d'initialisation de la base de données a plusieurs fonctionnalités: ordonnancement des scripts, templatage et versioning.

Templatage des scripts de DB

La structure du dossier database_scripts est simple:

> database_scripts
  > 0.0.0
     > 01_script.js
     > 02_script.js
  > 0.1
  > 1.0
  > 1.0.5
  > 1.0.10

Deux niveaux de répertoires sont pris en compte:

  • 1er niveau: la version de l'application

    Lors du templatage, un premier tri par version est exécutée afin de trier ces dernières par ordre croissante.

  • 2ème niveau: les scripts à exécuter par version

    Lors du templatage, les scripts sont triés par ordre d'index (X_nomDuScript) afin d'assurer l'ordonnacement de l'exécution des scripts. Si aucun index n'est renseigné, l'ordre alphabétique s'applique.

    Par convention, les catégories d'indexes sont:

    • 0-99: scripts de référence à passer quelque soit les environnements
    • 100-199: scripts de démo
    • 200-299: Scripts de developpement.

Les scripts de templatage utilisés sont ceux du déploiement. Lors du packaging du projet, l'ensemble des scripts est copié et intégré à l'archive de déploiement.

Afin d'injecter les bonnes valeurs aux variables des templates, le fichier mongo_vars_dev.yml est présent.

Afin d'intégrer une surcharge extérieure des variables par défaut, il est possible de renseigner le chemin d'un autre fichier de variable à travers la variable d'environnements ADDITIONNAL_VITAMUI_CONFIG_FILE. Attention, toute variable définie dans ce fichier additionnel écrasera la valeur existante.

Versionning des scripts Mongo

Avant l'exécution d'un script, on vérifie que ce dernier a été exécuté. Pour ce faire, nous nous basons sur deux éléments:

  • le nom du fichier
  • le checkum du fichier

Lors de l'initialisation de la base de données, la base de données versioning est créée et la collection suivante est initialisée:

Changelog {
  id: Identifiant interne mongo
  filename: nom du fichier
  date: date d'éxécution du script
  version: version de l'application associée au script
  checksum: hash du fichier
}

Avant l'exécution de chaque script, on effectue une recherche d'exécution (sur les champs filename et checksum):

  • si le script a déjà été exécutée, aucun action n'est effectuée
  • si le script n'a pas été exécuté, ce dernier est exécuté et une entrée est rajoutée dans la collection changelog

Toute erreur lors du processus entraine l'arrêt de l'initialisation de la base Mongo

Dans le cas d'une migration d'une version de VitamUI précédent le versioning, il suffit de définir la variable Ansible mock_insert_data. Dans le cas présent, l'ensemble des scripts seront joués mais non exécutées, seules les entrées dans la collection changelog seront ajoutées.

Coloration syntaxique intellij

Si vous utilisez un IDE intellij, le plugin suivant vous offrera la coloration syntaxique adequate ainsi que quelques fonctionnalité de https://plugins.jetbrains.com/plugin/7792-yaml-ansible-support