Application Delivery Management

这篇文章已经过机器翻译.放弃

substitutions

替换用于定义可以替换样书中复杂表达式的速记名称,从而使样书更具可读性。

在样书中重复使用相同的表达式或值(例如常量值)时,替换也很有用。使用参数的替代名称允许您仅更新替换值,而不是更新样书中出现的所有可能容易出错的参数。

替换也用于定义值之间的映射。

列表中的每个替换都由一个关键字和一个值组成。值可以是简单值、表达式、函数或映射。

在以下示例中,定义了两个替换。第一个为 http-port,可以用作 8181 的简写。通过使用替换,可以在样书的其余部分以 $substitutions.http-port 引用它,而不是使用 8181。

替换

  http-port: 8181

您可以为端口号指定助记符名称,然后在样书中的一个位置定义此端口号,无论其使用次数如何。如果要将端口号修改为 8080,则可以在替换部分中对其进行修改,无论在何处使用助记符名称 http-port ,更改都会生效。

以下示例说明了如何在组件中使用替换。

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

替换也可以是复杂的表达式。以下示例说明了两个替换如何使用表达式。

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

替换表达式还可以使用现有替换表达式,如以下示例中所示。

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

替换的另一个有用功能是映射,即可以将关键字映射到值。下面是一个映射替换示例。

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

以下示例说明了如何使用映射 secure-port 和 secure-protocol。

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

这意味着,如果样书的用户将布尔值“true”指定为“安全”参数,或者在 NetScaler ADM GUI 中选中与该参数对应的复选框,则为该组件的 servicetype 属性分配值 SSL,为 port 属性分配值 443。但是,如果用户为此参数指定“false”或清除 NetScaler ADM GUI 中的相应复选框,则会为 servicetype 分配 HTTP 值,为端口分配值 80

以下示例说明了如何将替换用作函数。替换函数可以接受一个或多个参数。参数可以是简单类型,例如字符串、数字、IP 地址、布尔值和其他类型。

替换

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

在此示例中,定义了一个替换函数“form-lb-name”,该函数接受一个名为“name”的字符串参数, ** 并使用它来创建一个在名称参数中的字符串后缀“-lb”的字符串。使用此替换函数的表达式写为:

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

它回来了 my-lb

看看另外一个示例:

替换

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

替换 cspol-priority 是一个函数,它接受一个名为“优先级”的参数并使用它来计算值。在样书的其余部分中,这种替换显示为:

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)

替换也可以由键和值组成。值可以是简单值、表达式、函数、映射、列表或字典。

以下是一个名为 slist 的替代的示例,其值为列表:

substitutions: slist: - a - b - c

替代的值也可以是键值对的字典,如下面所称的 sdict 替代示例所示:

substitutions: sdict: a: 1 b: 2 c: 3

您可以组合列表和字典来创建更加复杂的属性。例如,名为 slistofdict 的替代将返回键值对的列表。

slistofdict: - a: $parameters.cs1.lb1.port b: $parameters.cs1.lb2.port - a: $parameters.cs2.lb1.port b: $parameters.cs2.lb2.port

但是,在以下示例中,替换 sdictoflist 返回一个键值对,其中值本身就是另一个列表。

sdictoflist: a: - 1 - 2 b: - 3 - 4

在组件中,这些替换可用于条件、属性、重复和重复条件结构。

以下组件示例说明了如何使用替代来指定属性:

properties: a: $substitutions.slist b: $substitutions.sdict c: $substitutions.slistofdict d: $substitutions.sdictoflist

定义其值是列表或字典的替换的用例是当您配置一个内容交换虚拟服务器和多个负载平衡虚拟服务器时。由于绑定到同一内容交换虚拟服务器的所有负载平衡虚拟服务器可能具有相同的配置,因此请使用替代列表和字典来构建配置,以避免为每个负载平衡虚拟服务器重复相同的配置。

以下示例显示了 cs-lb-mon 样书中用于创建内容交换虚拟服务器配置的替代和组件。在构造 cs-lb-mon 样书的属性时,复杂的替换“lb-properties”指定了与 ccontent 交换虚拟服务器相关的负载平衡虚拟服务器的属性。“lb-properties”替换是一个函数,接受名称、服务类型、虚拟 IP 地址、端口和服务器作为参数,并生成键值对作为值。在 cs-pools 组件中,您可以将此替换的值分配给每个池的 lb-pool 参数。

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

替代地图

您可以创建将键映射到值的替换。例如,假设这样一个场景:您想要定义要用于每个协议(键)的默认端口(值)。对于此任务,按如下所示编写替换映射。

substitutions: port: HTTP: 80 DNS: 53 SSL: 443

在此示例中,HTTP 映射到 80,DNS 映射到 53,SSL 映射到 443。要检索作为参数提供的特定协议的端口,请使用表达式

$substitutions.port[$parameters.protocol]

该表达式根据用户指定的协议返回值。

  • 如果键为 HTTP,则表达式返回 80
  • 如果键为 DNS,则表达式返回 53
  • 如果键为 SSL,则表达式返回 443
  • 如果密钥不在地图中,则表达式不返回任何值

遍历替代列表

在以下示例中,样书 遍历名为 apps 的替代列表,以创建一组 lbvserver 组件及其相应的服务组和绑定服务器。

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"]
本内容的正式版本为英文版。部分 Cloud Software Group 文档内容采用了机器翻译,仅供您参考。Cloud Software Group 无法控制机器翻译的内容,这些内容可能包含错误、不准确或不合适的语言。对于从英文原文翻译成任何其他语言的内容的准确性、可靠性、适用性或正确性,或者您的 Cloud Software Group 产品或服务沿用了任何机器翻译的内容,我们均不作任何明示或暗示的保证,并且适用的最终用户许可协议或服务条款或者与 Cloud Software Group 签订的任何其他协议(产品或服务与已进行机器翻译的任何文档保持一致)下的任何保证均不适用。对于因使用机器翻译的内容而引起的任何损害或问题,Cloud Software Group 不承担任何责任。
substitutions