Ausdrücke
Eine der mächtigsten Funktionen eines StyleBook ist die Verwendung von Ausdrücken. Sie können StyleBooks-Ausdrücke in verschiedenen Szenarien verwenden, um dynamische Werte zu berechnen. Das folgende Beispiel ist ein Ausdruck zum Verketten eines Parameterwerts mit einer Literalzeichenfolge.
Beispiel:
$parameters.appname + "-mon"
<!--NeedCopy-->
Dieser Ausdruck ruft den Parameter mit dem Namen appname
ab und verkettet ihn mit der Zeichenfolge -mon
.
Die folgenden Ausdruckstypen werden unterstützt:
Arithmetische Ausdrücke
- Zusatz (+)
- Subtraktion (-)
- Multiplikation (*)
- Abteilung (/)
- Modul (%)
Beispiele:
- Zwei Zahlen hinzufügen: $parameters.a + $parameters.b
- Zwei Zahlen multiplizieren: $parameters.a * 10
- Finden des Restes nach Division einer Zahl durch eine andere:
15%10
Ergebnisse in 5
String-Ausdrücke
- Verketten Sie zwei Strings (+)
Beispiel:
Verketten Sie zwei Strings: str (“app-“) + $parameters.appname
Ausdrücke auflisten
Führt zwei Listen zusammen (+)
Beispiel:
-
Verketten Sie zwei 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-2
als Liste [80, 81, 81, 82] angezeigt.
Relationale Ausdrücke
-
== : Prüft, ob zwei Operanden gleich sind und gibt true zurück, wenn sie gleich sind, sonst gibt false zurück.
-
! =: Testet, ob zwei Operanden unterschiedlich sind und gibt true zurück, wenn sie unterschiedlich sind, andernfalls wird false zurückgegeben.
-
** : Gibt true zurück, wenn der erste Operand größer als der zweite Operand ist, andernfalls wird false zurückgegeben.
-
>= : Gibt true zurück, wenn der erste Operand größer oder gleich dem zweiten Operanden ist, andernfalls wird false zurückgegeben.
-
< : Gibt true zurück, wenn der erste Operand kleiner als der zweite Operand ist, andernfalls wird false zurückgegeben.
-
<= : Gibt true zurück, wenn der erste Operand kleiner oder gleich dem zweiten Operanden ist, andernfalls wird false zurückgegeben.
Beispiel:
- Verwendung des Gleichstellungs-Operators:
$parameters.name = = "abcd"
- Verwendung des Inequality Operators:
$parameters.name != "default"
- Beispiele für andere relationale Operatoren
- 10 > 9
- 10 >= 10
- 0 < 9
- 10 <= 9
- 10 == 10
- 10 != 1
Logische Ausdrücke - boolescher Wert
-
und: Der logische ‘und’ Operator. Wenn beide Operanden wahr sind, ist das Ergebnis wahr, andernfalls ist es falsch.
-
oder: Der logische “oder” -Operator. Wenn einer der Operanden wahr ist, ist das Ergebnis wahr, andernfalls ist es falsch.
-
nicht: Der unäre Operator. Wenn der Operand wahr ist, ist das Ergebnis falsch und 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 eingeben, bei denen Zeichenketten in Zahlen und Zahlen in Zeichenketten umgewandelt werden. In ähnlicher Weise können Sie
tcp-port
in eine Zahl umwandeln, und eine IP-Adresse kann in eine Zeichenfolge umgewandelt werden.Verwenden Sie ein Trennzeichen vor und nach einem Operator. Sie können die folgenden Trennzeichen verwenden:
Vor einem Operator:
space
tab
,comma
,(
,)
,[
,]
Nach einem Operator:
space
,tab
,(
,[
Beispiel:
abc + def
100 % 10
10 > 9
Wörtliche Zeichenfolgenausdrücke
Sie können wörtliche Zeichenfolgen verwenden, wenn Sonderzeichen in einer Zeichenfolge ihre literale Form annehmen müssen. Diese Zeichenfolgen können Escape-Zeichen, umgekehrte Schrägstriche, Anführungszeichen, Klammern, Leerzeichen, Klammern usw. enthalten. In wörtlichen Zeichenketten 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 ihre literale Form mithilfe von wörtlichen Zeichenfolgen einschließen. Die Richtlinienausdrücke enthalten in der Regel Sonderzeichen. Ohne wörtliche Zeichenfolgen müssen Sie Sonderzeichen umgehen, indem Sie Strings in Teilstrings zerlegen.
Um eine wörtliche Zeichenfolge zu erstellen, kapseln Sie eine Zeichenfolge wie folgt zwischen Sonderzeichen:
~{string}~
<!--NeedCopy-->
Sie können wörtliche Zeichenketten überall im StyleBook verwenden.
Hinweis
Verwenden Sie nicht die Zeichenfolge
}~
in einer Eingabezeichenfolge, da diese Sequenz das Ende einer wörtlichen Zeichenfolge angibt.
Beispiel:
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
<!--NeedCopy-->
Target-Ausdrücke
In einer StyleBook-Definition können Sie den $current-target
Ausdruck verwenden, um auf die aktuelle ADC-Zielinstanz zu verweisen. Um sich ausdrücklich auf die IP-Adresse der ADC-Zielinstanz zu beziehen, 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 lbvserver
wird der Name des mit der IP-Adresse der ADC-Zielinstanz erstellt.
Ausdruckstypvalidierung
Die StyleBook-Engine ermöglicht eine stärkere Typüberprüfung während der Kompilierzeit, d. h. die beim Schreiben des StyleBook verwendeten Ausdrücke werden beim Import von StyleBook selbst validiert und nicht beim Erstellen des Konfigurationspakets.
Alle Verweise auf Parameter, Substitutionen, Komponenten, Eigenschaften von Komponenten, Ausgaben von Komponenten, benutzerdefinierte Variablen (Repeat-Item, Repeat-Index, Argumente auf Substitutionsfunktionen) usw. werden auf ihre Existenz und Typen validiert.
Beispiel für Typprüfungen:
Im folgenden Beispiel lautet der erwartete Typ der Port-Eigenschaft von lbvserver
StyleBook tcp-port
. In NetScaler Application Delivery Management (ADM) finden die Typüberprüfungen zur Kompilierzeit (Importzeit) statt. Der Compiler findet diese Zeichenfolge und tcp-port
es handelt sich nicht um kompatible Typen. 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 Markieren ungültiger Ausdrücke:
In früheren Versionen erkannte der Compiler keine ungültigen Ausdrücke, wenn einem Eigenschaftsnamen ein ungültiger Ausdruck zugewiesen wurde, und ermöglichte den Import der StyleBooks in NetScaler ADM. Wenn dieses StyleBook nun in NetScaler ADM importiert wird, identifiziert der Compiler solche ungültigen Ausdrücke und kennzeichnet sie. Daher kann das StyleBook nicht in NetScaler ADM importiert werden.
In diesem Beispiel lautet der Ausdruck, der der Namenseigenschaft in der Komponente lb-sg-binding-comp
zugewiesen ist: $components.lbvserver-comp.properties.lbvservername
. Es gibt jedoch keine Eigenschaft, die lbvservername
in der Komponente aufgerufen wird lbvserver-comp
. In früheren NetScaler ADM-Versionen hätte der Compiler diesen Ausdruck zugelassen und erfolgreich importiert. Der eigentliche Fehler würde auftreten, wenn ein Benutzer mit diesem StyleBook ein Konfigurationspaket erstellen möchte. Jetzt wird diese Art von Fehler jedoch beim Import festgestellt und das StyleBook wird nicht in NetScaler ADM 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
Auf Elemente einer Liste kann jetzt zugegriffen werden, indem Sie sie direkt indizieren:
Ausdruck | Beschreibung |
$components.test-lbs[0] |
Bezieht sich auf das erste Element in der Komponente test-lbs |
$components.test-lbs[0].properties.p1 |
Bezieht sich auf die Eigenschaft p1 des ersten Elements in der test-lbs-Komponente |
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname |
Bezieht sich auf die Eigenschaft servicegroupname des zweiten Elements in der servicegroups Komponente, die eine Ausgabe des ersten Elements der lbcomps Komponente ist |