Ersetzungen

Der Substitutionsabschnitt wird verwendet, um Kurzzeichennamen für komplexe Ausdrücke zu definieren, die im Rest des StyleBook verwendet werden können, um das Lesen des StyleBook zu erleichtern. Sie sind auch nützlich, wenn der gleiche Ausdruck oder Wert mehrmals im StyleBook wiederholt wird, z. B. ein konstanter Wert. Wenn Sie einen Substitutionsnamen für diesen Wert verwenden, können Sie nur den Substitutionswert aktualisieren, wenn dieser Wert geändert werden muss, anstatt ihn an jedem Speicherort im StyleBook zu aktualisieren, der möglicherweise fehleranfällig ist.

Ersetzungen werden auch zum Definieren von Zuordnungen zwischen Werten verwendet, wie in Beispielen weiter unten in diesem Dokument beschrieben.

Jede Ersetzung in der Liste besteht aus einem Schlüssel und einem Wert. Der Wert kann ein einfacher Wert, ein Ausdruck, eine Funktion oder eine Karte sein.

Im folgenden Beispiel werden zwei Substitutionen definiert. Der erste ist http-port, der als Kurzschrift für 8181 verwendet werden kann. Wenn Sie eine Substitution verwenden, können Sie dies im Rest des StyleBook als $substitutions.http-port anstelle von 8181 verweisen.

Substitutionen:

http-port: 8181

Auf diese Weise können Sie einen mnemonischen Namen für eine Portnummer angeben und diese Portnummer an einer Stelle im StyleBook definieren, unabhängig davon, wie oft es verwendet wird. Wenn Sie die Portnummer auf 8080 ändern möchten, können Sie sie im Substitutionsbereich ändern, und die Änderung wird überall dort wirksam, wo der mnemonische Name http-port verwendet wird. Das folgende Beispiel zeigt, wie eine Substitution in einer Komponente verwendet wird.

components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: HTTP

          ipv46: $parameters.ip

          port: $substitutions.http-port

          lbmethod: $parameters.lb-alg

Eine Substitution kann auch ein komplexer Ausdruck sein. Das folgende Beispiel zeigt, wie zwei Substitutionen Ausdrücke verwenden.

substitutions:

  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS

  app-name: str("acme-") + $parameters.name + str("-app")

Ein Substitutionsausdruck kann auch vorhandene Substitutionsausdrücke verwenden, wie im folgenden Beispiel gezeigt.

substitutions:

  http-port: 8181

  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")

Ein weiteres nützliches Feature von Substitutionen sind Maps, in denen Sie Schlüssel zu Werten zuordnen können. Im Folgenden finden Sie ein Beispiel für eine Kartenersetzung.

substitutions:

    secure-port:

        true: int("443")

        false: int("80")

    secure-protocol:

        true: SSL

        false: HTTP

Das folgende Beispiel zeigt, wie Sie die Karten Secure-Port und Secure-Protokoll verwenden.

components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: $substitutions.secure-protocol[$parameters.is-secure]

          ipv46: $parameters.ip

          port: $substitutions.secure-port[$parameters.is-secure]

          lbmethod: $parameters.lb-alg

Dies bedeutet, dass, wenn der Benutzer des StyleBook den booleschen Wert true für den Parameter is-secure angibt oder das Kontrollkästchen dieses Parameters in der Citrix ADM GUI aktiviert, der servicetype-Eigenschaft dieser Komponente wird der Wert SSL zugewiesen und der Port Eigenschaft hat den Wert 443zugewiesen. Wenn der Benutzer jedoch für diesen Parameter false angibt oder das entsprechende Kontrollkästchen in der Citrix ADM GUI deaktiviert, wird der servicetype-Eigenschaft der Wert HTTP zugewiesen und dem Port wird der Wert 80.

Das folgende Beispiel zeigt, wie Substitutionen als Funktion verwendet werden. Eine Substitutionsfunktion kann ein oder mehrere Argumente annehmen. Argumente sollten vom einfachen Typ sein, z. B. string, number, ipaddress, boolean und andere Typen.

Substitutionen:

form-lb-name(name): $name + “-lb”

In diesem Beispiel definieren wir eine Substitutionsfunktion form-lb-name, die ein String-Argument namens “name” nimmt und es verwendet, um eine neue Zeichenfolge zu erstellen, die -lb an die Zeichenfolge im Namen Argument. Ein Ausdruck, der diese Substitutionsfunktion verwendet, kann wie folgt geschrieben werden:

$substitutions.form-lb-name(“my”)

die “my-lb” zurückgibt

Betrachten Sie ein anderes Beispiel:

Substitutionen:

cspol-priority(priority): 10100 - 100 * $priority

Die Substitution cspol-priority ist eine Funktion, die ein Argument namens Priorität nimmt und es verwendet, um einen Wert zu berechnen. Im Rest des StyleBook kann diese Substitution verwendet werden, wie im folgenden Beispiel gezeigt:

components:

  -

    name: cspolicy-binding-comp

    type: ns::csvserver_cspolicy_binding

    condition: not $parameters.is-default

    properties:

         name: $parameters.csvserver-name

         policyname: $components.cspolicy-comp.properties.policyname

         priority: $substitutions.cspol-priority($parameters.pool.priority)

Substitution kann auch aus einem Schlüssel und einem Wert bestehen. Der Wert kann ein einfacher Wert, ein Ausdruck, eine Funktion, eine Karte, eine Liste oder ein Wörterbuch sein.

Im Folgenden finden Sie ein Beispiel für eine Substitution namens slist, deren Wert eine Liste ist:

substitutions:

  slist:

    - a

    - b

    - c

Der Wert einer Substitution kann auch ein Wörterbuch von Schlüssel-Wert-Paaren sein, wie im folgenden Beispiel einer Substitution namens ‘sdict’ unten zu sehen ist:

substitutions:

  sdict:

    a: 1

    b: 2

    c: 3

Sie können komplexere Attribute erstellen, indem Sie Listen und Wörterbücher kombinieren. Zum Beispiel gibt eine Substitution namens slistofdict eine Liste von Schlüssel-Wert-Paaren zurück.

  slistofdict:

    -

      a: $parameters.cs1.lb1.port

      b: $parameters.cs1.lb2.port

    -

      a: $parameters.cs2.lb1.port

      b: $parameters.cs2.lb2.port

Im folgenden Beispiel gibt eine Substitution sdictoflist jedoch ein Schlüssel-Wert-Paar zurück, wobei der Wert selbst eine andere Liste ist.

  sdictoflist:

    a:

      - 1

      - 2

    b:

      - 3

      - 4

In Komponenten können diese Substitutionen in Condition, Properties, repeat-condition Konstrukten verwendet werden.

Das folgende Beispiel einer Komponente zeigt, wie eine Substitution verwendet werden kann, wenn die Eigenschaften angegeben werden:

    properties:

      a: $substitutions.slist

      b: $substitutions.sdict

      c: $substitutions.slistofdict

      d: $substitutions.sdictoflist

Ein Anwendungsfall zum Definieren einer Substitution, deren Wert eine Liste oder ein Wörterbuch ist, ist, wenn Sie einen virtuellen Server mit Inhaltswechsel und mehrere virtuelle Server für den Lastenausgleich konfigurieren. Da alle virtuellen lb-Server, die an denselben virtuellen cs Server gebunden sind, möglicherweise eine identische Konfiguration aufweisen, können Sie die Substitutionsliste und das Wörterbuch verwenden, um diese Konfiguration zu erstellen, um zu vermeiden, dass diese Konfiguration für jeden virtuellen lb-Server wiederholt wird.

Das folgende Beispiel zeigt die Ersetzung und die Komponente in den cs-lb-mon StyleBooks, um eine Content Switching virtueller Serverkonfiguration zu erstellen. Beim Konstruieren der Eigenschaften von cs-lb-mon StyleBooks legt die komplexe Substitution lb-properties die Eigenschaften der virtuellen lb Server fest, die dem virtuellen CS Server zugeordnet sind. Die Substitution lb-properties ist eine Funktion, die den Namen, den Diensttyp, die virtuelle IP-Adresse, den Port und die Server als Parameter annimmt und ein Schlüssel-Wert-Paar als Wert generiert. In der Komponente cs-pools weisen wir den Wert dieser Substitution lb-pool Parameter für jeden Pool zu.

substitutions:

  cs-port[]:

    true: int("80")

    false: int("443")

  lb-properties(name, servicetype, vip, port, servers):

    lb-appname: $name

    lb-service-type: $servicetype

    lb-virtual-ip: $vip

    lb-virtual-port: $port

    svc-servers: $servers

    svc-service-type: $servicetype

    monitors:

      -

        monitorname: $name

        type: PING

        interval: $parameters.monitor-interval

        interval_units: SEC

        retries: 3

components:

  -

    name: cs-pools

    type: stlb::cs-lb-mon

    description: | Updates the cs-lb-mon configuration with the different pools provided. Each pool with rule result in a dummy LB vserver, cs action, cs policy, and csvserver_cspolicy_binding configuration.

    condition: $parameters.server-pools

    repeat: $parameters.server-pools

    repeat-item: pool

    repeat-condition: $pool.rule

    repeat-index: ndx

    properties:

      appname: $parameters.appname + "-cs"

      cs-virtual-ip: $parameters.vip

      cs-virtual-port: $substitutions.cs-port($parameters.protocol == "HTTP")

      cs-service-type: $parameters.protocol

      pools:

        -

          lb-pool: $substitutions.lb-properties($pool.pool-name, "HTTP", "0.0.0.0", 0, $pool.servers)

          rule: $pool.rule

          priority: $ndx + 1

Substitutionszuordnung:

Sie können Substitutionen erstellen, die Schlüssel Werten zuordnen. Betrachten Sie beispielsweise ein Szenario, in dem Sie den Standardport (Wert) definieren möchten, der für jedes Protokoll (Schlüssel) verwendet werden soll. Für diese Aufgabe schreiben Sie eine Substitutionszuordnung wie folgt.

substitutions:

     port:

          HTTP: 80

          DNS: 53

          SSL: 443

In diesem Beispiel wird HTTP 80 zugeordnet, DNS 53 zugeordnet und SSL 443 zugeordnet. Um den Port eines bestimmten Protokolls abzurufen, das als Parameter angegeben wird, verwenden Sie den Ausdruck

$substitutions.port[$parameters.protocol]

Der Ausdruck gibt einen Wert zurück, der auf dem vom Benutzer angegebenen Protokoll basiert.

  • Wenn der Schlüssel HTTP ist, gibt der Ausdruck 80
  • Wenn der Schlüssel DNS ist, gibt der Ausdruck 53
  • Wenn der Schlüssel SSL ist, gibt der Ausdruck 443 zurück
  • Wenn der Schlüssel nicht in der Karte vorhanden ist, gibt der Ausdruck keinen Wert zurück

Ersetzungen