In-Place-Interpolationen
Es ist jetzt möglich, Teile einer Zeichenfolge durch einen StyleBook-Ausdruck zu ersetzen. Wenn diese String-Ausdrücke vom StyleBook-Compiler ausgewertet werden, wird der Teil der Zeichenfolge, der einen StyleBook-Ausdruck verwendet, durch einen Wert des Ausdrucks ersetzt. Um StyleBook-Ausdrücke in eine Zeichenfolge aufzunehmen, verwenden wir die folgende Notation:
"...%{...}%..."
Wo die zwischen”% {“und “}%” eingeschlossenen Zeichen einen StyleBook-Ausdruck bilden. Diese Ausdrücke werden als In-Place-Interpolationen bezeichnet.
Zum Beispiellb-%{$parameters.appname}%-svc
ist der String ein String-Ausdruck mit einer In-Place-Interpolation eines StyleBook-Ausdrucks. Der Wert des String-Ausdrucks hängt vom Wert des Interpolationsausdrucks ab. Beachten Sie, dass$parameters.appnamemit “app1” zugewiesen ist. Dann wird der Zeichenfolgenausdruck zulb-app1-svcausgewertet. Dadurch können die Werte in Zeichenfolgenausdrücken nicht fest codiert werden, sondern anhand der benutzerdefinierten Werte ausgewertet werden.
Ein praktischer Anwendungsfall von In-Place-Interpolationen besteht darin, Richtlinienausdrücke in StyleBooks zu parametrieren. Betrachten Sie ein Szenario, in dem Sie einen Richtlinienausdruck schreiben möchten, der prüft, ob die HTTP-URL ein bestimmtes Wort enthält, beispielsweise “jpeg”.
Dazu schreiben Sie einen Richtlinienausdruck wie folgt: “HTTP.REQ.URL.CONTAINS(\“jpeg\”)”.
Wenn Sie nun das Objekt in der HTTP-URL parametrisieren möchten, können Sie im StyleBook beispielsweise einen String-Parameter hinzufügen$parameters.url-object
. Der Richtlinienausdruck wird basierend auf diesem Parameter geschrieben. Dazu verwenden Sie String-Verkettung, um das Ergebnis zu erzielen. Der Ausdruck würde wie folgt aussehen:
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
Wenn “csv” zugewiesen$parameter.url-object
wird, wird der obige Ausdruck zu “HTTP.REQ.URL.CONTAINS (\” csv\”)” ausgewertet. Dieser Ausdruck ist jedoch nicht leicht zu lesen. Um diese Parametrierung leicht zu lesen und zu verstehen, können Sie direkte Interpolationen verwenden.
Der Ausdruck mit direkter Interpolation lautet nun:
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
Im obigen Ausdruck haben Sie einen Interpolationsausdruck verwendet, der die inneren Anführungszeichen um den Wert des $parameters.url-Objekts hinzufügt. Das Ergebnis dieses Ausdrucks ist das gleiche wie oben, aber es sieht intuitiver aus und nähert sich dem tatsächlichen Ergebnis.
Zulässige Typen innerhalb von Interpolationen
Sie können Ausdrücke verwenden, die einen Wert der folgenden Typen in Interpolationen generieren: boolean, numbertcp-port
ipaddress
, und string. Der generierte Wert wird automatisch in eine Zeichenfolge umgewandelt, wenn die Interpolationen durch das Ergebnis ersetzt werden.
Zeichenfolgenausdrücke können 0, 1 oder mehr Interpolationen aufweisen. In einer sequenziellen Interpolation können verschiedene Teile des Zeichenfolgenausdrucks durch verschiedene StyleBook-Ausdrücke ersetzt werden. Die Zeichenfolge g lb-%{$parameters.appname}%-%{$parameters.vip}% gibt “lb-app1-1.1.1.1” zurück, wenn $parameters.appname “app1” und $parameters.vip “1.1.1.1” ist.
String-Ausdrucke unterstutzen欧什verschachtelteInterpolationen. Das heißt, ein Interpolationsausdruck kann in einem anderen Interpolationsausdruck verschachtelt werden, so dass der Wert eines Ausdrucks eine Eingabe für den zweiten Ausdruck werden kann.
Betrachten Sie beispielsweise die Zeichenfolge “%{lb-%{$parameters.port + 1}%}%”
Die interne Zeichenfolge “%{$parameters.port + 1}%” gibt “lb-81” zurück, wenn $parameters.port 80 ist. Hier ist dieser Ausdruck in einem anderen Interpolationsausdruck verschachtelt.
In der folgenden Tabelle werden die verschiedenen Interpolationstypen mit Beispielen und entsprechenden Ergebnissen beschrieben. Der Wert der in den Beispielen verwendeten Parameter ist:
- $parameters.appname: “lb1”
- $parameters.vip: “1.1.1.1”
- $parameters.n1: 1
- $parameters.n2: 3
Einfache Interpolationen
Ausdruck | Ergebnis |
---|---|
磅- % {$ parameters.appname} % def |
lb-lb1-def |
Automatische Typkonvertierungen
Ausdruck | Ergebnis |
---|---|
lb-%{1}% | lb-1 |
lb-%{$parameters.vip}% | lb-1.1.1.1 |
lb-%{true}% | lb-True |
Sequenzielle Interpolationen
Ausdruck | Ergebnis |
---|---|
%{$parameters.appname}%-%{str($parameters.appname)}% | lb1-lb1 |
lb-%{1}%-%{2}% | lb-1-2 |
Verschachtelte Interpolationen
Ausdruck | Ergebnis |
---|---|
%{abc-%{$parameters.n1 + 1}%}% |
abc-2 |
str("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") |
bc-1-3 |
quotewrap
Interpolationen mitAusdruck | Ergebnis |
---|---|
str("%{quotewrap(abcd)}%") |
\"abcd\ |
str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL") |
|
Escape-Zeichen in Interpolationen
Wenn die Zeichen”%{“ or “}%” Teil der Zeichenfolge sind, müssen Sie “\
” als Escape-Zeichen angeben, damit der StyleBook-Compiler diese nicht als Interpolationstags auswertet.
Beispiel:
str("%{\%\{ + str($parameters.vip) + \}\%}%") returns "%{1.1.1.1}%" if $parameters.vip is 1.1.1.1
In der folgenden Tabelle werden einige weitere Ausdrücke und deren Ergebnisse beschrieben:
|Kategorie|Ausdruck|Ergebnis| |—|—|—| |Escape-Interpolationen|str("%{str($parameters.n1) + \}\%}%")
|1}%
| | |lb-%{str($parameters.n1) + \}\%}%
|lb-1}%
| | |"%{str($parameters.n1) + \\"\\}\\%\\"}%"|1}%
|