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 #