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

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

substitutions:

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

  app-name: str("acme-") + $parameters.name + str("-app")
<!--NeedCopy-->

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

substitutions:

  http-port: 8181

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

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

substitutions:

    secure-port:

        true: int("443")

        false: int("80")

    secure-protocol:

        true: SSL

        false: HTTP
<!--NeedCopy-->

以下示例说明了如何使用映射 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
<!--NeedCopy-->

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

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

替换

表单-LB 名称(名称):$名称 + “-lb”

在此示例中,我们定义了一个替换函数“form-lb-name”,它接受名为“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)
<!--NeedCopy-->

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

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

substitutions:

  slist:

    - a

    - b

    - c
<!--NeedCopy-->

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

substitutions:

  sdict:

    a: 1

    b: 2

    c: 3
<!--NeedCopy-->

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

  slistofdict:

    -

      a: $parameters.cs1.lb1.port

      b: $parameters.cs1.lb2.port

    -

      a: $parameters.cs2.lb1.port

      b: $parameters.cs2.lb2.port
<!--NeedCopy-->

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

  sdictoflist:

    a:

      - 1

      - 2

    b:

      - 3

      - 4
<!--NeedCopy-->

在组件中,这些替换可以用于 condition、properties、repeat、repeat-condition 构造中。

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

    properties:

      a: $substitutions.slist

      b: $substitutions.sdict

      c: $substitutions.slistofdict

      d: $substitutions.sdictoflist
<!--NeedCopy-->

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

以下示例显示了 cs-lb-mon 样书中用于创建内容交换虚拟服务器配置的替代和组件。在构建 cs-lb-mon 样书的属性时,复杂的替代 “lb-properties” 指定了与 cs 虚拟服务器关联的 lb 虚拟服务器的属性。“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
<!--NeedCopy-->

替代映射

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

substitutions:

     port:

          HTTP: 80

          DNS: 53

          SSL: 443
<!--NeedCopy-->

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

美元替换[$parameters.protocol]

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

  • 如果键为 HTTP,则表达式返回 80
  • 如果键为 DNS,则表达式返回 53
  • 如果键为 SSL,则表达式返回 443
  • 如果映射中没有键,则该表达式不返回任何值
替换