Application Delivery Management

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

  • Ajout (+)
  • 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 la division d’un nombre par un autre :

15% 10 résultats dans 5

Expressions de chaîne

  • Concaténer deux chaînes (+)

Exemple :

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

Expressions de liste

Fusionne deux listes (+)

Exemple :

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

  • If $parameters.ports-1 is [80, 81] and $parameters.port-2 is [81, 82], then $parameters.ports-1 + $parameters.ports-2 results as a list [80, 81, 81, 82]

Expressions relationnelles

  • == : Teste si deux opérandes sont égaux et renvoie true si elles sont égales, sinon retourne false.

  • ! = : Teste si deux opérandes sont différents et retourne true si elles sont différentes, sinon retourne false.

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

  • = : Renvoie true si le premier opérande est supérieur ou égal au deuxième opérande, sinon renvoie false.

  • < : Renvoie true si le premier opérande est inférieur au deuxième opérande, sinon renvoie false.

  • <= : Renvoie true si le premier opérande est inférieur ou égal au deuxième opérande, sinon renvoie false.

Exemple :

  • Utilisation de l’opérateur Equality : $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.

  • pas : 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 de conversion 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 n’importe quel 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 (repeat-item, repeat-index, arguments aux fonctions de substitution, etc.) sont toutes validées pour leur existence et leurs types.

Exemple de contrôles de type :

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


components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: str("80")
      servicetype: HTTP

You should now declare this as a number for the compiler to successfully compile this StyleBook.

  port: 80
<!--NeedCopy-->

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 d’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 l’indiquera. 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’existe aucune propriété appelée lbvservername dans le composant lbvserver-comp. Dans les versions précédentes 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. Toutefois, ce type d’erreur est identifié lors de l’importation et le StyleBook n’est pas importé dans Citrix ADM. Vous devez corriger manuellement ces erreurs et importer 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-->

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