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"
Dieser Ausdruck ruft den Parameter mit dem Namenappname
ab und verkettet ihn mit der Zeichenfolge-mon
.
Hinweis
StyleBook unterstützt die Verwendung reservierter Schlüsselwörter, wenn Sie Parameter und Ausdrücke in einer StyleBook-Definition definieren. Die reservierten Schlüsselwörter sind -
and
false
in
,not
,true
, undor
.
Die folgenden Ausdruckstypen werden unterstützt:
Arithmetische Ausdrücke
- Zusatz (+)
- Subtraktion (-)
- Multiplikation (*)
- Abteilung (/)
- Modul (%)
Beispiele:
- Zwei Zahlen hinzufügen: $parameters.a + $parameters.b
- 请来两Zahlen multiplizieren: $参数。一个* 10
- Finden des Restes nach Division einer Zahl durch eine andere:
15%10
Ergebnisse in5
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
==: Testet, ob zwei Operanden gleich sind und gibt true zurück, wenn sie gleich sind, andernfalls wird false zurückgegeben.
!=: 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.
Hinweis: Der unäre Operator. Wenn der Operand wahr ist, ist das Ergebnis falsch und umgekehrt.
in: Prüft, ob das erste Argument ein Teilstring des zweiten Arguments ist
in: Prüft, ob ein Element Teil einer Liste ist
Hinweis
Sie können Ausdrücke typisieren, bei denen Strings in Zahlen umgewandelt werden (mit der integrierten () integrierten Funktion) und Zahlen in Strings konvertiert werden (mit der eingebauten Funktion str ()). In ähnlicher Weise können Sie
tcp-port
in eine Zahl umwandeln (mit der eingebauten Funktionint()
), und eine IP-Adresse kann in eine Zeichenfolge umgewandelt werden (mit der integrierten Funktion str()).Verwenden Sie ein Trennzeichen vor und nach einem Operator. Sie können die folgenden Trennzeichen verwenden:
伏尔einem接线员:
space
tab
,comma
,(
,)
,[
,]
Nach einem Operator:
space
,tab
,(
,[
Zum Beispiel:
abc + def
100 % 10
10 > 9
$item in $parameters.some-list
Splat-Ausdrucke
Ein Splat-Ausdruck[*]
bietet eine einfachere Möglichkeit, ein bestimmtes Attribut aus einer komplexen Liste für alle Iterationen abzurufen. Sie können jetzt Splat-Ausdrücke in eine StyleBook-Definition aufnehmen.
Syntax:
list[*].attribute
Dieser Ausdruck wiederholt über alle Elemente der links angegebenen Liste und gibt den rechts angegebenen Attributwert zurück.
Wenn Sie eine IP-Adresse oder einen Hostnamen jedes virtuellen Servers aus der Liste abrufen möchten, können Sie die folgenden Splat-Ausdrücke verwenden:
Beispiel 1:
$parameters.server-members[*].hostname
Dieser Ausdruck gibt eine Liste von Hostnamen aller Servermitglieder zurück.
Beispiel 2:
$parameters.server-members[\*].sub-domains[\*].name
Dieser Ausdruck gibt eine Liste aller Namen unter den Subdomänen der einzelnen Servermitglieder zurück.
Diese Ausdrücke geben immer die Liste des Elementtyps ganz rechts zurück.
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}~
Sie können wörtliche Strings in den StyleBook-Ausdrücken 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=")}~
Weitere Informationen finden Sie unterSonderzeichen mit ihrer wörtlichen Form in StyleBooks zulassen.
Target-Ausdrücke
In einer StyleBook-Definition können Sie den Ausdruck$current-target
verwenden, um auf die aktuelle ADC-Zielinstanz zu verweisen. Um eine IP-Adresse der Ziel-ADC-Instanz ausdrücklich zu referenzieren, verwenden Sie diesen Ausdruck wie folgt:
$current-target.ip
Beispiel:
components:-name:lb-comptype:ns::lbvserverproperties:name:$current-target.ip + "-lbvserver"
In diesem Beispiel verwendet der Name vonlbvserver
die IP-Adresse der ADC-Zielinstanz.
Ausdruckstypvalidierung
Die StyleBook-Engine ermöglicht jetzt eine stärkere Typprüfung während der Kompilierungszeit, dh die beim Schreiben des StyleBook verwendeten Ausdrücke werden beim Import eines StyleBook selbst validiert, anstatt das Konfigurationspaket zu erstellen.
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 vonlbvserver
StyleBooktcp-port
. In NetScaler ADM erfolgen die Typüberprüfungen zur Kompilierungszeit (Importzeit). Der Compiler findet diese Zeichenfolge undtcp-port
es handelt sich nicht um kompatible Typen. Daher zeigt der StyleBook-Compiler einen Fehler an und kann ein StyleBook nicht importieren oder migrieren.
组件:名称:lbvserver-comp类型:ns:: lbvserver properties: name: mylb ipv46: 10.102.190.15 port: str("80") servicetype: HTTP
Um dieses StyleBook erfolgreich zu kompilieren, deklarieren Sie Folgendes als Zahl im Compiler:
port: 80
Beispiel für das Markieren ungültiger Ausdrücke:
Wenn Sie ein StyleBook in NetScaler ADM importieren, identifiziert der Compiler die ungültigen Ausdrücke und kennzeichnet sie. Daher kann das StyleBook nicht in NetScaler ADM importiert werden.
Im folgenden Beispiel ist der zugewiesene Ausdruck für die Eigenschaft “name” in der Komponentelb-sg-binding-comp
:$components.lbvserver-comp.properties.lbvservername
. Es gibt jedoch keine Eigenschaft, dielbvservername
in der Komponente aufgerufen wirdlbvserver-comp
.
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
Implizites Typecasting von Datentypen
Wenn Sie StyleBook-Ausdrücke für verschiedene Datentypen verwenden, schreibt die StyleBook-Engine die Ausgabe jetzt implizit in einen entsprechenden Datentyp um. Das implizite Typecasting von Datentypen unterstützt binäre Operationen und Wertzuweisungen.
Beispiele für binäre Operationen:
- Durch Addieren (+) von zwei Variablen vom Typ
string
undnumber
wird der Ausgabedatentyp aufstring
festgelegt.
$parameters.appname + '_' + $parameters.app_instance_num
- Durch Addieren (+) von zwei Variablen vom Typ
string
undipaddress
wird der Ausgabedatentyp aufstring
festgelegt.
$parameters.appname + '_' + $parameters.instance_ip
- Durch Addieren (+) von zwei Variablen vom Typ
ipaddress
undnumber
wird der Ausgabedatentyp aufipaddress
festgelegt.
$parameters.instance_ip + $parameters.number
- Durch Subtrahieren (-) von zwei Variablen vom Typ
ipaddress
undnumber
wird der Ausgabedatentyp aufipaddress
festgelegt.
$parameters.instance_ip - $parameters.number
- Durch Multiplizieren (*) zweier Variablen vom Typ
string
undnumber
wird der Ausgabedatentyp aufstring
festgelegt.
$parameters.dummy_str * $parameters.count
Beispiele für Wertzuweisungen:
- Wenn eine Variable als Datentyp
string
definiert ist, wird der zugewiesene Wert in den definierten Datentyp konvertiert.
name: $parameters.port * 3
- Wenn eine Variable als Datentyp
portnumber
definiert ist, wird der zugewiesene Wert mit Ausnahmen in den Datentypportnumber
konvertiert.
port: $index + $parameters.lower_limit
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 Komponentethetest-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 Eigenschaftservicegroupname des zweiten Elements in derservicegroups Komponente, bei der es sich um eine Ausgabe des ersten Elements derlbcomps Komponente handelt |