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.
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 Map sein.
Im folgenden Beispiel werden zwei Substitutionen definiert. Die erste isthttp-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-portanstelle 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 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 Namehttp-port
verwendet wird. Das folgende Beispiel zeigt, wie eine Substitution in einer Komponente verwendet wird.
components:-name:my-lbvserver-comptype:ns::lbvserverproperties:name:$parameters.name + "-lb"servicetype:HTTPipv46:$parameters.ipport:$substitutions.http-portlbmethod:$parameters.lb-alg
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")
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")
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
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
Wenn der Benutzer des StyleBook den booleschen Wert “true” für den Parameteris-secure
angibt oder das diesem Parameter entsprechende Kontrollkästchen in der NetScaler ADM GUI aktiviert, wird der Eigenschaftservicetype
dieser Komponente der WertSSLund der Porteigenschaft der Wert443zugewiesen. Wenn der Benutzer jedoch “false” für diesen Parameter angibt oder das entsprechende Kontrollkästchen in der NetScaler ADM GUI deaktiviert, wird der Eigenschaftservicetype
der WertHTTPzugewiesen, und dem Port wird der Wert80zugewiesen.
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. string, numberipaddress
,, boolean und andere Typen.
Substitutionen:
Form-lb-Name(名称):$名称+“磅”
In diesem Beispiel definieren wir eine Substitutionsfunktion “form-lb-name”, 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, kann wie folgt geschrieben werden:
$substitutions.form-lb-name("my")
Es kehrt zurückmy-lb
Betrachten Sie ein anderes Beispiel:
Substitutionen:
cspol-priority(priority): 10100 - 100 * $priority
Die Substitutioncspol-priority
ist eine Funktion, die ein Argument namens Priorität verwendet und es zur Berechnung eines Werts verwendet. 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)
Das Folgende是静脉Beispiel毛皮Substitutio的风景明信片n namensslist
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 folgenden Substitutionsdict
gezeigt wird:
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 namensslistofdict
明信片Liste冯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 Substitutionsdictoflist
jedoch ein Schlüssel-Wert-Paar zurück, wobei der Wert selbst eine andere Liste ist.
sdictoflist:: - 1 - 2 b: 3 - 4 < !--NeedCopy-->
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, um die Eigenschaften anzugeben:
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 Content Switching-Server und mehrere virtuelle Server für den Lastenausgleich konfigurieren. Da alle virtuellen Server von lb, die an denselben virtuellen CS-Server gebunden sind, möglicherweise eine identische Konfiguration haben, können Sie die Ersetzungsliste 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 StyleBookscs-lb-mon
, um eine virtuelle Content Switching-Serverkonfiguration zu erstellen. Bei der Erstellung der Eigenschaften von StyleBookscs-lb-mon
gibt die komplexe Substitution “lb-properties” die Eigenschaften der virtuellen lb-Server an, die mit dem virtuellen Server cs verknüpft 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 Komponentecs-pools
weisen wir den Wert dieser Substitution einem 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. 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
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 nicht in der Karte vorhanden ist, gibt der Ausdruck keinen Wert zurück
Substitutionslisten durchlaufen
Im folgenden Beispiel durchläuft das StyleBook die Substitutionslisteapps
, 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"]