2021-02-06 17:36:43 +01:00
# Variable
## Un variable
2021-02-12 18:08:28 +01:00
Une variable est forcement dans [variables ](../variables.md ) ou dans une [famille ](../family/README.md ).
2021-02-06 17:36:43 +01:00
Une variable est déjà un nom. C'est à dire qu'on pourra utiliser plus tard la variable via ce nom.
```
2021-02-12 18:08:28 +01:00
< variables >
< variable name = "my_variable" / >
< family name = "my_family" >
< variable name = "my_family_variable" / >
< / variable >
< / variables >
2021-02-06 17:36:43 +01:00
```
## Description et aide sur la variable
En plus d'un nom, il est possible de mettre une "description" à la variable. C'est une information "utilisateur" qui nous permettra d'avoir des informations complémentaires sur le contenu de cette variable :
```
< variable name = "my_variable" description = "This is a greate variable" / >
```
En plus de la description, il est possible de préciser une aide complémentaire :
```
< variable name = "my_variable" help = "This is a greate variable" / >
```
## Le type de la variable
Une variable a un type. Ce type permet de définir les valeurs acceptées par cette variable :
- string : chaine de caractère (type par défaut)
- number : un nombre
- float : un chiffre flottant
2021-02-14 18:42:16 +01:00
- boolean : "True" ou "False", si aucune valeur n'est défini la valeur par défaut de cette variable sera "True"
2021-02-06 17:36:43 +01:00
- password : un mot de passe
- mail : une adresse mail
2021-02-14 18:42:16 +01:00
- filename : nom de fichier au sens Unix (exemple : "/etc/passwd")
2021-02-06 17:36:43 +01:00
- date : une date au format "%Y-%m-%d" (exemple : "2021-01-30")
- unix_user : nom d'utilisateur au sens Unix
- ip : n'importe quelle adresse IPv4
- cidr : n'importe quelle adresse IPv4 au format CIDR
- local_ip : adresse IPv4 sur un réseau local, si l'adresse IPv4 n'est pas local, un warning sera afficher mais la valeur sera accepté tout de même
- netmask : masque d'une adresse IPv4
- network : adresse réseau
- network_cidr : adresse réseau au format CIDR
- broadcast : adresse de diffusion
- netbios : nom netbios
- domain : nom de domaine
- hostname : nom d'hôte
- web_address : adresse web (http://www.cadoles.com/)
- port : port
- mac : adresse MAC
- schedule : périodicité du schedule, les valeurs possibles sont "none", "daily", "weekly" ou "monthly"
- schedulemod : type de schedule, les valeurs possibles sont "pre" ou "post"
Pour définir le type d'une variable :
```
< variable name = "my_variable" type = "number" / >
```
## Variable à valeur multiple
Par défaut une variable ne peut acceuillir qu'une seule valeur. Il peut être utile de pouvoir spécifier plusieurs valeurs à une même variable.
Pour définir une variable à valeur multiple :
```
< variable name = "my_variable" multi = "True" / >
```
## Mode de la variable
2021-02-06 17:42:54 +01:00
Le [mode ](../mode.md ) par défaut d'une variable correspond au [mode ](../mode.md ) de la [famille ](../family/README.md ).
2021-02-06 17:36:43 +01:00
2021-02-12 18:08:28 +01:00
Si la variable n'est pas dans une famille, la variable aura le mode "normal" par défaut.
2021-02-06 17:42:54 +01:00
Pour définir le [mode ](../mode.md ) :
2021-02-06 17:36:43 +01:00
```
< variable name = "my_variable" mode = "expert" / >
```
## Variable invisible
Il est possible de cacher une variable.
Cacher une variable signifie qu'elle ne sera pas visible lorsqu'on modifie la configuration du service.
2021-02-14 18:42:16 +01:00
Par contre cette variable sera accessibles lorsqu'on va l'utiliser.
2021-02-06 17:36:43 +01:00
Pour cacher une variable :
```
< variable name = "my_variable" hidden = "True" / >
```
## Variable désactive
Il est possible de désactiver une variable.
Désactiver une variable signifie qu'elle ne sera pas visible lorsqu'on modifie la configuration du service mais également lorsqu'on va l'utiliser.
Pour désactiver une variable :
```
< variable name = "my_variable" disabled = "True" / >
```
## Variable obligatoire
Variable dont une valeur est requise :
```
< variable name = "my_variable" mandatory = "True" / >
```
## Valeur par défaut d'une variable
Il est possible de fixer les valeurs par défaut d'une variable :
```
< variable name = "my_variable" >
< value > value< / value >
< / variable >
```
Pour une variable multiple, il est possible de préciser plusieurs valeurs :
```
< variable name = "my_variable" multi = "True" >
< value > value 1< / value >
< value > value 2< / value >
< / variable >
```
2021-02-06 18:55:41 +01:00
Si la variable n'est pas pas une [variable meneuse ](leadership.md ), la première valeur défini dans cette liste sera également la valeur par défaut proposé si on ajoute une nouvelle valeur à cette variable.
Une valeur par défaut peut également être [une valeur calculer ](../fill/README.md ).
2021-02-06 17:36:43 +01:00
## Redéfinir une variable
Il est possible de définir une variable dans un dictionnaire et de changer son comportement dans une second dictionnaire.
Attention trois attributs ne sont redéfinisable :
- name
- type
- multi
Créons notre variable :
< variable name = "my_variable" / >
Et redéfinisons là :
```
< variable name = "my_variable" redefine = "True" description = "New description" / >
```
## Créer une variable inexistante
Il est parfois utile de créer une variable si elle n'existe pas dans un autre dictionnaire :
```
< variable name = "my_variable" exists = "False" / >
```
Si cette variable existe dans un autre dictionnaire, elle ne sera pas modifié ni recréé
## Redéfinir une variable si elle existe
Parfois on veut pouvoir redéfinir une variable mais seulement dans le cas où elle existe déjà :
```
< variable name = "my_variable" redefine = "True" exists = "True" hidden = "True" / >
```
## Variable à valeur automatiquement modifiée
2021-02-15 15:17:23 +01:00
Une variable avec valeur automatiquement modifiée est une variable dont la valeur sera considéré comme modifié quand la propriété global "force_store_value" de Tiramisu est mise.
2021-02-06 17:36:43 +01:00
Voici une variable a valeur automatiquement modifiée :
```
< variable name = "my_variable" auto_save = "True" >
< value > my_value< / value >
< / variable >
```
Dans ce cas la valeur est fixée à la valeur actuelle.
Par exemple, si la valeur de cette variable est issue d'un calcul, la valeur ne sera plus recalculée.
Ces variables sont généralement des variables obligatoires. En effet ces variable ne sont automatiquement modifiées que si elles ont une valeurs.
2021-02-08 17:46:58 +01:00
Une [variable meneuse ou suiveuse ](leadership.md ) ne peut pas avoir la propriété auto_save.
2021-02-06 17:36:43 +01:00
## Variable à valeur en lecture seule automatique
2021-02-15 15:17:23 +01:00
Une variable avec valeur en lecture seule automatique est une variable dont la valeur ne sera plus modifiable par l'utilisateur quand la [variable "instanciated_module" passe à "True" ](../dev/config.md ).
2021-02-06 17:36:43 +01:00
Voici un variable à valeur en lecture seule automatique :
```
2021-02-15 15:17:23 +01:00
< variable name = "instanciated_module" type = "boolean" >
< value > False< / value >
< / variable >
2021-02-06 17:36:43 +01:00
< variable name = "my_variable" auto_freeze = "True" / >
```
Dans ce cas la valeur est fixée à la valeur actuelle et elle ne sera plus modifiable par l'utilisateur.
Par exemple, si la valeur de cette variable est issue d'un calcul, la valeur ne sera plus recalculée.
2021-02-15 15:17:23 +01:00
Ces variables sont généralement des variables obligatoires. En effet ces variable ne sont en lecteur seul que si elles ont une valeurs.
2021-02-08 17:46:58 +01:00
Une [variable meneuse ou suiveuse ](leadership.md ) ne peut pas avoir la propriété auto_freeze.
2021-02-14 18:42:16 +01:00
FIXME <!ATTLIST variable test CDATA #IMPLIED >