Interpolations sur place
Il est maintenant possible de remplacer des parties d’une chaîne à l’aide d’une expression 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 est remplacée par une valeur de l’expression. Pour inclure des expressions StyleBook dans une chaîne, nous utilisons la notation suivante :
"...%{...}%..."
<!--NeedCopy-->
Où les caractères entre “ %{ “ and “}%” 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 une 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érez que $parameters.appname est affecté avec “app1.” L’expression de chaîne est ensuite évaluée à lb-app1-svc. Cela permet aux valeurs de ne pas être codées en dur dans des expressions de chaîne, mais d’être évaluées en fonction des valeurs définies par l’utilisateur.
Un cas d’utilisation pratique des interpolations sur place consiste à paramétrer les expressions de stratégie dans StyleBooks. Imaginons un scénario dans lequel 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 voulez paramétrer l’objet dans l’URL HTTP, vous pouvez ajouter un paramètre de chaîne dans le StyleBook, disons, $parameters.url-object
. L’expression de stratégie est é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 à :
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
<!--NeedCopy-->
Si $parameter.url-object
est attribué « csv », l’expression ci-dessus est évaluée à “HTTP.REQ.URL.CONTAINS(\“csv\”)”. Cependant, cette expression n’est pas facile à lire. Pour faciliter la lecture et la compréhension de ce paramétrage, vous pouvez utiliser des interpolations sur place.
L’expression avec interpolation sur place est maintenant :
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
<!--NeedCopy-->
Dans l’expression ci-dessus, vous avez utilisé une expression d’interpolation qui ajoute les guillemets internes autour de la valeur du $parameters.url-object. Le résultat de cette expression est le même que ce qui précède, mais, il semble plus intuitif et plus proche du résultat réel.
Types autorisés à l’intérieur des interpolations
Vous pouvez utiliser des expressions qui génèrent une valeur des types suivants dans les interpolations : booléenne tcp-port
, number ipaddress
, et string. La valeur générée est automatiquement transformée en chaîne lorsque les interpolations sont remplacées par le résultat.
Les expressions de chaîne peuvent comporter 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 dans la seconde expression.
Par exemple, considérez une chaîne “%{lb-%{$parameters.port + 1}%}%”
La chaîne interne, “%{$parameters.port + 1}%” returns “lb-81” si $parameters.portest égal à 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 des 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 automatiques de type
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 |
quotewrap
Interpolations avec 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 “%{“ or “}%” 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) + \}\%}%") returns "%{1.1.1.1}%" if $parameters.vip is 1.1.1.1
Le tableau suivant décrit quelques expressions supplémentaires et leurs résultats :
|Catégorie|Expression|Résultat|
|—|—|—|
|Échapper les interpolations|str("%{str($parameters.n1) + \}\%}%")
|1}%
|
| |lb-%{str($parameters.n1) + \}\%}%
|lb-1}%
|
| |"%{str($parameters.n1) + \\"\\}\\%\\"}%"|1}%
|