Expressions

L’une des fonctionnalités les plus puissantes de StyleBook est l’utilisation d’expressions. Vous pouvez utiliser des expressions StyleBooks dans différents scénarios pour calculer des valeurs dynamiques. L’exemple ci-dessous montre une expression pour 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 (+)
  • Substraction (-)
  • 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 dans 5

Expressions de chaînes

  • Concaténer deux chaînes (+)

Exemple :

Concaténer deux chaînes : str (« app- ») + $parameters.appname

Liste des expressions

Fusionne deux listes (+)

Exemple :

  • Concaténer deux listes : $parameters.external-servers + $parameters.internal-servers

  • Si $parameters.ports-1 est[80, 81]et $parameters.port-2 l’est[81, 82], alors $parameters.ports-1 + $parameters.ports-2 se traduit par une liste[80, 81, 81, 82]

Expressions relationnelles

  • == : Teste si deux opérandes sont égaux et renvoie true s’ils sont égaux, else renvoie false.

  • ! = : Teste si deux opérandes sont différents et renvoie true s’ils sont différents, sinon renvoie false.

  •  : Renvoie true si le premier opérande est supérieur au second opérande, else renvoie false.

  • = : Renvoie 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, else renvoie false.

  • <= : Renvoie true si le premier opérande est inférieur ou égal au second opérande, else renvoie false.

Exemple :

  • Utilisation de l’opérateur Egalité : $parameters.name = = « abcd »
  • Utilisation de l’opérateur d’inégalité : $parameters.name ! = « par défaut »
  • Exemples pour d’autres opérateurs relationnels
    • 10 > 9
    • 10 >= 10
    • 0 < 9
    • 10 <= 9
    • 10 == 10
    • 10 != 1

Expressions logiques (booléennes)

  • 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 vice-versa.

  • 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 taper des expressions cast où les chaînes peuvent être converties en nombres et les nombres peuvent être convertis en chaînes. De même, un port tcp-peut être converti en un nombre, et une adresse IP peut être converti en une chaîne.

Vous devez utiliser 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, onglet, (, [

  • Par exemple :

  • abc + def

  • 100 % 10

  • 10 > 9

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 de 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 des fonctions de substitution, etc.) sont toutes validées pour leur existence et leurs types.

Exemple de vérifications de type :

Dans l’exemple suivant, le type attendu de propriété de port de lbvserver StyleBook est tcp-port. Dans les versions antérieures de Citrix Application Delivery Management (ADM), le compilateur StyleBook a calculé la valeur sous forme de chaîne et StyleBook a été importé et exécuté. Maintenant, les validations de type se produisent au moment de la compilation (import-time). Le compilateur trouve que string et tcp-port ne sont pas des types compatibles et, par conséquent, le compilateur StyleBook génère une erreur et échoue l’importation ou la migration du StyleBook.

composants :

nom : lbvserver-comp

type : ns::lbvserver

Propriétés :

  nom : mylb

  ipv46: 10.102.190.15

  port : str (« 80")

  type de service : HTTP

Vous devez maintenant déclarer ceci comme un nombre pour que le compilateur puisse compiler avec succès ce StyleBook.

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 identifiera ces expressions non valides et le signalera. Par conséquent, le StyleBook ne sera pas importé dans Citrix ADM.

Dans cet exemple, l’expression affectée à la propriété name dans le composant lb-sg-binding-comp est : $components.lbvserver-comp.properties.lbvservername. Cependant, il n’y a pas de propriété appelée lbvservername dans le composant lbvserver-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. Vous devez corriger manuellement ces erreurs et importer les StyleBooks.

composants :

nom : lbvserver-comp

type : ns::lbvserver

Propriétés :

  nom : mylb

  ipv46: 10.102.190.15

  port : 80

  type de service : HTTP

nom : sg-comp

type : ns : :servicegroup

Propriétés :

  nomgroupde service : mysg

  type de service : HTTP

nom : lb-sg-binding-comp

type : ns::lbvserver\_servicegroup\_binding

condition : $parameters.create-binding

Propriétés :

  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 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