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 a 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 basique 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 :

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 d'utiliser 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 l'interface de configuration du module ;
  • 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 mode permet de définir le mode d'affichage de la variable (basic, normal ou expert) ;
  • si l'attribut hidden vaut True, la variable ne sera pas affichée dans l'interface de configuration (on peut par exemple souhaiter masquer des variables dont la valeur est calculée automatiquement) ;
  • si l'attribut disabled vaut True, la variable sera déclarée comme désactivée.
  • 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 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.
  • 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 remove_condition vaut True pour une variable redéfinie, alors toutes les conditions 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.

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 ;
  • 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:// ou https:// ;

  • 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 ;
  • 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" ;

  • password : la valeur de la variable est masquée dans l’interface une fois le champ validé. Elle est affichée en clair lorsque le champ est édité. Aucune contrainte n’est associée à ce type de variable.

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'>

    <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>