creole/doc/variables.txt

202 lines
6.6 KiB
Plaintext
Raw Normal View History

2019-11-23 08:17:35 +01:00
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.