In-Place-Interpolationen

Es ist nun möglich, Teile einer Zeichenfolge mit einem StyleBook-Ausdruck (en) zu ersetzen. Wenn diese Zeichenfolgenausdrücke vom StyleBook-Compiler ausgewertet werden, wird der Teil der Zeichenfolge, der einen StyleBook-Ausdruck verwendet, durch den Wert des Ausdrucks ersetzt. Um StyleBook-Ausdrücke in eine Zeichenfolge aufzunehmen, verwenden wir die folgende Notation:

          "...%{...}%..."

wobei die Zeichen zwischen” %{ “ and “}%” einen StyleBook-Ausdruck bilden. Diese Ausdrücke werden als In-Place-Interpolationen bezeichnet.

Beispielsweise ist die Zeichenfolge lb-%{$parameters.appname}%-svc ein Zeichenfolgenausdruck mit direkter Interpolation eines StyleBook-Ausdrucks. Der Wert des Zeichenfolgenausdrucks hängt vom Wert des Interpolationsausdrucks ab. Beachten Sie, dass $parameters.appname mit “app1” zugewiesen ist. Dann wird der Zeichenfolgenausdruck zu lb-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\”)”.

Nun, wenn Sie das Objekt in der HTTP-URL parametrisieren möchten, können Sie einen String-Parameter im StyleBook hinzufügen, sagen wir $parameters.url-object. Der Richtlinienausdruck sollte basierend auf diesem Parameter geschrieben werden. 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 $parameter.url-object “csv” zugewiesen ist, 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 und näher am tatsächlichen Ergebnis aus.

Zulässige Typen innerhalb von Interpolationen

Sie können Ausdrücke verwenden, die Werte der folgenden Typen innerhalb von 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 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.

Zeichenfolgenausdrü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 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 lautet:

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

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

Interpolationen mit quotewrap

Ausdruck Ergebnis
str(“%{quotewrap(abcd)}%”) “abcd
str(“%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL") ”<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 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}%