CreoleSyntaxeXML

Un article de EoleWiki.

| CrEole2 | CreoleSyntaxeXML | Creole2Template |

Sommaire

exemple de format de fichier xml

   <?xml version="1.0" encoding="utf-8"?>
   <creole>
       <files>
           <file name='/etc/ifcfg-eth0' mode='600'/>
           <file name='/etc/network'/>
           <file name='/etc/hosts'/>
           <file name='/etc/host.conf'/>
           <file name='/etc/resolv.conf'/>
           <file name='/etc/hosts.allow'/>
           <file name='/etc/sysctl.conf'/>
           <file name='/etc/crontab'/>
           <file name='/etc/slapd.conf' filelist='ldap'/>
           <file name='/etc/ldap.conf' filelist='ldap'/>
           <file name='/etc/rc.local'/>
           <file name='/etc/ntp.conf'/>
           <file name='/etc/sudoers' mode='0600'/>
       </files>
       <variables>
           <family name='general'>
               <variable name='adresse_ip_eth0' type='ip' description='Adresse ip de la carte eth0' multi='True' />
               <variable name='adresse_netmask_eth0' type='netmask' description='Masque de sous reseau de la carte eth0' >
                   <value>255.255.255.0</value>
               </variable>
               <variable name='adresse_network_eth0' type='ip' description='Adresse reseau de la carte eth0' />
               <variable name='adresse_ip_dns' type='ip' description='Adresse ip du dns primaire' multi='True' />
               <variable name='adresse_ip_gw' type='ip' description='Adresse ip de la passerelle par defaut' />
               <variable name='interface_gw' type='string' description='Interface de la passerelle par defaut' >
                   <value>eth0</value>
               </variable>
               <variable name='nom_machine' type='string' description='Nom de la machine' >
                   <value>zephir</value>
               </variable>
               <variable name='nom_domaine_local' type='string' description='Nom de domaine privé du reseau local' >
                   <value>monreseau.lan</value>
               </variable>
               <variable name='nom_domaine_academique' type='string' description='Nom de domaine académique' />
           </family>
           <family name='authentification'>
               <variable name='serveur_ldap' type='string' description='Adresse du serveur LDAP' >
                   <value>127.0.0.1</value>
               </variable>
               <variable name='admin_zephir' type='string' description="Administrateur de l'application" >
                   <value>admin_zephir</value>
               </variable>
               <variable name='base_ldap' type='string' description='chemin de base LDAP' >
                   <value>o=gouv,c=fr</value>
               </variable>
           </family>
           <family name="alertes">
               <variable name='serveur_smtp' type='string' description="serveur smtp" />
               <variable name='port_smtp' type='number' description='port du serveur smtp' >
                   <value>25</value>
               </variable>
               <variable name='compte_smtp' type='string' description="nom d'expediteur" >
                   <value>zephir</value>
               </variable>
           </family>
       </variables>
       <constraints>
               <fill name='calc_network' target='adresse_network_eth0'>
                   <param type='eole' name='ip'>adresse_ip_eth0</param>
                   <param type='eole' name='netmask'>adresse_netmask_eth0</param>
               </fill>
               <check name='obligatoire' target='adresse_ip_eth0'/>
               <check name='obligatoire' target='adresse_netmask_eth0'/>
               <check name='obligatoire' target='adresse_network_eth0'/>
               <check name='obligatoire' target='adresse_ip_dns'/>
               <check name='obligatoire' target='adresse_ip_gw'/>
               <check name='obligatoire' target='interface_gw'/>
               <check name='obligatoire' target='nom_machine'/>
               <check name='obligatoire' target='nom_domaine_local'/>
               <check name='obligatoire' target='serveur_ldap'/>
               <check name='obligatoire' target='admin_zephir'/>
               <check name='obligatoire' target='base_ldap'/>
               <check name='valid_entier' target='port_smtp'>
                   <param name='mini'>0</param>
                   <param name='maxi'>65535</param>
               </check>
               <condition name='hidden_if_not_in' source='serveur_ldap'>
                   <target>base_ldap</target>
                   <target type='file'>tmp/crontab</target>
                   <target type='file'>tmp/sudoers</target>
                   <param>127.0.0.1</param>
                   <param>localhost</param>
               </condition>
               <condition name='hidden_if_not_in' source='serveur_smtp'>
                   <target type='family'>authentification</target>
                   <param></param>
               </condition>
               <group master='adresse_ip_eth0'>
                   <slave>adresse_netmask_eth0</slave>
                   <slave>adresse_network_eth0</slave>
               </group>
           </constraints>
       <help>
               <variable_help name='ip_eth0'>adresse ip de la carte correspondant à la sortie sur internet</variable_help>
               <variable_help name='adresse_ip_eth0'>Adresse ip de la carte eth0 (vers Internet)</variable_help>
               <variable_help name='adresse_netmask_eth0'>Adresse du masque de sous reseau de la carte eth0</variable_help>
               <variable_help name='adresse_network_eth0'>Adresse reseau de la carte eth0 (ex: 10.21.5.0)</variable_help>
               <variable_help name='adresse_ip_dns'>Adresse ip du dns primaire</variable_help>
               <variable_help name='adresse_ip_gw'>Adresse ip de la passerelle par defaut (du routeur par exemple)</variable_help>
               <variable_help name='interface_gw'>Interface de la passerelle par defaut (ex: eth0)</variable_help>
               <variable_help name='nom_machine'>Nom de la machine (ex: zephir)'</variable_help>
               <variable_help name='nom_domaine_local'>Nom de domaine prive du reseau local</variable_help>
               <variable_help name='nom_domaine_academique'>Nom de domaine académique (ex : ac-dijon.fr)</variable_help>
               <variable_help name='serveur_ldap'>Adresse ip ou nom du serveur LDAP pour authentification</variable_help>
               <variable_help name='admin_zephir'>Administrateur principal de l'application (login LDAP)</variable_help>
               <variable_help name='base_ldap'>chemin de base pour la recherche des utilisateurs dans ldap</variable_help>
               <variable_help name='serveur_smtp'>serveur smtp pour l'envoi des mails d'alerte</variable_help>
               <variable_help name='port_smtp'>port utilisé par le serveur smtp. (si différent de 25)</variable_help>
               <variable_help name='compte_smtp'>nom d'expéditeur pour l'envoi des mails</variable_help>
               <family_help name='général'>paramètres systèmes de base</family_help>
               <family_help name='authentification'>paramètre de gestion de l'authentification</family_help>
               <family_help name="alertes">paramètres de configuration des alertes mail</family_help>
           </help>
   </creole>

En-tête

   <?xml version="1.0" encoding="utf-8"?>

Est nécessaire pour que le fichier soit reconnu comme étant au format XML.

Afin d'éviter les problème d'encondage, il est conseillé de créer le fichier sur un module NG (vi, nano, mc).

fichiers

   <files>
       <file name='/etc/ifcfg-eth0' mode='600'/>
       <file name='/etc/hosts'/>
       <file name='/usr/share/hosts' source='hosts_bis'/>
       <file name='/etc/host.conf'/>
       <file name='/etc/resolv.conf'/>
       <file name='/etc/hosts.allow'/>
       <file name='/etc/sympa/auth.conf' owner='sympa' group='sympa' />
       <file name='/etc/nouveau_repertoire/fichier mkdir='true' />
   </files>
  • le parametre name (obligatoire) contient l'emplacement où sera copié le fichier
  • le paramètre mode permet de spécifier des droits à appliquer au fichier de destination
  • le paramètre owner permet de forcer le propriétaire du fichier
  • le paramètre group permet de forcer le groupe propriétaire du fichier
  • le parametre source permet d'indiquer le nom du fichier source différent de celui de destination
  • si le paramètre mkdir vaut true, le répertoire destination sera créé si il n'existe pas (eoleng >= 2.1)

en effet, dans le cas des fichiers /etc/hosts et /usr/share/hosts, le parser cherchera le fichier s'appelant hosts. Or on veut avoir 2 fichiers source differents. En utilisant le parametre source, le parser ira chercher le fichier hosts_bis dans le cas du fichier à copier dans /usr/share/hosts

familles

   <family name='net'>
       <variable name='ip_eth0' type='ip' description='ip de la carte reseau exterieure />
           < value>192.168.230.70</value>
       </variable>
       <variable name='netmask_eth0' type='netmask' description='netmask de la carte reseau exterieure' >
           <value>255.255.255.0</value>
       </variable>
   </family>

family

  un conteneur de variables.
  permet d'avoir des catégories de variables (par exemple une famile Squid pour gérer toutes les variables relatives a Squid).
  • le paramètre name (obligatoire) est à la fois le nom et l'identifiant de la famille
  • le paramètre mode permet de définir des paramètres avancés (mode='expert')
  • le paramètre hidden indique si la famille doit être affichée ou non, sa valeur pouvant être modifiée via une condition (voir plus bas).

variables

   <variable name='variable1' type='ip' description='variable simple' />
   <variable name='variable2' type='netmask' description='variable simple avec valeur par défaut' >
       <value>255.255.255.0</value>
   </variable>
   <variable name='multi1' type='string' description='variable multiple simple' multi='True' />
   <variable name='multi2' type='ip' description='variable multiple avec plusieurs valeurs par défaut' multi='True' >
       <value>194.199.47.19</value>
       <value>194.199.47.28</value>
   </variable> 


variable

   contient une description et optionnellement une(des) valeur(s) eole par défaut.


  • 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 pluseiurs 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)

contraintes

   <constraints>
       <fill name='calc_network' target='network_eth0'>
           <param type='eole' name='ip'>ip_eth0</param>
           <param type='eole' name='mask'>netmask_eth0</param>
       </fill>
       <check name='valid_entier' target='port_rpc'>
           <param name='min'>0</param>
           <param name='max'>65535</param>
       </check>
       <check name="valid_enum" target="activer_programme">
                 <param>['oui','non']</param>
       </check>
       <condition name='hidden_if_not_in' source='port_rpc'>
           <param>0</param>
           <param>7080</param>
           <target>ip_eth0</target>
           <target type='family'>net</target>
           <target type='file'>squid.conf</target>
           <target type='filelist'>ldap</target>
       </condition>
       <group master='adresse_ip_eth0'>
           <slave>adresse_netmask_eth0</slave>
           <slave>adresse_network_eth0</slave>
       </group>
   </constraints>


fill

   renseigne automatiquement (par le calcul) une valeur par défaut à une variable.
   (Ici on calcule network_eth0 a partir de ip_eth0 et de netmask_eth0 en utilisant la fonction calc_network. 
   Les fonctions utilisees doivent etres definies dans le fichier eosfunc.py)

check

   responsable de la validation de la valeur renseignée.
   (Ici on verifie que la variable port_rpc est comprise entre 0 et 65535 grace a la fonction valid_entier definie dans eosfunc.py )
   
   La fonction valid_enum est utilisée pour proposer plusieurs valeurs sous forme de liste déroulante.
   L'ajout de <param name="checkval">False</param> indique que l'on peut choisir une valeur différente de celles proposées par valid_enum

condition

   gestion des liens entre variables.
   Le resultat de la fonction determine "l'activation" ou la "désactivation" d'éléments du dictionnaire.
   Ceux ci peuvent être du type : 
   - fichier (file)
   - groupe de fichiers (filelist)
   - famille de variables (family)
   - variable unique (par défaut)
   Par exemple, ici, si port_rpc n'a pas la valeur 0 ou 7080:
   - la variable ip_eth0 sera "désactivée", elle ne sera pas utilisée lors de l'instanciation
   - la famille net sera "désactivée", toutes ses variables seront désactivées
   - le fichier squid.conf sera "désactivé", il ne sera pas instancié
   - les fichiers /etc/openldap/ldap.conf et /etc/openldap/slapd.conf ne seront pas instanciés (groupe ldap)
 

group

   implique une relation entre des variables (un master et ses slaves)
   si le master a une valeur, chacun de ses slaves doit en avoir une aussi
   si le master est multi-valué (plusieurs valeurs, comme pour un DNS, parametre multi dans la déclaration de variable), 
   les slaves aussi deviennent multi-valués (et doivent avoir autant de valeur que leur master)
 

auto

   renseigne automatiquement (par le calcul) la valeur d'une variable. 
   Cette valeur ne peut pas être modifiée par l'utilisateur (exemples d'utilisation : adresse IP en mode dhcp, nom du module...)


description des fonctions

Les balises fill, check, condition permettent d'appeler une ou des fonction(s) de la librairie eosfunc.py. Elles sont construites de manière suivante

   <fill name='calc_network' target='network_eth0'>
       <param type='eole' name='ip'>ip_eth0</param>
       <param type='eole' name='mask'>netmask_eth0</param>
   </fill>
  • target:
   nom de la variable concernée
  • name:
   nom de la fonction appelée (eosfunc.calc_network dans l'exemple)
  • param:
  s'il y a un attribut name, c'est un paramètre de dictionnaire (keywordargs)
  s'il n'y a pas d'attribut name, c'est un paramètre simple (args)

Aide

   <help>
       <variable_help name='ip_eth0'> adresse ip de la carte correspondant à la sortie sur internet</variable_help>
       <variable_help name='adresse_ip_eth0'>Adresse ip de la carte eth0 (vers Internet)</variable_help>
       <variable_help name='compte_smtp'>nom d'expéditeur pour l'envoi des mails</variable_help>
       <family_help name='général'>paramètres systèmes de base</family_help>
       <family_help name='authentification'>paramètre de gestion de l'authentification</family_help>
       <family_help name="alertes">paramètres de configuration des alertes mail</family_help>
   </help>
  • variable_help
   aide pour une variable, le parametre name indique le nom de la variable associée,
   le texte entre les   balises ouvrantes et fermantes est le texte d'aide lui meme
  • family_help
   aide pour une famille, le parametre name indique le nom de la famille associée,
   le texte entre les balises ouvrantes et fermantes est le texte d'aide lui meme


Cette aide est affichée quand on laisse la souris sur une variable ou sur une famille dans l'interface de saisie des données