Application Delivery Management

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-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, andernfalls false.

  • != : Prüft, ob zwei Operanden unterschiedlich sind, und gibt true zurück, wenn sie unterschiedlich sind, andernfalls false.

  • > : Gibt true zurück, wenn der erste Operand größer als der zweite Operand ist, andernfalls false.

  • >= : Gibt true zurück, wenn der erste Operand größer oder gleich dem zweiten Operanden ist, andernfalls false.

  • < : Gibt true zurück, wenn der erste Operand kleiner als der zweite Operand ist, andernfalls false.

  • <= : Gibt true zurück, wenn der erste Operand kleiner oder gleich dem zweiten Operanden ist, andernfalls false.

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 true sind, ist das Ergebnis true, andernfalls false.

  • or: Der logische ‘oder’-Operator. Wenn einer der Operanden true ist, ist das Ergebnis true, andernfalls false.

  • not: Der unäre Operator. Wenn der Operand true ist, ist das Ergebnis false 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 typumwandeln, wobei Zeichenfolgen in Zahlen und Zahlen in Zeichenfolgen umgewandelt werden. Ebenso können Sie tcp-port in 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
Ausdrücke