Application Delivery Management

Ersetzungen

Substitutionen werden verwendet, um Kurznamen zu definieren, die komplexe Ausdrücke im StyleBook ersetzen können, wodurch das StyleBook besser lesbar wird.

Substitutionen sind auch nützlich, wenn derselbe Ausdruck oder Wert wiederholt im StyleBook verwendet wird, z. B. ein konstanter Wert. Wenn Sie einen Substitutionsnamen für einen Parameter verwenden, können Sie nur den Substitutionswert aktualisieren, anstatt alle Vorkommen des Parameters im StyleBook zu aktualisieren, was fehleranfällig sein kann.

Substitutionen werden auch verwendet, um Zuordnungen zwischen Werten zu definieren.

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 Map sein.

Im folgenden Beispiel werden zwei Substitutionen definiert. Die erste ist http-port, dass sie als Kurzform 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

Sie können einer Portnummer einen mnemonischen Namen geben und diese Portnummer an einer Stelle im StyleBook definieren, unabhängig davon, wie oft sie verwendet wird. Wenn Sie die Portnummer auf 8080 ändern möchten, können Sie sie im Abschnitt Substitution ändern. 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
<!--NeedCopy-->

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

substitutions:
  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS
  app-name: str("acme-") + $parameters.name + str("-app")
<!--NeedCopy-->

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")
<!--NeedCopy-->

Eine weitere nützliche Funktion von Substitutionen sind Karten, mit denen Sie Schlüssel zu Werten zuordnen können. Das Folgende ist ein Beispiel für eine Kartenersetzung.

substitutions:
    secure-port:
        true: int("443")
        false: int("80")
    secure-protocol:
        true: SSL
        false: HTTP
<!--NeedCopy-->

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
<!--NeedCopy-->

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

Das folgende Beispiel zeigt, wie Substitutionen als Funktion verwendet werden. Eine Substitutionsfunktion kann ein oder mehrere Argumente annehmen. Argumente können vom einfachen Typ sein, z. B. Zeichenfolge, Zahl, IP-Adresse, boolescher Wert und andere Typen.

Substitutionen:

form-lb-name (Name): $name + „-lb“

In diesem Beispiel ist eine Substitutionsfunktion “form-lb-name” definiert, die ein Zeichenfolgenargument namens “name” verwendet ** und daraus eine Zeichenfolge erstellt, die der Zeichenfolge im Namensargument das Suffix “-lb” anfügt. Ein Ausdruck, der diese Substitutionsfunktion verwendet, wird wie folgt geschrieben:

$substitutions.form-lb-name("my")

Es kehrt zurück my-lb.

Betrachten Sie ein anderes Beispiel:

Substitutionen:

cspol-priority (Priorität): 10100 - 100 * $priority

Die Substitution cspol-priority ist eine Funktion, die ein Argument namens “priority” verwendet und es zur Berechnung eines Werts verwendet. Im Rest des StyleBook wird diese Substitution wie folgt dargestellt:

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)
<!--NeedCopy-->

Die 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.

Das Folgende ist ein Beispiel für eine Substitution namens slist deren Wert eine Liste ist:

substitutions:
  slist:
    - a
    - b
    - c
<!--NeedCopy-->

Der Wert einer Substitution kann auch ein Wörterbuch von Schlüssel-Wert-Paaren sein, wie im folgenden Beispiel einer folgenden Substitution sdict gezeigt wird:

substitutions:
  sdict:
    a: 1
    b: 2
    c: 3
<!--NeedCopy-->

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

  slistofdict:
    -
      a: $parameters.cs1.lb1.port
      b: $parameters.cs1.lb2.port
    -
      a: $parameters.cs2.lb1.port
      b: $parameters.cs2.lb2.port
<!--NeedCopy-->

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

  sdictoflist:
    a:
      - 1
      - 2
    b:
      - 3
      - 4
<!--NeedCopy-->

In Komponenten können diese Substitutionen in Konstrukten „Bedingung“, „Eigenschaften“, „Wiederholung“ und „Bedingung wiederholen“ verwendet werden.

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

    properties:
      a: $substitutions.slist
      b: $substitutions.sdict
      c: $substitutions.slistofdict
      d: $substitutions.sdictoflist
<!--NeedCopy-->

Ein Anwendungsfall zum Definieren einer Substitution, deren Wert eine Liste oder ein Wörterbuch ist, ist, wenn Sie einen virtuellen Content Switching-Server und mehrere virtuelle Server für den Lastenausgleich konfigurieren. Da alle virtuellen Lastausgleichsserver, die an denselben virtuellen Content-Switching-Server gebunden sind, möglicherweise eine identische Konfiguration haben, sollten Sie eine Substitutionsliste und ein Wörterbuch verwenden, um zu vermeiden, dass dieselbe Konfiguration für jeden virtuellen Load Balancing-Server wiederholt wird.

Das folgende Beispiel zeigt die Ersetzung und die Komponente in den StyleBooks cs-lb-mon, um eine virtuelle Content Switching-Serverkonfiguration zu erstellen. Bei der Konstruktion der Eigenschaften von cs-lb-mon StyleBooks spezifiziert die komplexe Substitution “lb-properties” die Eigenschaften der virtuellen Lastausgleichsserver, die dem virtuellen Content Switching-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 können Sie den Wert dieser Substitution dem Parameter lb-pool für jeden Pool zuweisen.

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
<!--NeedCopy-->

Substitutionszuordnung

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

substitutions:
     port:
          HTTP: 80
          DNS: 53
          SSL: 443
<!--NeedCopy-->

In diesem Beispiel wird HTTP auf 80, DNS auf 53 und SSL auf 443 abgebildet. Um den Port eines bestimmten Protokolls abzurufen, der als Parameter angegeben ist, 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 zurück.
  • Wenn der Schlüssel DNS ist, gibt der Ausdruck 53 zurück
  • Wenn der Schlüssel SSL ist, gibt der Ausdruck 443 zurück
  • Wenn der Schlüssel in der Map nicht vorhanden ist, gibt der Ausdruck keinen Wert zurück

Substitutionslisten durchlaufen

Im folgenden Beispiel wiederholt das StyleBook eine Substitutionsliste, die aufgerufen wird, apps um eine Reihe von lbvserver Komponenten und den entsprechenden Dienstgruppen und gebundenen Servern zu erstellen.

substitutions:
  apps:
    -
      name: lb1
      vip: 1.2.3.4
      vport: 80
      protocol: HTTP
      servers:
        -
          ip: 10.8.11.11
          port: 8080
        -
          ip: 10.8.11.12
          port: 8080
    -
      name: lb2
      vip: 1.2.3.5
      vport: 81
      protocol: HTTP
      servers:
        -
          ip: 10.9.11.28
          port: 8080
        -
          ip: 10.9.11.29
          port: 8181
components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    repeat: $substitutions.apps
    repeat-item: app
    properties:
      name: $app["name"]
      ipv46: $app["vip"]
      port: $app["vport"]
      servicetype: $app["protocol"]
    components:
      -
        name: servicegroup-comp
        type: ns::servicegroup
        properties:
          servicegroupname: $parent.properties.name + "-svg"
          servicetype: HTTP
        components:
          -
            name: servers-comp
            type: ns::server
            repeat: $app["servers"]
            repeat-item: server
            properties:
              name: $server["ip"]
              ipaddress: $server["ip"]
            components:
              -
                name: servicegroup-servicegroupmember-binding-comp
                type: ns::servicegroup_servicegroupmember_binding
                properties:
                  servicegroupname: $parent.parent.properties.servicegroupname
                  servername: $parent.properties.name
                  port: $server["port"]
<!--NeedCopy-->
Ersetzungen