Interpolations sur place
Il est désormais possible de remplacer une ou plusieurs parties d'une chaîne à l'aide d'une ou plusieurs expressions StyleBook. Lorsque ces expressions de chaîne sont évaluées par le compilateur StyleBook, la partie de la chaîne qui utilise une expression StyleBook sera remplacée par la valeur de l'expression. Pour inclure des expressions StyleBook dans une chaîne, nous utilisons la notation suivante :
"...%{...}%..."
où les caractères encadrés entre " %{ " et "}%" forment une expression StyleBook. Ces expressions sont appelées "interpolations sur place".
Par exemple, la chaîne "lb-%{$parameters.appname}%-svc" est une expression de chaîne avec interpolation sur place d'une expression StyleBook. La valeur de l'expression de chaîne dépend de la valeur de l'expression d'interpolation. Considérons que $parameters.appname est affecté de la valeur "app1". Alors, l'expression de chaîne est évaluée à lb-app1-svc. Cela permet que les valeurs ne soient pas codées en dur dans les expressions de chaîne, mais plutôt évaluées en fonction des valeurs définies par l'utilisateur.
Un cas d'utilisation pratique des interpolations sur place est de paramétrer les expressions de stratégie dans les StyleBooks. Considérez un scénario où vous souhaitez écrire une expression de stratégie qui vérifie si l'URL HTTP contient un mot spécifique, par exemple, "jpeg".
Pour cela, vous écrivez une expression de stratégie comme suit : "HTTP.REQ.URL.CONTAINS(\\"jpeg\\")".
Maintenant, si vous souhaitez paramétrer l'objet dans l'URL HTTP, vous pouvez ajouter un paramètre de chaîne dans le StyleBook, par exemple, $parameters.url-object. L'expression de stratégie doit être écrite en fonction de ce paramètre. Pour ce faire, vous utilisez la concaténation de chaînes pour obtenir le résultat. L'expression ressemblerait à ceci :
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
Si $parameter.url-object est affecté de la valeur "csv", l'expression ci-dessus sera évaluée à "HTTP.REQ.URL.CONTAINS(\\"csv\\")". Cependant, cette expression n'est pas facile à lire. Pour rendre cette paramétrisation facile à lire et à comprendre, vous pouvez utiliser des interpolations sur place.
L'expression avec interpolation sur place est maintenant :
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
Dans l'expression ci-dessus, vous avez utilisé une expression d'interpolation qui ajoute les guillemets intérieurs autour de la valeur de $parameters.url-object. Le résultat de cette expression est le même que celui ci-dessus, mais il semble plus intuitif et plus proche du résultat réel.
Types autorisés dans les interpolations
Vous pouvez utiliser des expressions qui génèrent des valeurs des types suivants à l'intérieur des interpolations : booléen, nombre, port TCP, adresse IP et chaîne de caractères. La valeur générée est automatiquement transformée en chaîne de caractères lorsque les interpolations sont remplacées par le résultat.
Les expressions de chaîne peuvent avoir 0, 1 ou plusieurs interpolations. Dans une interpolation séquentielle, différentes parties de l'expression de chaîne peuvent être remplacées par différentes expressions StyleBook. Par exemple, la chaîne lb-%{$parameters.appname}%-%{$parameters.vip}% renvoie « lb-app1-1.1.1.1 », si $parameters.appname est « app1 » et $parameters.vip est « 1.1.1.1 ».
Les expressions de chaîne prennent également en charge les interpolations imbriquées. Autrement dit, une expression d'interpolation peut être imbriquée dans une autre expression d'interpolation afin que la valeur d'une expression puisse devenir une entrée pour la deuxième expression.
Par exemple, considérez la chaîne "%{lb-%{$parameters.port + 1}%}%"
La chaîne interne, "%{$parameters.port + 1}%" renvoie « lb-81 » si $parameters.port est 80. Ici, cette expression est imbriquée dans une autre expression d'interpolation.
Le tableau suivant décrit les différents types d'interpolations avec des exemples et les résultats correspondants. La valeur des paramètres utilisés dans les exemples est la suivante :
-
$parameters.appname: "lb1"
-
$parameters.vip: "1.1.1.1"
-
$parameters.n1: 1
-
$parameters.n2: 3
Interpolations simples
| Expression | Résultat |
|---|---|
| lb-%{$parameters.appname}%-def | lb-lb1-def |
Conversions de type automatiques
| Expression | Résultat |
|---|---|
| lb-%{1}% | lb-1 |
| lb-%{$parameters.vip}% | lb-1.1.1.1 |
| lb-%{true}% | lb-True |
Interpolations séquentielles
| Expression | Résultat |
|---|---|
| %{$parameters.appname}%-%{str($parameters.appname)}% | lb1-lb1 |
| lb-%{1}%-%{2}% | lb-1-2 |
Interpolations imbriquées
| Expression | Résultat |
|---|---|
| %{abc-%{$parameters.n1 + 1}%}% | abc-2 |
| str("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") | bc-1-3 |
Interpolations avec quotewrap
| Expression | Résultat |
|---|---|
str("%{quotewrap(abcd)}%")str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL") |
"abcd"<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL |
Caractères d'échappement dans les interpolations
Si les caractères « %{ » ou « }% » font partie de la chaîne, vous devez fournir «
\ » comme caractère d'échappement afin que le compilateur StyleBook ne les évalue pas comme des balises d'interpolation.
Exemple :
str("%{\%\{ + str($parameters.vip) + \}\%}%") renvoie "%{1.1.1.1}%" si $parameters.vip est 1.1.1.1
Le tableau suivant décrit quelques expressions supplémentaires et leurs résultats :
| Catégorie | Expression | Résultat |
|---|---|---|
| Échappement des interpolations | str("%{str($parameters.n1) + }\%}%") | 1}% |
| lb-%{str($parameters.n1) + }\%}% | lb-1}% | |
| "%{str($parameters.n1) + \"\}\%\"}%" | 1}% |