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:
"...%{...}%..."
<!--NeedCopy-->
Wo die zwischen”% {“und “}%” eingeschlossenen Zeichen einen StyleBook-Ausdruck bilden. Diese Ausdrücke werden als In-Place-Interpolationen bezeichnet.
Zum Beispiel lb-%{$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.appname mit “app1” zugewiesen ist. Dann wird der Zeichenfolgenausdruck zu lb-app1-svc ausgewertet. Dadurch können die Werte nicht in Zeichenfolgenausdrücken hartcodiert, sondern anhand der benutzerdefinierten Werte ausgewertet werden.
Ein praktischer Anwendungsfall von In-Place-Interpolationen ist die Parametrisierung von Richtlinienausdrücken in StyleBooks. Stellen Sie sich ein Szenario vor, in dem Sie einen Richtlinienausdruck schreiben möchten, der überprüft, ob die HTTP-URL ein bestimmtes Wort enthält, z. B. „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 + "\\")")
<!--NeedCopy-->
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 Parametrisierung leicht lesbar und verständlich zu machen, können Sie In-Place-Interpolationen verwenden.
Der Ausdruck mit In-Place-Interpolation lautet nun:
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
<!--NeedCopy-->
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, number tcp-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 haben. Bei einer sequentiellen 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-Ausdrücke unterstützen auch verschachtelte Interpolationen. 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 zum Beispiel eine 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 |
---|---|
lb-%{$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 |
Sequentielle 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 mit Ausdruck | Ergebnis |
---|---|
str("%{quotewrap(abcd)}%")
str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL")
|
"abcd
<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL
|
Escape-Zeichen in Interpolationen
Wenn die Zeichen “%{“ oder “}%” Teil der Zeichenfolge sind, müssen Sie “\
” als Escape-Zeichen angeben, damit der StyleBook-Compiler diese nicht als Interpolations-Tags 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}%
|