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_servermodels
appellev1.servermodel.list
servermodels = await self.call('v1.servermodel.list')
load_servermodel
appellev1.servermodel.describe
avec 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_servers
appellev1.server.list
qui appelle autant de foisload_server
que nécessaireload_server
commence 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 Kong
/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_config
accède à l’API servie par le zephir 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_config
la session de configuration temporaire est supprimée.