Déclarations du langage Creole
Creole fournit un langage de template complet.
Il est possible de créer des boucles, des tests, de gérer les lignes optionnelles, de réaliser des inclusions répétées, ...
La déclaration de test : if
Syntaxe :
%if EXPRESSION |code_if %else |code_else %end if
Dans les tests il est possible d'utiliser les opérateurs du langage python :
==
, !=
, >
, <
, >=
,
<=
, not
, and
, or
, ...
Exemple
%if %%size > 500
c'est grand
%elif %%size >= 250
c'est moyen
%else
c'est petit
%end if
Exemple
%if %%toto == 'yes' and ( %%titi != "" or %%tata not in ['a','b','c'] ) :
la condition a été validée
%end if
La déclaration d'itération : for
Syntaxe :
%for %%iterateur in EXPRESSION
CODE avec %%iterateur
%end for
La boucle %%for
est particulièrement intéressante lorsque l'on souhaite effectuer des traitements sur une variable multi-valuée.
Exemple
%for %%i in range(4)
itération %%i
%end for
%for %%valeur in %%variable_multivaluee
%%valeur
%end for
Truc & astuce
Pour des traitements simples, la fonction prédéfinie %%custom_join
(voir section suivante) peut avantageusement éviter la mise en place d'une boucle %for
.
La notation pointée
Si une variable Creole est multivaluée et maître
(master d'un groupe de variable) alors, il est possible de faire appel à ses variables esclaves à l'intérieur de la boucle %for
.
Si
netmask_admin_eth0
est esclave de ip_admin_eth0
alors, il est possible d'appeler cette variable en notation pointée.
Par exemple : dans le dictionnaire Creole figurent les variables suivantes.
ip_admin_eth0
est la variable maître et :
-
ip_admin_eth0 = ['1.1.1.1', '2.2.2.2']
-
netmask_admin_eth0 = ['255.255.255.255, '255.255.255.255']
Le template suivant :
%for %%ip_admin in %%ip_admin_eth0
%%ip_admin/%%ip_admin.netmask_admin_eth0
%end for
donnera comme résultat :
1.1.1.1/255.255.255.255
2.2.2.2/255.255.255.255
Il est également possible aussi d'accéder à l'index (la position dans la liste) de la variable en cours de boucle :
%for %%idx, %%val in %%enumerate(%%ip_admin_eth0)
L'index de %%val est : %%idx
%end for
Le template généré sera le suivant :
l'index de : 1.1.1.1 est : 0
l'index de : 2.2.2.2 est : 1
Il est également possible (mais déconseillé) d'utiliser une "notation par item" (notation entre crochets).
Par exemple pour accéder à l'item numéro 5 d'une variable, il faut écrire :
variable[5]
La variable doit être évidemment être multivaluée et comporter au minimum (item+1) valeurs.
ip_admin_eth0
= ['1.1.1.1', '2.2.2.2', '3.3.3.3']
et si un template a la forme suivante :
bla bla
%%ip_admin_eth0[2]
bla bla
alors l'instanciation du template donnera comme résultat :
bla bla
3.3.3.3
bla bla
Attention.value et .index
Les attributs .value et .index ne sont plus supportés et ne doivent plus être utilisés dans les templates.
Les déclarations spéciales echo et set
L'instruction %echo
permet de déclarer une chaîne de caractères afin que celle-ci apparaisse telle quelle dans le fichier cible.
Cela est utile lorsqu'il y a des caractères spéciaux dans le template source et, en particulier, les caractères %
et \
qui sont susceptibles d'être interprétés par le système de template.
Exemple
%echo "- deux barres obliques : \\\\\n- un pourcentage : %"
L'utilisation de l'instruction %echo
ne rend pas les templates très lisibles d'autant plus que, généralement, on souhaite intercaler des variables au milieu des caractères spéciaux.
En pratique, il est donc préférable de passer par des variables locales que l'on peut déclarer avec %set
.
Exemple
%set %%slash='\\'
%set %%double_slash='\\\\'
%%double_slash%%machine%%{slash}partage
Autres déclarations
La déclaration while
Syntaxe : %while EXPR contenu
%end while
Exemple :
%while %someCondition('arg1', %%arg2)
The condition is true.
%end while
La déclaration repeat
Syntaxe : %repeat EXPR
%end repeat
La déclaration unless
%unless EXPR
%end unless
peut être utile si une variable est dans le dictionnaire Creole pour '''ne pas''' executer une action :
%unless %%alive
do this
%end unless
La syntaxe d'inclusion
il est possible d'inclure des fichiers à l'aide de la déclaration suivante :
%include "includeFileName.txt"
ou bien à partir du nom long du fichier à inclure (le nom de fichier étant ici renseigné dans une variable Creole :
%include source=%%myParseText
Effacement des retours chariots : slurp
Exemple d'utilisation :
%for %%i in range(15)
%%i-%slurp
%end for
donnera :
1-2-3-4-5-6...
sur une seule ligne (gobe les retours chariots)
remarquons que dans ce cas là, slurp
n'est pas nécessaire et il est possible d'écrire le end sans sauter de ligne :
%for %%i in range(15)
%%i-%end for
exemple 2 :
%if %%dns_nameservers != ['']
dns_nameservers %slurp
%for %%name_server in %%dns_nameservers %%name_server %slurp
%end for
%end if
#
générera :
dns_nameserver toto titi #