Application Delivery Management

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, um einen Parameterwert mit einer Literalzeichenfolge zu verketten.

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 (/)
  • Modulo (%)

Beispiele:

  • Hinzufügen von zwei Zahlen: $parameters.a + $parameters.b
  • Multiplikation von zwei Zahlen: $parameters.a * 10
  • Den Rest nach der Division einer Nummer durch eine andere finden:

15%10 Ergebnisse in 5

Zeichenfolgenausdrücke

  • Verketten Sie zwei Strings (+)

Beispiel:

Verketten Sie zwei Strings: str ( app-) + $parameters.appname

Ausdrücke auflisten

Zusammenführen von zwei Listen (+)

Beispiel:

  • Verketten Sie zwei Listen: $parameters.external-servers + $parameters.internal-servers

  • Wenn $parameters.ports-1[80, 81 und 81][, 82 $parameters.port-2]ist, $parameters.ports-1 + $parameters.ports-2 wird das 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.

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

  • ** : Gibt true zurück, wenn der erste Operand größer als der zweite Operanden ist, sonst gibt false zurück.

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

  • < : Gibt true zurück, wenn der erste Operand kleiner als der zweite Operanden ist, sonst wird false zurückgegeben.

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

Beispiel:

  • Verwendung des Gleichheitsoperator: $parameters.name = = "abcd"
  • Verwendung des Operators “Ungleichheit”: $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, sonst ist es falsch.

  • oder: Der logische ‘oder’ Operator. Wenn einer der Operanden wahr ist, ist das Ergebnis wahr, sonst 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 Zeichenfolgen in Zahlen konvertiert werden und Zahlen in Zeichenfolgen konvertiert werden. In ähnlicher Weise können Sie in eine Zahl umwandeln tcp-port, 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, umgekehrter Schrägstrich, Anführungszeichen, Klammern, Leerzeichen, Klammern usw. enthalten. In wörtlichen Strings wird die übliche Interpretation der Sonderzeichen übersprungen. Alle Zeichen in der Zeichenfolge werden in ihrer literalen Form beibehalten.

In StyleBooks können Sie Citrix ADC Richtlinienausdrücke mithilfe von wörtlichen Zeichenfolgen in ihre literale Form einschließen. Die Richtlinienausdrücke enthalten in der Regel Sonderzeichen. Ohne wörtliche Strings müssen Sie Sonderzeichen entgehen, indem Sie Strings in Teilzeichenfolgen unterteilen.

Um eine wörtliche Zeichenfolge zu erstellen, kapseln Sie eine Zeichenfolge wie folgt zwischen Sonderzeichen:

~{string}~
<!--NeedCopy-->

Sie können wörtliche Zeichenfolgen ü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 Typprüfung während der Kompilierungszeit, dh die beim Schreiben des StyleBook verwendeten Ausdrücke werden beim Import von StyleBook selbst und nicht beim Erstellen des Konfigurationspakets validiert.

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 ist der erwartete Typ der Porteigenschaft von lbvserverStyleBook tcp-port. In Citrix Application Delivery Management (ADM) werden die Typvalidierungen zur Kompilierungszeit (Importzeit) durchgeführt. Der Compiler findet diese Zeichenfolge und tcp-portsind nicht 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 Kennzeichnen ungültiger Ausdrücke:

In früheren Versionen hat der Compiler, wenn einem Eigenschaftsnamen ein ungültiger Ausdruck zugewiesen wurde, keine ungültigen Ausdrücke erkannt und die StyleBooks in Citrix ADM importiert werden können. Wenn dieses StyleBook nun in Citrix ADM importiert wird, identifiziert der Compiler solche ungültigen Ausdrücke und kennzeichnet es. Daher kann das StyleBook nicht in Citrix ADM importiert werden.

In diesem Beispiel lautet der Ausdruck, der der Eigenschaft name in lb-sg-binding-compcomponent zugewiesen ist: $components.lbvserver-comp.properties.lbvservername. Es gibt jedoch keine Eigenschaft, die lbvservernamein der Komponente aufgerufen wird lbvserver-comp. In früheren Citrix ADM Versionen hätte der Compiler diesen Ausdruck zugelassen und erfolgreich importiert. Der tatsächliche Fehler tritt auf, wenn ein Benutzer ein Konfigurationspaket mit diesem StyleBook erstellen möchte. Diese Art von Fehler wird jedoch beim Import erkannt und das StyleBook wird nicht in Citrix 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-->

Indizierungslisten

Auf Elemente einer Liste kann jetzt zugegriffen werden, indem sie direkt indiziert werden:

   
Ausdruck Beschreibung
$components.test-lbs[0] Bezieht sich auf das erste Element in test-lbs Komponente
$components.test-lbs[0].properties.p1 Bezieht sich auf die Eigenschaft p1 des ersten Elements in test-lbs Komponente
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname Bezieht sich auf die Eigenschaft servicegroupnamedes zweiten Elements in der servicegroupsKomponente, die eine Ausgabe aus dem ersten Element der lbcompsKomponente ist