Expressions
L’une des fonctionnalités les plus puissantes d’un StyleBook est l’utilisation d’expressions. Vous pouvez utiliser les expressions StyleBooks dans divers scénarios pour calculer des valeurs dynamiques. L’exemple suivant est une expression permettant de concaténer une valeur de paramètre avec une chaîne de caractères littérale.
Exemple :
$parameters.appname + "-mon"
<!--NeedCopy-->
Cette expression récupère le paramètre nommé appname et le concatène avec la chaîne de caractères -mon.
Les types d’expressions suivants sont pris en charge :
Expressions arithmétiques
- Addition (+)
- Soustraction (-)
- Multiplication (*)
- Division (/)
- Modulo (%)
Exemples :
- Addition de deux nombres : $parameters.a + $parameters.b
- Multiplication de deux nombres : $parameters.a * 10
- Recherche du reste après la division d’un nombre par un autre :
15%10 donne 5
Expressions de chaîne de caractères
- Concaténation de deux chaînes de caractères (+)
Exemple :
Concaténation de deux chaînes de caractères : str(“app-“) + $parameters.appname
Expressions de liste
Fusionne deux listes (+)
Exemple :
-
Concaténation de deux listes : $parameters.external-servers + $parameters.internal-servers
-
Si
$parameters.ports-1est [80, 81] et$parameters.port-2est [81, 82],$parameters.ports-1 + $parameters.ports-2s’affiche sous forme de liste [80, 81, 81, 82].
Expressions relationnelles
-
== : Teste si deux opérandes sont égaux et renvoie « vrai » s’ils le sont, sinon renvoie « faux ».
-
!= : Teste si deux opérandes sont différents et renvoie « vrai » s’ils le sont, sinon renvoie « faux ».
-
> : Renvoie « vrai » si le premier opérande est supérieur au second, sinon renvoie « faux ».
-
>= : Renvoie « vrai » si le premier opérande est supérieur ou égal au second, sinon renvoie « faux ».
-
< : Renvoie « vrai » si le premier opérande est inférieur au second, sinon renvoie « faux ».
-
<= : Renvoie « vrai » si le premier opérande est inférieur ou égal au second, sinon renvoie « faux ».
Exemple :
- Utilisation de l’opérateur d’égalité :
$parameters.name = = "abcd" - Utilisation de l’opérateur d’inégalité :
$parameters.name != "default" - Exemples pour d’autres opérateurs relationnels
- 10 > 9
- 10 >= 10
- 0 < 9
- 10 <= 9
- 10 == 10
- 10 != 1
Expressions logiques - booléennes
-
and : L’opérateur logique « et ». Si les deux opérandes sont vrais, le résultat est vrai, sinon il est faux.
-
or : L’opérateur logique « ou ». Si l’un des opérandes est vrai, le résultat est vrai, sinon il est faux.
-
not : L’opérateur unaire. Si l’opérande est vrai, le résultat est faux, et inversement.
-
in : Teste si le premier argument est une sous-chaîne du second argument.
-
in : Teste si un élément fait partie d’une liste.
Remarque
Vous pouvez convertir le type d’expressions où les chaînes de caractères sont converties en nombres et les nombres en chaînes de caractères. De même, vous pouvez convertir
tcp-porten nombre et une adresse IP en chaîne de caractères.Utilisez un délimiteur avant et après tout opérateur. Vous pouvez utiliser les délimiteurs suivants :
Avant un opérateur :
espace,tabulation,virgule,(,),[,]Après un opérateur :
espace,tabulation,(,[Par exemple :
abc + def
100 % 10
10 > 9
Expressions de chaîne de caractères littérales
Vous pouvez utiliser des chaînes de caractères littérales lorsque des caractères spéciaux d’une chaîne doivent prendre leur forme littérale. Ces chaînes peuvent contenir des caractères d’échappement, des barres obliques inverses, des guillemets, des parenthèses, des espaces, des crochets, etc. Dans les chaînes de caractères littérales, l’interprétation habituelle des caractères spéciaux est ignorée. Tous les caractères de la chaîne sont conservés dans leur forme littérale.
Dans les StyleBooks, vous pouvez inclure des expressions de stratégie NetScaler sous leur forme littérale à l’aide de chaînes de caractères littérales. Les expressions de stratégie contiennent généralement des caractères spéciaux. Sans chaînes de caractères littérales, vous devez échapper les caractères spéciaux en divisant les chaînes en sous-chaînes.
Pour créer une chaîne de caractères littérale, encapsulez une chaîne entre des caractères spéciaux comme suit :
~{string}~
<!--NeedCopy-->
Vous pouvez utiliser des chaînes de caractères littérales n’importe où dans le StyleBook.
Remarque
N’utilisez pas la séquence de caractères
}~dans une chaîne d’entrée, car cette séquence indique la fin d’une chaîne de caractères littérale.
Exemple :
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
<!--NeedCopy-->
Expressions cibles
Dans une définition StyleBook, vous pouvez utiliser l’expression $current-target pour faire référence à l’instance NetScaler cible actuelle. Pour faire spécifiquement référence à l’adresse IP de l’instance NetScaler cible, utilisez cette expression comme suit :
$current-target.ip
<!--NeedCopy-->
Exemple :
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $current-target.ip + "-lbvserver"
<!--NeedCopy-->
Dans cet exemple, le nom du lbvserver est construit avec l’adresse IP de l’instance NetScaler cible.
Validation du type d’expression
Le moteur StyleBook permet une vérification de type plus stricte au moment de la compilation, c’est-à-dire que les expressions utilisées lors de l’écriture du StyleBook sont validées lors de l’importation du StyleBook lui-même plutôt que lors de la création du pack de configuration.
Toutes les références aux paramètres, substitutions, composants, propriétés des composants, sorties des composants, variables définies par l’utilisateur (repeat-item, repeat-index, arguments aux fonctions de substitution), etc., sont toutes validées quant à leur existence et leurs types.
Exemple de vérifications de type :
Dans l’exemple suivant, le type attendu de la propriété de port du StyleBook lbvserver est tcp-port. Dans NetScaler Console, les validations de type ont lieu au moment de la compilation (au moment de l’importation). Le compilateur constate que la chaîne de caractères et tcp-port ne sont pas des types compatibles et, par conséquent, le compilateur StyleBook affiche une erreur et ne parvient pas à importer ou à migrer un StyleBook.
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: str("80")
servicetype: HTTP
<!--NeedCopy-->
Pour compiler ce StyleBook avec succès, déclarez ce qui suit comme un nombre dans le compilateur :
port: 80
Exemple de signalement d’expressions non valides :
Dans les versions précédentes, lorsqu’une expression non valide était attribuée à un nom de propriété, le compilateur ne détectait pas les expressions non valides et permettait l’importation des StyleBooks dans NetScaler Console. Désormais, si ce StyleBook est importé dans NetScaler Console, le compilateur identifie ces expressions non valides et les signale. Par conséquent, le StyleBook ne peut pas être importé dans NetScaler Console.
Dans cet exemple, l’expression attribuée à la propriété name dans le composant lb-sg-binding-comp est : $components.lbvserver-comp.properties.lbvservername. Cependant, il n’existe aucune propriété appelée lbvservername dans le composant lbvserver-comp. Dans les versions précédentes de NetScaler Console, le compilateur aurait autorisé cette expression et l’aurait importée avec succès. L’échec réel se produirait lorsqu’un utilisateur souhaiterait créer un pack de configuration à l’aide de ce StyleBook. Cependant, ce type d’erreur est désormais identifié lors de l’importation et le StyleBook n’est pas importé dans NetScaler Console. Corrigez manuellement ces erreurs et importez les StyleBooks.
Components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: 80
servicetype: HTTP
-
name: sg-comp
type: ns::servicegroup
properties:
servicegroupname: mysg
servicetype: HTTP
-
name: lb-sg-binding-comp
type: ns::lbvserver_servicegroup_binding
condition: $parameters.create-binding
properties:
name: $components.lbvserver-comp.properties.lbvservername
servicegroupname: $components.sg-comp.properties.servicegroupname
<!--NeedCopy-->
Indexation des listes
Les éléments d’une liste peuvent désormais être accessibles en les indexant directement :
| Expression | Description |
$components.test-lbs[0] |
Fait référence au premier élément du composant test-lbs |
$components.test-lbs[0].properties.p1 |
Fait référence à la propriété p1 du premier élément du composant test-lbs |
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname |
Fait référence à la propriété servicegroupname du deuxième élément du composant servicegroups, qui est une sortie du premier élément du composant lbcomps
|