Ausdrücke
Eines der leistungsfähigsten Merkmale eines StyleBooks ist die Verwendung von Ausdrücken. Sie können StyleBook-Ausdrücke in verschiedenen Szenarien verwenden, um dynamische Werte zu berechnen. Das folgende Beispiel zeigt einen Ausdruck zur Verkettung eines Parameterwerts mit einer Literalzeichenfolge.
Beispiel:
$parameters.appname + "-mon"
<!--NeedCopy-->
Dieser Ausdruck ruft den Parameter namens appname ab und verkettet ihn mit der Zeichenfolge -mon.
Die folgenden Arten von Ausdrücken werden unterstützt:
Arithmetische Ausdrücke
- Addition (+)
- Subtraktion (-)
- Multiplikation (*)
- Division (/)
- Modulo (%)
Beispiele:
- Addition zweier Zahlen: $parameters.a + $parameters.b
- Multiplikation zweier Zahlen: $parameters.a * 10
- Ermittlung des Rests nach der Division einer Zahl durch eine andere:
15%10 ergibt 5
Zeichenfolgenausdrücke
- Verkettung zweier Zeichenfolgen (+)
Beispiel:
Verkettung zweier Zeichenfolgen: str(“app-“) + $parameters.appname
Listenausdrücke
Führt zwei Listen zusammen (+)
Beispiel:
-
Verkettung zweier Listen: $parameters.external-servers + $parameters.internal-servers
-
Wenn
$parameters.ports-1[80, 81] und$parameters.port-2[81, 82] ist, wird$parameters.ports-1 + $parameters.ports-2als Liste [80, 81, 81, 82] angezeigt.
Relationale Ausdrücke
-
== : Prüft, ob zwei Operanden gleich sind, und gibt
truezurück, wenn sie gleich sind, andernfallsfalse. -
!= : Prüft, ob zwei Operanden unterschiedlich sind, und gibt
truezurück, wenn sie unterschiedlich sind, andernfallsfalse. -
> : Gibt
truezurück, wenn der erste Operand größer als der zweite Operand ist, andernfallsfalse. -
>= : Gibt
truezurück, wenn der erste Operand größer oder gleich dem zweiten Operanden ist, andernfallsfalse. -
< : Gibt
truezurück, wenn der erste Operand kleiner als der zweite Operand ist, andernfallsfalse. -
<= : Gibt
truezurück, wenn der erste Operand kleiner oder gleich dem zweiten Operanden ist, andernfallsfalse.
Beispiel:
- Verwendung des Gleichheitsoperators:
$parameters.name = = "abcd" - Verwendung des Ungleichheitsoperators:
$parameters.name != "default" - Beispiele für andere relationale Operatoren
- 10 > 9
- 10 >= 10
- 0 < 9
- 10 <= 9
- 10 == 10
- 10 != 1
Logische Ausdrücke - Boolesch
-
and: Der logische ‘und’-Operator. Wenn beide Operanden
truesind, ist das Ergebnistrue, andernfallsfalse. -
or: Der logische ‘oder’-Operator. Wenn einer der Operanden
trueist, ist das Ergebnistrue, andernfallsfalse. -
not: Der unäre Operator. Wenn der Operand
trueist, ist das Ergebnisfalseund umgekehrt. -
in: Prüft, ob das erste Argument eine Teilzeichenfolge des zweiten Arguments ist.
-
in: Prüft, ob ein Element Teil einer Liste ist.
Hinweis
Sie können Ausdrücke typumwandeln, wobei Zeichenfolgen in Zahlen und Zahlen in Zeichenfolgen umgewandelt werden. Ebenso können Sie
tcp-portin eine Zahl und eine IP-Adresse in eine Zeichenfolge umwandeln.Verwenden Sie einen Trennzeichen vor und nach jedem Operator. Sie können die folgenden Trennzeichen verwenden:
Vor einem Operator:
space,tab,comma,(,),[,]Nach einem Operator:
space,tab,(,[Zum Beispiel:
abc + def
100 % 10
10 > 9
Wörtliche Zeichenfolgenausdrücke
Sie können wörtliche Zeichenfolgen verwenden, wenn Sonderzeichen in einer Zeichenfolge ihre wörtliche Form annehmen müssen. Diese Zeichenfolgen können Escape-Zeichen, Backslash, Anführungszeichen, Klammern, Leerzeichen, eckige Klammern usw. enthalten. Bei wörtlichen Zeichenfolgen wird die übliche Interpretation der Sonderzeichen übersprungen. Alle Zeichen in der Zeichenfolge bleiben in ihrer wörtlichen Form erhalten.
In StyleBooks können Sie NetScaler-Richtlinienausdrücke in ihrer wörtlichen Form mithilfe von wörtlichen Zeichenfolgen einfügen. Die Richtlinienausdrücke enthalten typischerweise Sonderzeichen. Ohne wörtliche Zeichenfolgen müssten Sie Sonderzeichen durch Aufteilen von Zeichenfolgen in Teilzeichenfolgen escapen.
Um eine wörtliche Zeichenfolge zu erstellen, schließen Sie eine Zeichenfolge wie folgt zwischen Sonderzeichen ein:
~{string}~
<!--NeedCopy-->
Sie können wörtliche Zeichenfolgen überall im StyleBook verwenden.
Hinweis
Verwenden Sie die Zeichenfolge
}~nicht in einer Eingabezeichenfolge, da diese Sequenz das Ende einer wörtlichen Zeichenfolge anzeigt.
Beispiel:
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
<!--NeedCopy-->
Zielausdrücke
In einer StyleBook-Definition können Sie den Ausdruck $current-target verwenden, um auf die aktuelle Ziel-NetScaler-Instanz zu verweisen. Um speziell auf die IP-Adresse der Ziel-NetScaler-Instanz zu verweisen, verwenden Sie diesen Ausdruck wie folgt:
$current-target.ip
<!--NeedCopy-->
Beispiel:
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $current-target.ip + "-lbvserver"
<!--NeedCopy-->
In diesem Beispiel wird der Name des lbvserver mit der IP-Adresse der Ziel-NetScaler-Instanz konstruiert.
Validierung des Ausdruckstyps
Die StyleBook-Engine ermöglicht eine strengere Typüberprüfung zur Kompilierzeit, d. h. die beim Schreiben des StyleBooks verwendeten Ausdrücke werden bereits beim Import des StyleBooks selbst validiert und nicht erst beim Erstellen des Konfigurationspakets.
Alle Verweise auf Parameter, Substitutionen, Komponenten, Eigenschaften von Komponenten, Ausgaben von Komponenten, benutzerdefinierte Variablen (repeat-item, repeat-index, Argumente für Substitutionsfunktionen) usw. werden auf ihre Existenz und Typen validiert.
Beispiel für Typüberprüfungen:
Im folgenden Beispiel ist der erwartete Typ der Port-Eigenschaft des lbvserver StyleBooks tcp-port. In der NetScaler Console erfolgen die Typvalidierungen zur Kompilierzeit (Importzeit). Der Compiler stellt fest, dass Zeichenfolge und tcp-port keine kompatiblen Typen sind, und daher zeigt der StyleBook-Compiler einen Fehler an und kann ein StyleBook nicht importieren oder migrieren.
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: str("80")
servicetype: HTTP
<!--NeedCopy-->
Um dieses StyleBook erfolgreich zu kompilieren, deklarieren Sie Folgendes als Zahl im Compiler:
port: 80
Beispiel für das Kennzeichnen ungültiger Ausdrücke:
In früheren Versionen, wenn ein ungültiger Ausdruck einem Eigenschaftsnamen zugewiesen wurde, erkannte der Compiler ungültige Ausdrücke nicht und erlaubte den Import der StyleBooks in die NetScaler Console. Wenn dieses StyleBook nun in die NetScaler Console importiert wird, identifiziert der Compiler solche ungültigen Ausdrücke und kennzeichnet sie. Infolgedessen schlägt der Import des StyleBooks in die NetScaler Console fehl.
In diesem Beispiel ist der Ausdruck, der der Eigenschaft name in der Komponente lb-sg-binding-comp zugewiesen ist: $components.lbvserver-comp.properties.lbvservername. Es gibt jedoch keine Eigenschaft namens lbvservername in der Komponente lbvserver-comp. In früheren NetScaler Console-Versionen hätte der Compiler diesen Ausdruck zugelassen und erfolgreich importiert. Der eigentliche Fehler würde auftreten, wenn ein Benutzer ein Konfigurationspaket mit diesem StyleBook erstellen möchte. Jetzt wird diese Art von Fehler jedoch während des Imports identifiziert und das StyleBook wird nicht in die NetScaler Console importiert. Korrigieren Sie solche Fehler manuell und importieren Sie die StyleBooks.
Components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: 80
servicetype: HTTP
-
name: sg-comp
type: ns::servicegroup
properties:
servicegroupname: mysg
servicetype: HTTP
-
name: lb-sg-binding-comp
type: ns::lbvserver_servicegroup_binding
condition: $parameters.create-binding
properties:
name: $components.lbvserver-comp.properties.lbvservername
servicegroupname: $components.sg-comp.properties.servicegroupname
<!--NeedCopy-->
Indizierung von Listen
Elemente einer Liste können nun direkt durch Indizierung aufgerufen werden:
| Ausdruck | Beschreibung |
|---|---|
$components.test-lbs[0] |
Verweist auf das erste Element in der Komponente test-lbs
|
$components.test-lbs[0].properties.p1 |
Verweist auf die Eigenschaft p1 des ersten Elements in der Komponente test-lbs
|
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname |
Verweist auf die Eigenschaft servicegroupname des zweiten Elements in der Komponente servicegroups, die eine Ausgabe des ersten Elements der Komponente lbcomps ist |