Projet

Général

Profil

EnvoleEoleDB » Historique » Version 10

Philippe Caseiro, 27/01/2016 15:07

1 9 Gérald Schwartzmann
h1. Comment migrer une application Envole à EoleDB
2 1 Philippe Caseiro
3 10 Philippe Caseiro
h2. Comprendre EoleDB
4 1 Philippe Caseiro
5 10 Philippe Caseiro
EoleDB est une re-implémentation de l'ancien système eole-sql avec quatres objectifs principaux : 
6 1 Philippe Caseiro
# Avoir 1 seul fichier de configuration.
7 1 Philippe Caseiro
# Supporter nativement plusieurs types de bases de données (mysql, postgresql, sqlite, ...).
8 1 Philippe Caseiro
# Supporter nativement l'externalisation des baes de données sur d'autres serveurs.
9 10 Philippe Caseiro
# Ne plus avoir fournir des scripts python pour pouvoir générer ou mettree à jour des bases de données quand de la configuration suffit largement (cf conf/updates/config.py).
10 1 Philippe Caseiro
11 10 Philippe Caseiro
12 3 Philippe Caseiro
EoleDB dispose d'un fichier de configuration par défaut, _*/etc/eole/eole-db.conf*_, ce fichier
13 2 Philippe Caseiro
au format yaml définis le comportement par défaut de EoleDB si aucune configuration spécifique 
14 2 Philippe Caseiro
n'est définie par l'application.
15 2 Philippe Caseiro
16 2 Philippe Caseiro
L'application dispose d'un fichier de configuration au format yaml qui surcharge le comportement
17 3 Philippe Caseiro
de EoleDB. Les fichiers de configurations sont dans _*/etc/eole/eole-db.d/*_**.
18 1 Philippe Caseiro
Les fichiers de configuration spécifiques aux applications redéfinissent le comportement de EoleDB.
19 1 Philippe Caseiro
20 10 Philippe Caseiro
Actuellement EoleDB supporte complètement MySQL, le support postgresql et sqlite sont a compléter.
21 10 Philippe Caseiro
22 10 Philippe Caseiro
Pour des raisons pratiques, EoleDB réaliste également le changement de mots de passe dans les 
23 10 Philippe Caseiro
fichiers de configuration des applications, les mots de passes sont changées a chaque lancement
24 10 Philippe Caseiro
de la commande eole_db_gen, dans le cas de EOLE au minimum cette commande est lancée a chaque reconfigure.
25 10 Philippe Caseiro
26 10 Philippe Caseiro
Pour utiliser EoleDB il suffit de mettre en place les fichiers de configuration et de lancer la commande 
27 10 Philippe Caseiro
*eole_db_gen* 
28 10 Philippe Caseiro
29 10 Philippe Caseiro
h3. man eole_db_gen
30 10 Philippe Caseiro
31 10 Philippe Caseiro
Si vous lancez eole_db_gen sans aucun paramètre le programme vas utiliser les paramètres par défaut,
32 10 Philippe Caseiro
pour diverses raisons vous pouvez avoir envie d'utiliser d'autres fichiers de configurations.
33 10 Philippe Caseiro
34 10 Philippe Caseiro
Pour ce faire vous pouvez utiliser les paramètres de la commande suivants : 
35 10 Philippe Caseiro
36 10 Philippe Caseiro
* -h, --help: Affiche le message d'aide à l'utilisation de la commande
37 10 Philippe Caseiro
* -c, --config: Définir un fichier de configuration a utiliser à la place de _/etc/eole/eole-db.conf_
38 10 Philippe Caseiro
* -d, --dbdir: Définir un répertoire qui contiens les fichiers de configuration des applications qui n'est pas _/etc/eole/eole-db.d/_
39 10 Philippe Caseiro
* -b, --backup-dir: Définir un répertoire pour copier les sauvegardes des fichiers modifiés par EoleDB
40 10 Philippe Caseiro
41 10 Philippe Caseiro
42 10 Philippe Caseiro
h2. Configurer EoleDB
43 10 Philippe Caseiro
44 3 Philippe Caseiro
h3. Les options de configuration possibles pour _/etc/eole/eole-db.conf_:
45 3 Philippe Caseiro
46 2 Philippe Caseiro
* *dbcont*: Définition du conteneur par défaut de la base de données en mode conteneur
47 2 Philippe Caseiro
* *dbhost*: Définition de l'adresse du serveur de base de données par défaut
48 1 Philippe Caseiro
* *dbport*: Définition du port d'écoute du serveur de base de données par défaut
49 1 Philippe Caseiro
* *dbroot*: Définition du nom de l'utilisateur ayant des droits "Administrateur" sur le serveur de base de données par défaut
50 1 Philippe Caseiro
* *dbrootpwd*: Définition du mot de passe part défaut de l'utilisateur définis par l'option *dbroot*
51 1 Philippe Caseiro
* *dbtype* : Définition du type de base de données par défaut du serveur de base de données (mysql, pgsql, sqlite, ...)
52 3 Philippe Caseiro
* *client_hosts*: Liste des noms d'hôtes ou IP depuis lesquels les utilisateurs pourrons ouvrir des sessions sur le serveur de base de données. 
53 3 Philippe Caseiro
* *dbcliconf* : Définition d'un fichier de paramètrage par défaut (utile pour mysql)
54 3 Philippe Caseiro
55 3 Philippe Caseiro
*Attention :* 
56 3 Philippe Caseiro
57 6 Philippe Caseiro
Les options passées dans le fichier définis dans *dbcliconf* rendent inutiles les options *dbhost*, *dbport*, *dbroot*, *dbrootpwd* et *dbtype*
58 3 Philippe Caseiro
59 7 Philippe Caseiro
L'option *dbrootpwd* ne prend pas un mot de passe en clair, mais un fichier qui contiens le mot de passe. Comme le .reader du LDAP.
60 3 Philippe Caseiro
61 3 Philippe Caseiro
 h3. Les options de configuration possibles pour les fichiers spécifiques aux applications (_/etc/eole/eole-db.d/*.yml_:
62 3 Philippe Caseiro
63 3 Philippe Caseiro
* *dbhost*: définition de l'adresse du serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
64 3 Philippe Caseiro
* *dbport*: définition du port d'écoute du serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
65 3 Philippe Caseiro
* *dbroot*: Définition du nom de l'utilisateur ayant des droits "Administrateur" sur le serveur de base de données utilisé par l'application (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
66 3 Philippe Caseiro
* *dbrootpwd*: Définition du mot de passe part défaut de l'utilisateur définis par l'option *dbroot* (surcharge la valeur par défaut défnie dans *_/etc/eole/eole-db.conf_*)
67 3 Philippe Caseiro
68 3 Philippe Caseiro
* *dbname*: Nom de la base de données de l'application
69 3 Philippe Caseiro
* *dbuser*: Nom de l'utilisateur utilisé par l'application pour accéder à la base définies dans *dbname*
70 3 Philippe Caseiro
* *dbpass*: Mot de passe utilisé par l'application pour l'utilisateur définis dans *dbuser*
71 3 Philippe Caseiro
* *createscript*: Script SQL de création de la base de données définie dans *dbname*
72 3 Philippe Caseiro
* *sqlscripts*: Scripts SQL a lancer après le script de création définis dans *createscript*
73 3 Philippe Caseiro
* *updatescripts*: Scripts de mise à jour lancée sur la base définie dans *dbname* (lancé uniquement si la base existe déjà)
74 3 Philippe Caseiro
* *pwd_files* : Définition des fichiers à mettre à jour après le changement du mot de passe de l'utilisateur définis dans *dbuser*
75 3 Philippe Caseiro
76 3 Philippe Caseiro
Note sur l'option *pwd_files*:
77 3 Philippe Caseiro
78 3 Philippe Caseiro
L'option pwd_files prend une liste de "dictionnaires" au sens python, cette option attend donc quelque chose comme ça :
79 3 Philippe Caseiro
80 3 Philippe Caseiro
<pre>
81 3 Philippe Caseiro
pwd_files:
82 3 Philippe Caseiro
    - {file: '/var/www/html/posh/includes/config.inc.php',
83 3 Philippe Caseiro
       container: 'web',
84 3 Philippe Caseiro
       pattern: 'define("__PASS","',
85 3 Philippe Caseiro
       end_pattern: ');',
86 3 Philippe Caseiro
       owner: 'root:www-data',
87 3 Philippe Caseiro
       mod: '660' }
88 3 Philippe Caseiro
    - {file: '/usr/share/envole/eoledb/posh',
89 3 Philippe Caseiro
       pattern: 'dbpassPOSH="',
90 3 Philippe Caseiro
       owner: 'root:root',
91 3 Philippe Caseiro
       mod: '600' }
92 3 Philippe Caseiro
</pre>
93 3 Philippe Caseiro
94 3 Philippe Caseiro
Voici la liste des options possibles pour les "structures" (dictionnaires au sens python) possibles pour un élément de la liste *pwd_files*:
95 3 Philippe Caseiro
96 3 Philippe Caseiro
* file : Chemin complet du fichier a modifier, *cette option est obligatoire*
97 3 Philippe Caseiro
* pattern : Modèle de ligne qui contiens le mot de passe entre ''. *cette option est obligatoire*
98 3 Philippe Caseiro
* container: Conteneur ou ce trouve le fichier a modifier (valable uniquement en mode conteneur) 
99 3 Philippe Caseiro
* end_pattern: caractères a ajouter après le mot de passe sur la ligne lors de la modification du fichier
100 3 Philippe Caseiro
* owner: Propriétaire, au format "user:group", a définir après la modification du mot de passe
101 3 Philippe Caseiro
* mod: Droits au format unix (ex: 600) a définir après la modification du mot de passe
102 3 Philippe Caseiro
103 3 Philippe Caseiro
Note sur l'option *pattern*:
104 3 Philippe Caseiro
105 3 Philippe Caseiro
L'option pattern permet de définir le modèle de ligne qui contiens le mot de passe, il est important de définir la totalité de ce qui précède le mot de passe dans la ligne.
106 3 Philippe Caseiro
107 3 Philippe Caseiro
Par exemple si la ligne a changer est la suivante : 
108 3 Philippe Caseiro
109 3 Philippe Caseiro
<pre>
110 3 Philippe Caseiro
password: "JeSuiSunMauvaisPassowrd"
111 3 Philippe Caseiro
</pre>
112 3 Philippe Caseiro
113 3 Philippe Caseiro
Il faut définir la valeur suivante pour l'option *pattern*:
114 3 Philippe Caseiro
<pre>
115 3 Philippe Caseiro
pwd_files:
116 3 Philippe Caseiro
   - {file: "/monfichier.conf",
117 3 Philippe Caseiro
      pattern: 'password: "'
118 3 Philippe Caseiro
</pre>
119 3 Philippe Caseiro
Le " est important car lorsqu'il est définis EoleDB détermine automatiquement qu'il faut qu'il ferme les " après 
120 3 Philippe Caseiro
la mise en place du nouveau mot de passe.
121 3 Philippe Caseiro
122 3 Philippe Caseiro
Si le pattern de votre mot de passe doit être entre des ' il faut préférer le format suivant : 
123 3 Philippe Caseiro
<pre>
124 3 Philippe Caseiro
pattern: "password: '"
125 3 Philippe Caseiro
</pre>
126 3 Philippe Caseiro
127 3 Philippe Caseiro
EoleDB gère également la fermeture des '
128 3 Philippe Caseiro
129 3 Philippe Caseiro
EoleDB détecte également les ";" en fin de ligne ce qui fait que si votre ligne de mot de passe ce termine par un ";" , il ajouteras automatiquement le ";" final. Si vous avez des problèmes avec la terminaison automatique de la ligne avec le ";" ou que votre ligne ce termine par autre chose que ";" vous pouvez utiliser l'option *end_pattern*.
130 3 Philippe Caseiro
131 3 Philippe Caseiro
Note sur l'option *end_pattern*:
132 3 Philippe Caseiro
133 3 Philippe Caseiro
Cette option permet de définir les caractères a ajouter a la fin de la ligne juste après le nouveau mot de passe.
134 3 Philippe Caseiro
135 3 Philippe Caseiro
Par exemple si votre ligne de mot de passe à le format suivant : 
136 3 Philippe Caseiro
<pre>
137 3 Philippe Caseiro
define('DBPASS': 'JeSuisUnMauvaisPassword');
138 3 Philippe Caseiro
</pre>
139 3 Philippe Caseiro
140 3 Philippe Caseiro
Sans l'option *end_pattern* EoleDB vas produire la ligne suivante:
141 3 Philippe Caseiro
142 3 Philippe Caseiro
<pre>
143 3 Philippe Caseiro
define('DBPASS': 'Sv;434up<'
144 3 Philippe Caseiro
</pre>
145 3 Philippe Caseiro
146 3 Philippe Caseiro
Pour que votre ligne soit correctement fermée il faut défnir *end_pattern* de la manière suivante:
147 1 Philippe Caseiro
148 3 Philippe Caseiro
<pre>
149 3 Philippe Caseiro
   end_pattern: ");",
150 4 Philippe Caseiro
</pre>
151 3 Philippe Caseiro
152 3 Philippe Caseiro
Il faut noter que le *end_pattern * ne contiens pas le ' fermant car EoleDB gère automatiquement la fermeture des " il est donc inutil de le préciser. Avec cette définition la ligne produite par EoleDB sera:
153 3 Philippe Caseiro
154 3 Philippe Caseiro
<pre>
155 3 Philippe Caseiro
define('DBPASS': 'Sv;434up<');
156 3 Philippe Caseiro
</pre>
157 8 Philippe Caseiro
158 8 Philippe Caseiro
159 8 Philippe Caseiro
Voici un exemple tiré du projet eole-posh après migration a EoleDB : 
160 8 Philippe Caseiro
161 8 Philippe Caseiro
<pre>dbtype: mysql
162 8 Philippe Caseiro
dbname: posh
163 8 Philippe Caseiro
dbuser: posh
164 8 Philippe Caseiro
dbpass: "MOTDEPASSE"
165 8 Philippe Caseiro
createscript: "/usr/share/eole/mysql/posh/gen/posh-create-1.sql"
166 8 Philippe Caseiro
sqlscripts: ["/usr/share/eole/mysql/posh/updates/posh-update-1.sql"]
167 8 Philippe Caseiro
pwd_files:
168 8 Philippe Caseiro
    - {file: '/var/www/html/posh/includes/config.inc.php',
169 8 Philippe Caseiro
       container: 'web',
170 8 Philippe Caseiro
       pattern: 'define("__PASS","',
171 8 Philippe Caseiro
       end_pattern: ');',
172 8 Philippe Caseiro
       owner: 'root:www-data',
173 8 Philippe Caseiro
       mod: '660' }
174 8 Philippe Caseiro
    - {file: '/usr/share/envole/eoledb/posh',
175 8 Philippe Caseiro
       pattern: 'dbpassPOSH="',
176 8 Philippe Caseiro
       owner: 'root:root',
177 8 Philippe Caseiro
       mod: '600' }
178 8 Philippe Caseiro
    - {file: '/usr/share/eole/postservice/10-posh',
179 8 Philippe Caseiro
       pattern: 'POSHPASS=',
180 8 Philippe Caseiro
       owner: 'root:root',
181 8 Philippe Caseiro
       mod: '700' }
182 8 Philippe Caseiro
    - {file: '/var/www/html/sap/config/mysql.inc.php',
183 8 Philippe Caseiro
       container: 'web',
184 8 Philippe Caseiro
       pattern: '$dbpwd="',
185 8 Philippe Caseiro
       end_pattern: ';',
186 8 Philippe Caseiro
       owner: 'root:www-data',
187 8 Philippe Caseiro
       mod: '660' }
188 8 Philippe Caseiro
189 1 Philippe Caseiro
190 1 Philippe Caseiro
</pre>
191 10 Philippe Caseiro
192 10 Philippe Caseiro
193 10 Philippe Caseiro
h2. Migrer une application vers EoleDB.
194 10 Philippe Caseiro
195 10 Philippe Caseiro
Pour migrer une application vers EoleDB le principe est plutôt simple, même si le faire n'est pas si simple.
196 10 Philippe Caseiro
En bref si votre application répond au standard _eole-skeletor_ il suffit de remplacer les fichiers de configuration
197 10 Philippe Caseiro
du répertoire *sql* de votre dépôt par un seul et unique fichier de configuration au format yaml avec les options
198 10 Philippe Caseiro
que à disposition dans EoleDB.
199 10 Philippe Caseiro
200 10 Philippe Caseiro
Oui sur le papier c'est simple, et cela peut être très très simple pour reproduire ce que vous avez aujourd'hui
201 10 Philippe Caseiro
dans vos dépôts il suffit de transcrire les fichiers suivants dans un seul et unique yaml :
202 10 Philippe Caseiro
* conf/updates/config.py
203 10 Philippe Caseiro
* conf/gen/mon_apply.py
204 10 Philippe Caseiro
* conf/passwords/mon_apply.ini
205 10 Philippe Caseiro
206 10 Philippe Caseiro
Par exemple pour l'application taskfreak, voici le yaml qu'il faut mettre dans _/etc/eole/eole-db.d/_ pour rempalcer tous les anciens fichiers de configuration (valable pour un scribe):
207 10 Philippe Caseiro
208 10 Philippe Caseiro
<pre>
209 10 Philippe Caseiro
dbtype: mysql
210 10 Philippe Caseiro
dbname: taskfreak
211 10 Philippe Caseiro
dbuser: taskfreak
212 10 Philippe Caseiro
dbpass: "Un mot de passe !!"
213 10 Philippe Caseiro
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
214 10 Philippe Caseiro
pwd_files:
215 10 Philippe Caseiro
    - {file: '/var/www/html/taskfreak/include/config.php',
216 10 Philippe Caseiro
       pattern: '$dbpass="',
217 10 Philippe Caseiro
       owner: 'www-data:www-data',
218 10 Philippe Caseiro
       mod: '600'}
219 10 Philippe Caseiro
</pre>
220 10 Philippe Caseiro
221 10 Philippe Caseiro
Pas une ligne de python un seul fichier.
222 10 Philippe Caseiro
223 10 Philippe Caseiro
La ou l'affaire deviens complexe c'est lorsqu'on a envie que notre application bénéficie de toutes les possibilités de EoleDB et surtout de la base de données externalisée.
224 10 Philippe Caseiro
225 10 Philippe Caseiro
Dans le cas de l'exemple il suffit de fournir un template simple pour générer cette configuration, voir même de la fournir en dur en l'étât. 
226 10 Philippe Caseiro
227 10 Philippe Caseiro
Pour comprendre pourquoi supporter les divers modes de base de données offerts par EoleDB est complexe il faut comprendre quels sont les dits modes.
228 10 Philippe Caseiro
229 10 Philippe Caseiro
h3. Possibilités offertes par EoleDB aux applications.
230 10 Philippe Caseiro
231 10 Philippe Caseiro
h4. Le mode "default" !
232 10 Philippe Caseiro
233 10 Philippe Caseiro
La première et la plus simple est le mode "défault" ce mode consiste a dire, je fait confiance a la configuration globale de EoleDB et mon application est très heureuse avec ça.
234 10 Philippe Caseiro
235 10 Philippe Caseiro
Ce qui ce traduit par l'exemple de taskfreak dans la partie précédente. Dans cette configuration : 
236 10 Philippe Caseiro
237 10 Philippe Caseiro
<pre>
238 10 Philippe Caseiro
dbtype: mysql
239 10 Philippe Caseiro
dbname: taskfreak
240 10 Philippe Caseiro
dbuser: taskfreak
241 10 Philippe Caseiro
dbpass: "Un mot de passe !!"
242 10 Philippe Caseiro
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
243 10 Philippe Caseiro
pwd_files:
244 10 Philippe Caseiro
    - {file: '/var/www/html/taskfreak/include/config.php',
245 10 Philippe Caseiro
       pattern: '$dbpass="',
246 10 Philippe Caseiro
       owner: 'www-data:www-data',
247 10 Philippe Caseiro
       mod: '600'}
248 10 Philippe Caseiro
</pre>
249 10 Philippe Caseiro
250 10 Philippe Caseiro
L'application ne prend aucune liberté avec la configuration de EoleDB et ce repose exclusivement sur ce qui est définis par défaut dans /etc/eole/eole-db.conf.
251 10 Philippe Caseiro
252 10 Philippe Caseiro
h4. Le mode "local" !
253 10 Philippe Caseiro
Le second mode est le mode dit "local" dans ce mode l'application a envie de forcer l'utilisation d'un serveur local, pour ce faire on vas devoir générer la configuration suivante : 
254 10 Philippe Caseiro
255 10 Philippe Caseiro
<pre>
256 10 Philippe Caseiro
---
257 10 Philippe Caseiro
dbhost: 127.0.0.1
258 10 Philippe Caseiro
dbtype: mysql
259 10 Philippe Caseiro
dbname: taskfreak
260 10 Philippe Caseiro
dbuser: taskfreak
261 10 Philippe Caseiro
dbpass: "task;Freak"
262 10 Philippe Caseiro
client_hosts: ["127.0.0.1", "localhost"]
263 10 Philippe Caseiro
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
264 10 Philippe Caseiro
pwd_files:
265 10 Philippe Caseiro
    - {file: '/var/www/html/taskfreak/include/config.php',
266 10 Philippe Caseiro
       pattern: '$dbpass="',
267 10 Philippe Caseiro
       owner: 'www-data:www-data',
268 10 Philippe Caseiro
       mod: '600' }
269 10 Philippe Caseiro
</pre>
270 10 Philippe Caseiro
271 10 Philippe Caseiro
On vois déjà les différences entre les deux modes. Vous remarquerez que nous ne définissons pas de *dbroot* ni de *dbrootpwd*, c'est pour une raison simple, Sur un serveur Eole, EoleDB vas utiliser le fichier de configuration par défaut fournis par ubuntu pour ce connecter a la base de données et effectué les opérations, donc ces options ne sont pas nécessaires, cependant vous pouvez les définir si EoleDB ne fonctionne pas sur un serveur Eole.
272 10 Philippe Caseiro
273 10 Philippe Caseiro
Ici l'application dit a EoleDB d'ignorer la configuration définie dans le fichier de configuration _/etc/eole/eole-db.conf_ pour utiliser le serveur local, donc si vous avez définis un serveur externe dans la configuration par défaut la base seras créer sur le serveur local.
274 10 Philippe Caseiro
275 10 Philippe Caseiro
Nous avons donc deux cas qui demandent des configurations différentes et il reste un troisième mode, pour que l'application puisse définir son propre serveur de base de données externe et une fois de plus dire a EoleDB de ne pas appliquer la configuration par défaut.
276 10 Philippe Caseiro
277 10 Philippe Caseiro
h4. Le mode "externe"!
278 10 Philippe Caseiro
279 10 Philippe Caseiro
Dans ce mode l'application définie complètement un serveur externe de base de données. Voici a quoi la configuration pour ce mode pour l'application taskfreak :
280 10 Philippe Caseiro
281 10 Philippe Caseiro
<pre>
282 10 Philippe Caseiro
---
283 10 Philippe Caseiro
dbhost: 192.168.45.34
284 10 Philippe Caseiro
dbport: 3309
285 10 Philippe Caseiro
dbroot: adminDB
286 10 Philippe Caseiro
dbrootpwd: /root/.secrets-mydb
287 10 Philippe Caseiro
dbtype: mysql
288 10 Philippe Caseiro
dbname: taskfreak
289 10 Philippe Caseiro
dbuser: taskfreak
290 10 Philippe Caseiro
dbpass: "task;Freak"
291 10 Philippe Caseiro
client_hosts: ["127.0.0.1", "localhost", "192.168.0.14" ]
292 10 Philippe Caseiro
createscript: "/usr/share/eole/mysql/taskfreak/gen/taskfreak-create.sql"
293 10 Philippe Caseiro
pwd_files:
294 10 Philippe Caseiro
    - {file: '/var/www/html/taskfreak/include/config.php',
295 10 Philippe Caseiro
       pattern: '$dbpass="',
296 10 Philippe Caseiro
       owner: 'www-data:www-data',
297 10 Philippe Caseiro
       mod: '600' }
298 10 Philippe Caseiro
</pre>
299 10 Philippe Caseiro
300 10 Philippe Caseiro
Ici on définis des nouvelles valeurs pour *dbhost*, *dbport*, *dbroot*, *dbrootpwd*, on ajoute également l'adresse IP de la carte réseaux qui communique avec le serveur de base de données dans la liste *client_hosts*, attention si on n'ajoute pas cette adresse IP la connexion avec l'utilisateur définis dans *dbname* ne sera pas fonctionnelle.
301 10 Philippe Caseiro
302 10 Philippe Caseiro
Nous avons donc trois possibilités de configuration pour EoleDB et si nous voulons offrir les trois possibilités aux utilisateurs, il n'y a qu'une seule solution créer un template pour le fichier de configuration au foramt yaml de notre application.
303 10 Philippe Caseiro
304 10 Philippe Caseiro
Il existe d'autres possibilités qui ne sont pas développées ici, par exemple permettre la création de plusieurs bases de données une une seule application, mais ces usages relèves plus de nos délires de développeurs Eole/Envole que de la réalité du besoin. Nous nous sommes concentrés sur les 3 cas qui nous semblais être les plus utiles aux utilisateurs.
305 10 Philippe Caseiro
306 10 Philippe Caseiro
Avant d'entrer dans le vif du sujet il faut malgré tout parlé d'un "quatrième" cas, le mode conteneur et oui si on souhaite que notre application soit fonctionnelle sur un module comme AmonÉcole lorsque l'utilisateur selection le mode "local" il faut adapater la configuration.
307 10 Philippe Caseiro
308 10 Philippe Caseiro
Donc pour créer ce nouveau template nous allons avoir besoin de créer de nouvelles variables.
309 10 Philippe Caseiro
310 10 Philippe Caseiro
h3. Mise à jour du dictionnaire pour le support des 3 modes
311 10 Philippe Caseiro
312 10 Philippe Caseiro
Afin de simplifier les choses pour l'utilisateur, nous avons pris le partis de mettre toutes les variables dans une 
313 10 Philippe Caseiro
nouvelle famille (donc nouvel onglet dans gen_connfig) en mode expert.
314 10 Philippe Caseiro
315 10 Philippe Caseiro
<pre>
316 10 Philippe Caseiro
<family name='taskfreak' mode='expert'>
317 10 Philippe Caseiro
</family>
318 10 Philippe Caseiro
</pre>
319 10 Philippe Caseiro
320 10 Philippe Caseiro
La première variable de cette famille vas servir a permettre à l'utilisateur de faire le choix du mode.
321 10 Philippe Caseiro
Voici la dite variable pour taskfreak:
322 10 Philippe Caseiro
323 10 Philippe Caseiro
<pre>
324 10 Philippe Caseiro
<variable name='tf_db_mode' type='string' description='Serveur de bases de données à utiliser'/>
325 10 Philippe Caseiro
</pre>
326 10 Philippe Caseiro
327 10 Philippe Caseiro
Cetta variable est une simple liste des trois modes, il faut donc lui ajouter une contrainte : 
328 10 Philippe Caseiro
329 10 Philippe Caseiro
<pre>
330 10 Philippe Caseiro
<check name='valid_enum' target='tf_db_mode'>
331 10 Philippe Caseiro
    <param>['default', 'externe', 'local']</param>
332 10 Philippe Caseiro
</check>
333 10 Philippe Caseiro
</pre>
334 10 Philippe Caseiro
335 10 Philippe Caseiro
Ensuite il nous faut une variable pour stocker l'adresse du serveur de base de données en mode "externe":
336 10 Philippe Caseiro
337 10 Philippe Caseiro
<pre>
338 10 Philippe Caseiro
<variable type='string' name='tf_dbserver' description='Adresse du serveur de base de données'/>
339 10 Philippe Caseiro
</pre>
340 10 Philippe Caseiro
341 10 Philippe Caseiro
Puis une variable pour le port d'écoute du serveur en mode "externe" : 
342 10 Philippe Caseiro
343 10 Philippe Caseiro
<pre>
344 10 Philippe Caseiro
<variable type='number' name='tf_dbport' description="Port d'écoute du serveur de base de données"/>
345 10 Philippe Caseiro
</pre>
346 10 Philippe Caseiro
347 10 Philippe Caseiro
Une variable pour le nom de l'utilisateur ayant des droits administrateur sur le serveur de base de données en mode externe: 
348 10 Philippe Caseiro
<pre>
349 10 Philippe Caseiro
<variable type='string' name='tf_dbuser' description='Utilisateur du serveur de base de données'/>
350 10 Philippe Caseiro
</pre>
351 10 Philippe Caseiro
352 10 Philippe Caseiro
Une variable pour permettre spécifier le fichier de mot de passe pour l'utilisateur définis précédement :
353 10 Philippe Caseiro
<pre>
354 10 Philippe Caseiro
<variable type='string' name='tf_dbpass' description='Fichier de mot de passe du serveur'/>
355 10 Philippe Caseiro
</pre>
356 10 Philippe Caseiro
357 10 Philippe Caseiro
Enfin il nous faut une variable pour permettre de saisir les adresse IP qui peuvent ouvrir des sessions sur le serveur distant:
358 10 Philippe Caseiro
359 10 Philippe Caseiro
<pre>
360 10 Philippe Caseiro
<variable type='string' name='tf_allow_hosts' description="Hôtes authorisés à utiliser la base de données" multi='true'/>
361 10 Philippe Caseiro
</pre>
362 10 Philippe Caseiro
363 10 Philippe Caseiro
Cette dernière est une liste et donc avec l'option "multi=true"
364 10 Philippe Caseiro
<pre>