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

  • Ajout (+)
  • Substraction (-)
  • Multiplication (*)
  • Division (/)
  • Module (%)

Exemples :

  • Ajouter deux nombres : $parameters.a + $parameters.b
  • Multiplier 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î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 est [81, 82], alors $parameters.ports-1 + $parameters.ports-2 apparaissent 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.

  •  : 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 vrais, 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 contrôles 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.


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

Expressions