202 lines
6.6 KiB
Text
202 lines
6.6 KiB
Text
|
Variables cr<63>ole
|
|||
|
================
|
|||
|
|
|||
|
typeole_
|
|||
|
|
|||
|
.. _typeole: api/creole.typeole-module.html
|
|||
|
|
|||
|
variable cr<63>ole
|
|||
|
|
|||
|
instance d'un objet type eole, <20> un nom de variable correspond
|
|||
|
peut-<2D>tre plusieurs valeurs
|
|||
|
|
|||
|
>>> from creole import typeole
|
|||
|
>>> var = typeole.EoleVar('mavariable')
|
|||
|
>>> var.val
|
|||
|
[]
|
|||
|
>>> var.set_value('valeur')
|
|||
|
>>> var.set_value('defaut', default=True)
|
|||
|
>>> var.val
|
|||
|
['valeur']
|
|||
|
>>> var.valdefault
|
|||
|
['defaut']
|
|||
|
>>> var.description = 'variable de test'
|
|||
|
>>> var.description
|
|||
|
'variable de test'
|
|||
|
>>>
|
|||
|
|
|||
|
il est possible de cr<63>er une variable Eole <20> l'aide
|
|||
|
d'une factory :
|
|||
|
|
|||
|
>>> var2 = typeole.type_factory('string', 'test_string', valeole=["eole"], valdefault=["def"])
|
|||
|
>>> var2.get_value()
|
|||
|
['def']
|
|||
|
>>>
|
|||
|
|
|||
|
des v<>rifications de type sont faites au moment du *set_value()*
|
|||
|
|
|||
|
collecte des variables cr<63>ole
|
|||
|
-----------------------------
|
|||
|
|
|||
|
collecte
|
|||
|
|
|||
|
R<>cup<75>ration de variables qui serviront a la constitution du dictionnaire Eole
|
|||
|
|
|||
|
Les donn<6E>es du dictionnaire sont collect<63>es <20><> partir de diff<66>rents fichiers dans un premier format XML.
|
|||
|
|
|||
|
sur une machine cible, une collecte des variables eole est faite avec parse_dico_::
|
|||
|
|
|||
|
from creole.parsedico import parse_dico
|
|||
|
parse_dico()
|
|||
|
|
|||
|
.. ce test n'est pas lanc<6E> car il peut y avoir un dico sur le poste
|
|||
|
de travail
|
|||
|
|
|||
|
.. _parse_dico: api/creole.parsedico-module.html
|
|||
|
|
|||
|
Le dictionnaire cr<63>ole est vide. Pour le remplir, il faut
|
|||
|
r<EFBFBD>cup<EFBFBD>rer des donn<6E>es depuis un fichier xml initial::
|
|||
|
|
|||
|
my_dict = EoleDict()
|
|||
|
my_dict.read(join('/etc/eole/','eole.xml'))
|
|||
|
|
|||
|
.. TODO: read_string(self, xml_string)
|
|||
|
|
|||
|
Utilisation du dictionnaire
|
|||
|
---------------------------
|
|||
|
|
|||
|
dictionnaire
|
|||
|
|
|||
|
fichier au format xml contenant :
|
|||
|
- une liste de fichiers
|
|||
|
- une liste de variables
|
|||
|
|
|||
|
famille
|
|||
|
|
|||
|
Il s'agit d'un regroupement de variable utilis<69> pour la saisie : on parle alors de famille de variables
|
|||
|
|
|||
|
groupe
|
|||
|
|
|||
|
Il s'agit de variables de type `liste` dont les <20>l<EFBFBD>ments sont li<6C>es aux <20>l<EFBFBD>ments correspondants des autres
|
|||
|
eth[2] aura un lien avec netmask[2] et network[2].
|
|||
|
|
|||
|
Plut<EFBFBD>t que d'utiliser `parsedico`, construisons un dictionnaire creole EoleDict_ :
|
|||
|
|
|||
|
>>> from creole import cfgparser
|
|||
|
>>> from creole import typeole
|
|||
|
>>>
|
|||
|
>>> dico = cfgparser.EoleDict()
|
|||
|
>>> dico.variables['ip_eth'] = typeole.type_factory('string', 'ip_eth', val=['ip0', 'ip1', 'ip2'])
|
|||
|
>>> dico.variables['nom_etab'] = typeole.type_factory('string', 'nom_etab', val=['etab'])
|
|||
|
>>> dico.variables['vrai'] = typeole.type_factory('boolean', 'vrai', val=[True])
|
|||
|
>>> dico.variables['faux'] = typeole.type_factory('string', 'faux', val=['faux'])
|
|||
|
>>> dico.variables['toto'] = typeole.type_factory('string', 'toto', val=['toto'])
|
|||
|
|
|||
|
voici comment acc<63>der aux variables cr<63>ole
|
|||
|
|
|||
|
>>> assert dico.get_value('ip_eth') == ['ip0', 'ip1', 'ip2']
|
|||
|
>>> assert dico.get_value('nom_etab') == ['etab']
|
|||
|
|
|||
|
.. _EoleDict : api/creole.cfgparser.EoleDict-class.html
|
|||
|
|
|||
|
|
|||
|
variables de template
|
|||
|
-----------------------
|
|||
|
|
|||
|
|
|||
|
lorsqu'on utilise un appel de bas niveau de traitement de template,
|
|||
|
c'est-<2D>-dire l'appel direct <20> la
|
|||
|
m<EFBFBD>thode process_ d'un template, il faut v<>rifier qu'une variable
|
|||
|
est bien instanci<63>e avec le bon contexte de dictionnaire :
|
|||
|
|
|||
|
.. _process: api/creole.template.Template-class.html
|
|||
|
|
|||
|
>>> from creole.cfgparser import EoleDict
|
|||
|
>>> from creole import typeole
|
|||
|
>>> from creole.template import Template
|
|||
|
>>> dico = EoleDict()
|
|||
|
>>> dico.variables['toto'] = typeole.type_factory('string',
|
|||
|
... 'toto', val=['toto'], context=dico)
|
|||
|
>>> t = Template('data/dst/test.tmpl', templatedir= 'data/src')
|
|||
|
>>> t.verify()
|
|||
|
>>> t.process(dico)
|
|||
|
>>> f = open('data/dst/test.tmpl')
|
|||
|
>>> res = f.read()
|
|||
|
>>> f.close()
|
|||
|
>>> assert 'titi' not in res
|
|||
|
>>> dico.set_value('toto', 'titi')
|
|||
|
>>> t.process(dico)
|
|||
|
>>> f = open('data/dst/test.tmpl')
|
|||
|
>>> res = f.read()
|
|||
|
>>> f.close()
|
|||
|
>>> assert 'titi' in res
|
|||
|
|
|||
|
le contexte `dico` est pass<73> <20> la variable `toto`::
|
|||
|
|
|||
|
dico.variables['toto'] = typeole.type_factory('string',
|
|||
|
'toto', val=['toto'], context=dico)
|
|||
|
|
|||
|
variables automatiques
|
|||
|
----------------------
|
|||
|
|
|||
|
variable automatique
|
|||
|
|
|||
|
variable pr<70>sente dans le dictionnaire xml mais pas dans le fichier *.ini* de configuration.
|
|||
|
la valeur de cette variable (sont appel <20> *.get_value()* est soumis <20> une fonction de traitement
|
|||
|
sp<73>cifi<66>e dans le xml, qui calcule la variable au lieu de formater sa valeur.
|
|||
|
|
|||
|
Une variable automatique simple n'est pas trait<69>e diff<66>remment d'une variable dont la valeur est pr<70>sente dans le dictionnaire et qui est soumise <20> une condition de v<>rification de sa valeur. Simplement, aucune v<>rification n'est effectu<74>e et la valeur est calcul<75>e.
|
|||
|
|
|||
|
d<EFBFBD>claration de la variable::
|
|||
|
|
|||
|
<variable name='server_mem' type='string' description='memoire du serveur' auto='True' />
|
|||
|
|
|||
|
d<EFBFBD>claration de la fonction de remplissage::
|
|||
|
|
|||
|
<fill name='server_mem' target='server_mem' />
|
|||
|
|
|||
|
deux fonctions strictement automatiques sont impl<70>ment<6E>es: `server_mem` et `kernel_version`
|
|||
|
|
|||
|
variable semi-automatique
|
|||
|
|
|||
|
variable remplit automatiquement dans le cas d'une condition sur une autre variable,
|
|||
|
si cette condition n'est pas remplie, c'est l'uilisateur qui la remplit (ou une autre fonction).
|
|||
|
la condition est trait<69>e <20> deux niveaux, dans la fonction de remplissage, et au niveau de l'affichage.
|
|||
|
On remplit donc deux fonctions pour ce conditionnement (une fonction fill avec la variable
|
|||
|
conditionnante en param<61>tre et une fonction condition qui conditionne l'affichage de la variable.
|
|||
|
exemple : r<>cup<75>ration des adresses eth dans le cas o<> l'on a pas de dhcp.
|
|||
|
|
|||
|
d<EFBFBD>claration de la variable semi-auto::
|
|||
|
|
|||
|
<variable name='eth0' type='string' auto='True'/>
|
|||
|
|
|||
|
d<EFBFBD>claration de la variable qui d<>finit la condition::
|
|||
|
|
|||
|
<variable name='dhcp' type='boolean' description='Activation du dhcp' >
|
|||
|
<value>non</value>
|
|||
|
</variable>
|
|||
|
<check name='valid_enum' target='dhc'>
|
|||
|
<param>['oui','non']</param>
|
|||
|
</check>
|
|||
|
|
|||
|
d<EFBFBD>claration de la fonction de contr<74>le d'automatisme, la variable eth0 est remplie automatiquement par la fonction
|
|||
|
*auto_eth* si le param<61>tre dhcp est <20>gal <20> la condition *oui*::
|
|||
|
|
|||
|
<fill name='auto_eth' target='eth0'>
|
|||
|
<param>eth0</param>
|
|||
|
<param name='condition'>oui</param>
|
|||
|
<param type='eole' name='parametre'>dhcp</param>
|
|||
|
</fill>
|
|||
|
|
|||
|
d<EFBFBD>claration de la fonction de contr<74>le d'<27>ditabilit<69>::
|
|||
|
|
|||
|
<condition name='hidden_if_in' source='dhc'>
|
|||
|
<param>oui</param>
|
|||
|
<target type='variable'>eth0</target>
|
|||
|
</condition>
|
|||
|
|
|||
|
pour l'instant sont diposnible auto_eth, auto_netmask, auto_broadcast et auto_network.
|
|||
|
|
|||
|
|
|||
|
|