Expressions
L’une des caractéristiques les plus puissantes d’un StyleBook est l’utilisation d’expressions. Vous pouvez utiliser des expressions StyleBooks dans différents 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 littérale.
Exemple:
$parameters.appname + "-mon"
Cette expression récupère le paramètre nomméappname
et le concatène avec la chaîne-mon
.
Les types d’expressions suivants sont pris en charge :
Expressions arithmétiques
- Addition (+)
- Soustraction (-)
- Multiplication (*)
- Division (/)
- Modulo (%)
Exemples:
- Ajout de deux nombres : $parameters.a + $parameters.b
- Multiplication de deux nombres : $parameters.a * 10
- Trouver le reste après division d’un nombre par un autre :
15%10
Résultats en5
Expressions de chaîne
- Concaténer deux chaînes (+)
Exemple:
Concaténer deux chaînes : str (« app- ») + $parameters.appname
Liste des expressions
Fusionne deux listes (+)
Exemple:
Concatener两个列表:parameters.external-serv美元ers + $parameters.internal-servers
Si
$parameters.ports-1
est [80, 81] et$parameters.port-2
est [81, 82], le$parameters.ports-1 + $parameters.ports-2
s’affiche sous forme de liste [80, 81, 81, 82].
Expressions relationnelles
==: Teste si deux opérandes sont égaux et renvoie true s’ils sont égaux, sinon renvoie false.
!= : Teste si deux opérandes sont différents et renvoie true s’ils sont différents, sinon renvoie false.
**: Retourne true si le premier opérande est supérieur au second opérande, sinon renvoie false.
>=: Retourne true si le premier opérande est supérieur ou égal au second opérande, else renvoie false.
<: Renvoie true si le premier opérande est inférieur au second opérande, sinon renvoie false.
<=: Retourne true si le premier opérande est inférieur ou égal au second opérande, else renvoie false.
Exemple:
- Utilisation de l’opérateur Equality :
$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éenne
et: L’opérateur logique ‘et’. Si les deux opérandes sont vraies, le résultat est vrai, sinon il est faux.
ou: 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 le sens inverse.
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 type-cast expressions où les chaînes sont converties en nombres (en utilisant la fonction intégrée int ()) et les nombres sont convertis en chaînes (en utilisant la fonction intégrée str ()). De même, vous pouvez
tcp-port
convertir en un nombre (en utilisant la fonction intégrée int ()), et une adresse IP peut être convertie en une chaîne (en utilisant la fonction intégrée str ()).Utilisez un délimiteur avant et après tout opérateur. Vous pouvez utiliser les délimiteurs suivants :
Devant un opérateur :
space
,tab
,comma
,(
,)
,[
,]
Après un opérateur :
space
,tab
,(
,[
Par exemple :
abc + def
100 % 10
10 > 9
$item in $parameters.some-list
Expressions de chaîne verbatim
Vous pouvez utiliser des chaînes textuelles lorsque les 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 blancs, des crochets, etc. Dans les chaînes textuelles, 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 StyleBooks, vous pouvez inclure des expressions de stratégie Citrix ADC dans leur forme littérale à l’aide de chaînes textuelles. Les expressions de stratégie contiennent généralement des caractères spéciaux. Sans chaînes textuelles, vous devez échapper à des caractères spéciaux en divisant les chaînes en sous-chaînes.
Pour créer une chaîne textuelle, encapsulez une chaîne entre des caractères spéciaux comme suit :
~{string}~
Vous pouvez utiliser des chaînes textuelles dans les expressions 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 textuelle.
Exemple :
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
Concaténer plusieurs chaînes textuelles
Vous pouvez concaténer des chaînes textuelles avec les chaînes régulières ou des chaînes avec interpolations. Lorsque vous le faites, le StyleBook ignore l’interprétation uniquement pour les chaînes textuelles. Utilisez l’opérateur plus (+) entre les chaînes à concaténer.
Exemple :
value:"~{”id":"}~+%{$atom.key}%+~{”,"value":"}~+%{$atom.value}%+~{”}~"
Dans cet exemple,%{$atom.key}%
et%{$atom.value}%
sont interprétés. Et, l’interprétation est ignorée pour le reste.
Expressions cibles
Dans une définition StyleBook, vous pouvez utiliser l’$current-target
expression pour faire référence à l’instance ADC cible actuelle. Pour référer spécifiquement une adresse IP de l’instance ADC cible, utilisez cette expression comme suit :
$current-target.ip
Exemple :
components:-name:lb-comptype:ns::lbvserverproperties:name:$current-target.ip + "-lbvserver"
Dans cet exemple, le nom de l’lbvserver
utilise l’adresse IP de l’instance ADC cible.
Validation du type d’expression
Le moteur StyleBook permet désormais une vérification de type plus forte pendant la compilation, c’est-à-dire que les expressions utilisées lors de l’écriture du StyleBook sont validées lors de l’importation d’un 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 (élément répété, index répété, arguments aux fonctions de substitution) et ainsi de suite sont toutes validées pour leur existence et leur type.
Exemple de vérifications de type:
Dans l’exemple suivant, le type attendu de propriété port delbvserver
StyleBook esttcp-port
. Dans Citrix Application Delivery Management (ADM), les validations de type se produisent au moment de la compilation (au moment de l’importation). Le compilateur trouve cette chaîne et netcp-port
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
Pour compiler ce StyleBook avec succès, déclarez ce qui suit en tant que nombre dans le compilateur :
port: 80
Exemple de marquage d’expressions non valides:
Dans les versions antérieures, lorsqu’une expression non valide était affectée à un nom de propriété, le compilateur ne détectait pas les expressions non valides et autorisait l’importation des StyleBooks dans Citrix ADM. Maintenant, si ce StyleBook est importé dans Citrix ADM, le compilateur identifie ces expressions non valides et l’indique. Par conséquent, le StyleBook ne parvient pas à importer vers Citrix ADM.
Dans cet exemple, l’expression affectée à la propriété name dans lelb-sg-binding-comp
composant est :$components.lbvserver-comp.properties.lbvservername
. Cependant, il n’y a aucune propriété appeléelbvservername
dans le composantlbvserver-comp
. Dans les versions antérieures de Citrix ADM, le compilateur aurait autorisé cette expression et l’aurait importée avec succès. L’échec réel se produirait lorsqu’un utilisateur souhaite créer un pack de configuration à l’aide de ce StyleBook. Cependant, ce type d’erreur est détecté lors de l’importation et le StyleBook n’est pas importé dans Citrix ADM. 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
Listes d’indexation
Les éléments d’une liste sont maintenant accessibles en les indexant directement :
Expression | Description |
$components.test-lbs[0] |
Fait référence au premier élément duthetest-lbs composant |
$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 àservicegroupname la propriété du deuxième élément duservicegroups composant, qui est une sortie du premier élément dulbcomps composant |