Expressions

L’une des fonctionnalités 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é appnameet le concatène avec la chaîne -mon.

Les types d’expressions suivants sont pris en charge :

Expressions arithmétiques

  • Ajout (+)
  • 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 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

  • 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 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 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é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.

  • pas : L’opérateur unaire. Si l’opérande est vrai, le résultat est faux, et le contraire.

  • 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 dans lesquelles les chaînes sont converties en nombres et les nombres sont convertis en chaînes. De même, vous pouvez tcp-port convertir en nombre et une adresse IP peut être converti en chaîne.

Utilisez un délimiteur avant et après n’importe quel 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

Expressions de chaîne verbatim

Vous pouvez utiliser des chaînes verbatim 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, une barre oblique inverse, des guillemets, des parenthèses, des espaces, des crochets, etc. Dans les chaînes verbatim, l’interprétation habituelle des personnages 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 les 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 verbatim, vous devez échapper des caractères spéciaux en cassant 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 verbatim 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 verbatim.

Exemple :

 ~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~

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) et ainsi de suite 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é de port de lbvserver StyleBook est tcp-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 ne tcp-port sont pas des types compatibles. 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 avec succès ce StyleBook, déclarez ce qui suit sous la forme d’un 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 d’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, StyleBook ne parvient pas à importer dans Citrix ADM.

Dans cet exemple, l’expression affectée à la propriété name dans le lb-sg-binding-comp composant est : $components.lbvserver-comp.properties.lbvservername. Cependant, il n’y a 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. 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 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 à servicegroupname la propriété du deuxième élément du servicegroups composant, qui est une sortie du premier élément du lbcomps composant