Gestion de base de données
==========================

Le gestionnaire de base de données permet :
- La génération de base de données
- La modification de mot de passe à chaque reconfigure
- La mise à jour de mot de passe

Outils communs
--------------

db_layer.py : couche de connexion mysql
log.py : outil de gestion des logs (avec LOGLEVEL et LOGFILE)
config.py: configuration

Mise à jour de base de données
------------------------------

collect_update.py : collecte les applications et leur configuration de base de données
update_databases.py : met à jour les bases de données

Configuration d'une base à mettre à jour
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

un fichier __init__.py vide
un fichier .sql avec les éléments à mettre à jour
un fichier config.py avec un dictionnaire nommé conf_dict :

    conf_dict = dict(condition_query= < une requête pour analyse de l'état de mise à jour de la bdd >,
                 expected_response= <une fonction de vérification>,
                 db=<Nom de la base de données>,
                 user=<Nom de l'utilisateur>,
                 passwd=<Mot de passe de l'utilisateur>)

Evolutions
~~~~~~~~~~

- Générer la condition_query et l'expected_response depuis le .sql

Changement de mot de passe
--------------------------

collect_pwd.py : récupère les mots de passe à modifier
mysql_pwd.py : met à jour les mots de passe, éxédcutable

Configuration de mot de passe à mettre à jour
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans databases/applications/passwords, rajouter un fichier .ini.
Une section équivaut à une application et se configure comme suit:

    [application]
    template="passwd='"
    filename=/var/www/html/application/config/config.php
    username="adminapplication"

Après l'ajout de cette section dans le fichier .ini, si l'on lance mysql_pwd.py,
et que l'on valide la modification de tous les mots de passe:

- Un mot de passe sera généré pour "adminapplication"
- Dans le fichier /var/www/html/application/config/config.php, la chaine décrite par template, placée en début de ligne sera remplacée par:
  passwd='<nouveaumotdepasse>'; et un saut de ligne. A noter que la chaine de caractère est automatiquement fermée,
  et qu'un ';' est rajouté car c'est un fichier .php

Evolutions
~~~~~~~~~~

- Configuration de la fin de ligne dans template.

Génération de base de données
-----------------------------

collect_gen.py : récupère les configurations de base de données à générer
gen_databases.py : génère les bases de données

Configuration d'une base à mettre à jour
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Dans applications/gen/, rajouter un fichier .py de configuration.
Le fichier .py doit contenir :

La définition de l'encodage, une fonction de test et un dictionnaire 'conf_dict' :

    #-*-coding:utf-8-*-

    def test():
        """
            test l'existence de la table eva
        """
        return not isdir("/var/lib/mysql/eva3")

    conf_dict = dict(filenames=["/etc/sysconfig/eole/scribe-eva3.sql"],
                     test=test)

Il est possible de rajouter des fonctions pregen et postgen qui reçoivent un connecteur mysql en paramètre:

    def pregen(db_handler):
        print("Cette fonction s'éxécute avant la génération si le test passe")

    def postgen(db_handler):
        print("Cette fonction s'éxécute après la génération")


    conf_dict['pregen'] = pregen
    conf_dict['postgen'] = postgen

Lancez gen_databases.py et votre base de données sera créée.

