Utiliser des familles, variables et des séparateurs
Variables : <variables>
L'ensemble des familles et, ainsi, des variables sont définies dans un nœud <variables></variables>.
Familles : <family>
Un conteneur famille permet d'avoir des catégories de variables. Celle-ci correspond à un onglet dans l'interface. Les familles sont incluses obligatoirement dans une balise <variables>.
Exemple
Une famille Squid
pour gérer toutes les variables relatives à Squid.
Les attributs de la balise family sont les suivants :
l'attribut name (obligatoire) est à la fois le nom et l'identifiant de la famille ;
l'attribut mode permet de définir le mode d'affichage de la famille :
- mode basic par défaut ;
- mode normal ;
- mode expert.
l'attribut icon définit une image associée à l'onglet ;
l'attribut hidden indique si la famille doit être affichée ou non, sa valeur pouvant être modifiée via une condition (voir plus bas).
Truc & astuce
Une famille dont toutes les variables sont cachées (hidden) ou désactivées (disabled) ne sera pas affichée sauf en mode debug.
Complément
Les icônes utilisés proviennent des bibliothèques de polices et d'icônes libres :
- Font Awesome : http://fortawesome.github.io/Font-Awesome/icons ;
- Font Mfizz : http://fizzed.com/oss/font-mfizz.
Pour choisir une icône, il faut se rendre sur les pages ci-dessus et recopier le nom de l'icône. Pour la font Mfizz il faut enlever le préfixe icon-
.
Exemple
<family name='messagerie' mode='basic' icon='envelope'>
<variable name='system_mail_from' type='mail' description="Adresse électronique d'envoi pour le compte root"/>
</family>
Variable : <variable>
Une variable contient une description et, optionnellement, une valeur EOLE par défaut.
Les variables peuvent être à valeur unique ou multi-valuées.
Les balises <variable> sont incluses obligatoirement dans une balise <family>.
Les attributs de la balise variable sont les suivants :
- l'attribut name (obligatoire) est le nom de la variable ;
- l'attribut type (obligatoire) permet de construire un type EOLE avec des vérifications automatiques (fonctions de vérifications associées a chaque type de variable) ;
- l'attribut description permet de définir le libellé à afficher dans les interfaces de saisie ;
- l'attribut multi permet de spécifier qu'une variable pourra avoir plusieurs valeurs (par exemple pour un DNS, on aura plusieurs adresses IP de serveurs DNS) ;
- l'attribut hidden indique si la variable doit être affichée ou non (on peut par exemple souhaiter masquer des variables dont la valeur est calculée automatiquement) ;
- l'attribut mode permet de définir le mode de la variable (basic, normal ou expert) ;
- si l'attribut mandatory vaut True, la variable sera considérée comme obligatoire, cet attribut remplace l'ajout d'un check obligatoire au niveau des conditions ;
- si l'attribut redefine vaut True, cela permet de redéfinir une variable déjà définie dans un autre dictionnaire ;
- si l'attribut remove_check vaut True pour une variable redéfinie, alors toutes les validations (check) associées à cette variable sont réinitialisées ;
- si l'attribut auto_freeze vaut True, la variable devient à verrouillage automatique. Sa valeur est verrouillée dès le premier enregistrement de la configuration. Dans l'interface de configuration du module, ces variables sont identifiées par la présence d'un cadenas. Ce dernier apparaît verrouillé une fois le serveur instancié ;
- si l'attribut auto_save vaut True, la variable devient à enregistrement obligatoire. Sa valeur est obligatoirement enregistrée dans le fichier de configuration et elle n'est donc pas automatiquement modifiée si sa valeur par défaut change au niveau des dictionnaires. On retrouve ainsi un fonctionnement équivalent à celui disponible sur EOLE 2.3 ;
- si l'attribut exists vaut False, cela permet de définir une variable si et seulement si elle n'a pas déjà été définie dans un autre dictionnaire.
Les principaux types de variables Creole sont les suivants :
number : la valeur de la variable doit être du type "int". La fonction python
int(value)
ne doit pas retourner d'erreur ;string : la valeur de la variable doit être du type "unicode" ;
ip : valeur de type IP. La valeur doit passer ce test :
IPy.IP('{0}/32'.format(value))
;local_ip : la même chose que IP, sauf que les adresses réservées et privées soulèvent un warning (voir IPy pour des informations sur les adresses réservées et privées) ;
netmask : adresse de masque réseau. La valeur doit passer ce test :
IPy.IP('0.0.0.0/{0}'.format(value))
;network : adresse réseau. La valeur doit passer ce test :
IPy.IP(value)
;broadcast : adresse de broadcast. : La valeur doit passer ce test :
IPy.IP('{0}/32'.format(value))
;netbios : alphanumérique autorisé sauf pour le 1er caractère qui doit forcement être du type alpha, minimum 2 et maximum 15 caractères ;
domain :
- adresse IP. La valeur doit passer ce test :
IPy.IP('{0}/32'.format(value))
ou
- alphanumérique et '.' autorisé sauf pour le 1er caractère qui doit forcement être du type alpha. Le '.' est obligatoire. Minimum 2 et maximum 255 caractères ;
- adresse IP. La valeur doit passer ce test :
domain_strict : nom DNS uniquement (adresse IP interdite) ;
unix_user : nom d'utilisateur ou de groupe Unix ;
web_address : adresse Internet. Doit débuter par
http://
ouhttps://
;hostname :
- adresse IP. La valeur doit passer ce test :
IPy.IP('{0}/32'.format(value))
ou
- alphanumérique autorisé sauf pour le 1er caractère qui doit forcement être du type alpha.Minimum 2 et maximum 63 caractères ;
- adresse IP. La valeur doit passer ce test :
hostname_strict : nom d'hôte uniquement (adresse IP interdite) ;
mail : adresse e-mail ;
port : entier compris entre 1 et 65535 ;
filename : tout chemin Unix (fichier ou répertoire) ;
oui/non : seules valeurs possibles : "oui" et "non" ;
yes/no : seules valeurs possibles : "yes" et "no" ;
on/off : seules valeurs possibles : "on" et "off" ;
ComplémentComportement avec redefine='True' et remove_check='False'
- si la nouvelle variable fournit une valeur par défaut, elle remplace l'ancienne ;
- si la nouvelle variable fournit un ou plusieurs des attributs suivants : description, hidden, mandatory, auto_freeze, mode, les valeurs des nouveaux attributs remplacent les anciennes ;
- les attributs type et multi ne sont pas modifiables ;
- si un nouveau valid_enum est défini dans les fonctions checks, il remplace l'ancien ;
- si de nouveaux disabled_if(_not)_in sont définis, ils remplacent les anciens ;
- les autres conditions et contraintes sont ajoutées à celles qui étaient déjà définies.
Valeur : <value>
A l'intérieur d'une balise <variable>, il est possible de définir une balise <value> permettant de spécifier la valeur par défaut de la variable.
Séparateurs : <separators> et <separator>
Les séparateurs permettent de définir des barres de séparation au sein d'une famille de variable dans l'interface de configuration.
Les séparateurs définis dans un dictionnaire sont placés dans la balise <separators></separators> dans la balise <variables>.
A l'intérieur de la balise <separators> il faut spécifier autant de balises <separator> que de séparateurs souhaités.
Les attributs de la balise separator sont les suivants :
- l'attribut name (obligatoire) correspond au nom de la variable suivant le séparateur ;
- si l'attribut never_hidden vaut True, le séparateur sera affiché même si la variable associée est masquée.
Dans le cas où il n'y a aucune variable à afficher dans le bloc défini par le séparateur, celui-ci est forcément masqué.
Exemple
ExempleVariables, familles et séparateurs
<variables>
<family name='services' icon='cogs'>
<variable name='activer_esu' type='oui/non' description="Utiliser le logiciel ESU" hidden='True'>
<value>oui</value>
</variable>
</family>
<family name='esu'>
<variable name='esu_proxy' type='oui/non' description="Activer le proxy ESU">
<value>non</value>
</variable>
<variable name='esu_proxy_server' type='domain' description='Adresse du proxy ESU' mandatory='True'/>
<variable name='esu_proxy_port' type='port' description='Port du proxy ESU' mandatory='True'>
<value>3128</value>
</variable>
<variable name='esu_proxy_bypass' type='string' description='Ne pas utiliser le proxy ESU pour' multi='True'>
<value>127.0.0.1</value>
</variable>
</family>
<separators>
<separator name='esu_proxy'>Proxy ESU</separator>
</separators>
</variables>