fa37aafdefa950ef760ff2736f5fafdafd36a474
[tiramisu.git] / doc / eole-report / eolreport / D02CoherenceVariables.txt
1 .. default-role:: literal
2
3 .. include:: inc/preambule.txt
4
5 Cohérence des valeurs des variables 
6 ====================================
7
8 type des variables 
9 -------------------
10
11 **Créole**
12
13 pas d'unicité du type abstrait : `Multivar`, `CreoleVar` et `TypedVar`
14
15 - `String`
16 - `Ip`
17 - `Netmask`
18 - `Number`
19 - `Boolean`
20 - `OuiNon`
21
22 **tiramisu**
23
24 unicité du type abstrait : `Option()`
25
26 pas de nouveau type multivalué, mais un attribut des types existants::
27
28     >>> from option import BoolOption
29     >>> boolopt = BoolOption('bool', 'description de bool', multi=True)
30
31 tous les types Créole, plus
32
33 - `SymlinkOption`
34 - `CheckOption` qui permet de définir les "oui/non", "On/Off"
35
36 Validations suivant l'organisation en familles
37 -----------------------------------------------
38
39 **Créole**
40
41 **Organisation par accumulation de références sur des dictionnaires (`EoleDict`)**
42
43 On peut charger un EoleDict avec des variables qui pointent vers des families
44 qui n'existent pas, aucune validation n'est faite (confiance absolument faite au
45 moment du chargemzent du XML)
46
47 exemple, dans l'espace de nommage racine::
48
49     <variables>
50     <variable name="adresse_ip_eth0">
51
52
53 ::
54
55     from creole.parsedico import parse_dico
56     flatdict = parse_dico(eoldict)
57     dico['adresse_ip_eth0']
58     KeyError: 'adresse_ip_eth0'
59
60 **Tiramisu**
61
62 **Organisation par arborescence.**
63
64 Un espace de nommage doit systématiquement être défini, la variable n'est
65 accessible **que** par un path.
66
67
68 Variables présentes deux fois
69 -------------------------------
70
71 - Créole : pas de validation possible
72 - tiramisu : comportement règlable (on autorise l'unicité ou pas)
73
74 - dans Créole les valeurs sont **fausses** (c'est la dernière variable qui qui gagne)
75
76 Il faut faire confiance au XML 
77
78 ::
79
80     <family name="general">
81     <variable name="adresse_ip_eth0">
82     <valeur>toto
83
84
85     <family name="services">
86     <variable name="adresse_ip_eth0">
87     <valeur>tutu
88     
89
90 dans `gen_config` la valeur retenue est::
91
92     general/adresse_ip_eth0 -> tutu 
93     services/adresse_ip_eth0 -> tutu 
94
95 dans `parsedico`, la variable est écrasée::
96
97     >>> from creole.parsedico import parse_dico
98     >>> d = parse_dico()
99     >>> d['adresse_ip_eth0']
100     tutu
101     
102 dans tiramisu::
103
104     >>> config.general.adresse_ip_eth0
105     toto
106     >>> config.services.adresse_ip_eth0
107     tutu
108     
109