Configuration manager¶
| sujet: | revue de code du micro service config-manager |
|---|---|
| date: | 29 octobre 2018 |
| script: | config-manager/scripts/controller |
Les variantes de configuration¶
Les variantes de configuration sont créées à partir des Servermodels.
get_servermodelsappellev1.servermodel.list
servermodels = await self.call('v1.servermodel.list')
load_servermodelappellev1.servermodel.describeavec le paramètreschema=True:- permet de charger le schéma de
servermodel
servermodel = await self.call('v1.servermodel.describe',
servermodelid=servermodelid,
inheritance=False,
resolvdepends=False,
schema=True)
Note
ce schéma est mis en cache
- ce schéma est une méta configuration nommée
v_<servermodelid>chargé par un CreoleLoaderPopulateTiramisuObjects
config = tiramisu_objects.build(persistent=True,
session_id='v_{}'.format(servermodelid),
meta_config=True)
Les serveurs¶
load_serversappellev1.server.listqui appelle autant de foisload_serverque nécessaireload_servercommence par créer, à partir de la variante, une configuration destinée à recueillir les données d’environnement du serveur. Elle est nomméep_<serverid>(p_vient de probe, les données d’environnement issues des sondes)
metaconfig = self.servermodel[servermodelid].config.new('p_{}'.format(serverid),
persistent=True,
type='metaconfig')
- La configuration finale est créée, nommée
s_<serverid>(s_pourserver). Elle est destinée à recevoir les valeurs de configuration du serveur.
config = metaconfig.config.new('s_{}'.format(serverid),
persistent=True)
Pour résumer:
servermodel.list() => servermodel.describe() => cache local
=> CreoleLoader => MetaConfig probe
=> MetaConfig server
La persistance¶
La configuration est déclarée comme persistante, dans le conteneur server elle est enregistrée
dans une base sqlite3. Les valeurs de la configuration sont conservées.
gen_config¶
L’application gen_config est composée deux éléments :
- une interface web statique (javascript/marionnette)
- une API HTTP accessible depuis l’extérieur via une route Traefik
/config
L’accès à l’application se fait via une URL comprenant la session utilisateur:
démarrer une session de configuration pour un serveur donnée
une configuration configuration temporaire et inmemory est créée à partir de la configuration actuelle du serveur
l’UI
gen_configaccède à l’API servie par Zéphir via des appels RPC dans lesquels l’ID de la session:/config/<session_id>/get /config/<session_id>/put
au moment de l’enregistrement, la configuration modifiée remplace la configuration persistante du serveur
orig_config.value.importation(values)
- à la fermeture de
gen_configla session de configuration temporaire est supprimée.