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 appelle v1.servermodel.list
config-manager/scripts/controller
servermodels = await self.call('v1.servermodel.list')
  • load_servermodel appelle v1.servermodel.describe avec le paramètre schema=True :
    permet de charger le schéma de servermodel
config-manager/scripts/controller
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 CreoleLoader PopulateTiramisuObjects
config-manager/scripts/controller
config = tiramisu_objects.build(persistent=True,
                                session_id='v_{}'.format(servermodelid),
                                meta_config=True)

Les serveurs

  • load_servers appelle v1.server.list qui appelle autant de fois load_server que nécessaire
  • load_server commence par créer, à partir de la variante, une configuration destinée à recueillir les données d’environnement du serveur. Elle est nommée p_<serverid> (p_ vient de probe, les données d’environnement issues des sondes)
config-manager/scripts/controller
metaconfig = self.servermodel[servermodelid].config.new('p_{}'.format(serverid),
                                                        persistent=True,
                                                        type='metaconfig')
  • La configuration finale est créée, nommée s_<serverid> (s_ pour server). Elle est destinée à recevoir les valeurs de configuration du serveur.
config-manager/scripts/controller
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

eole-genconfig/src/eolegenconfig/lib.py
  orig_config.value.importation(values)
  • à la fermeture de gen_config la session de configuration temporaire est supprimée.