参数条件
在 StyleBook 定义中,参数定义了 StyleBook 用户为创建配置包而提供的输入。有时,您可能希望修改参数行为,如下所示:
- 仅当满足条件时才向用户显示某些参数。
- 一个参数的允许值取决于另一个参数。
- 仅在特定条件下将参数设置为强制。
在这些情况下,请使用 parameters-conditions
部分定义参数条件。参数条件具有以下属性:
-
target
:指定您要对其应用条件的参数。 -
action
:指定如果目标参数与条件匹配时要执行的操作。此功能支持以下操作: -
condition
:指定必须满足的条件。 -
value
:根据操作为目标参数属性设置值。
注意
目前,参数条件无法应用于列表对象中的参数。
“显示”或“隐藏”
当操作为 show
且指定条件返回 True
时,目标参数将显示在 GUI 上。
当操作为 hide
且指定条件返回 True
时,目标参数将从 GUI 上消失。
示例
parameters-conditions:
-
target: $parameters.security-settings.cert-details
action: show
condition: $parameters.protocol in ["SSL", "SSL-BRIDGE"]
<!--NeedCopy-->
最初,security-settings
参数的证书详细信息处于隐藏状态。当用户选择 SSL 或 SSL-Bridge 协议时,证书详细信息将显示。
“设置默认值”
当操作为 set-default
且指定条件返回 True
时,目标参数的值将设置为默认值。
示例 1
parameters-conditions:
-
target: $parameters.port
action: set-default
condition: $parameters.protocol == "SSL"
value: 443
-
target: $parameters.port
action: set-default
condition: $parameters.protocol != "SSL"
value: 80
<!--NeedCopy-->
示例 2
parameters-conditions:
-
target: $parameters.port
action: set-default
value: if-then-else($parameters.protocol == "SSL", 443, 80)
<!--NeedCopy-->
当用户选择 SSL 协议时,默认端口值将设置为 443
。对于其他协议,默认端口值将设置为 80
。示例 1 和 2 会产生相同的结果。
“设置为必填”
当操作为 set-required
且指定条件返回 True
时,目标参数将成为创建配置包的必填字段。
parameters-conditions:
-
target: $parameters.security-settings.cert-details
action: set-required
condition: $parameters.protocol in ["SSL", "SSL-BRIDGE"]
<!--NeedCopy-->
最初,security-settings
参数的证书详细信息可能不是必需的。当用户选择 SSL 或 SSL-Bridge 协议时,证书详细信息将成为创建配置包的必填字段。
“设置允许值”
当操作为 set-allowed-values
且指定条件返回 True
时,目标参数允许您仅选择指定值。
示例 1
parameters-conditions:
-
target: $parameters.app-name
action: set-allowed-values
value:
- "SSL"
condition: $parameters.lb-virtual-port == 443
<!--NeedCopy-->
当用户将 443
指定为负载均衡虚拟端口时,应用程序名称仅允许 SSL 选项。
示例 2
parameters:
-
name: root-certificates
label: "Root Certificates"
type: object[]
parameters:
-
name: certkey-name
label: "SSL Root CertKey Name"
type: string
required: true
-
name: im-certificates
label: "Intermediate Certificates"
type: object[]
parameters:
-
name: certkey-name
label: "Name of Intermediate CertKey"
type: string
required: true
-
name: link-options
label: "Link to Root or Intermediate CertKey?"
type: string
allowed-values:
- Root
- Intermediate
default: Root
required: true
-
name: link-certkey
label: "Linked to Root/Intermediate CertKey Name"
type: string
required: true
parameters-conditions:
-
repeat: $parameters.im-certificates
repeat-item: imcert
parameters-conditions:
-
target: $imcert.link-certkey
action: set-allowed-values
condition: $imcert.link-options == "Root"
value: $parameters.root-certificates[*].certkey-name
-
target: $imcert.link-certkey
action: set-allowed-values
condition: $imcert.link-options == "Intermediate"
value: $parameters.im-certificates[*].certkey-name
<!--NeedCopy-->
此示例是关于为 SSL 证书设置值的。参数条件中的重复构造会遍历所有中间证书 (im-certificates
),并检查每个证书的 link-options
参数。
如果 link-options
参数匹配某个值,则 link-certkey
参数中的允许值将添加到相应的证书列表中。
例如,如果 link-options
参数为 Root
,则 link-certkey
参数中的允许值将添加到 root-certificate
列表中。
以下表示法用于将证书添加到列表中:
-
对于根证书:
$parameters.root-certificates[*].certkey-name <!--NeedCopy-->
-
对于中间证书:
$parameters.im-certificates[*].certkey-name <!--NeedCopy-->
“设置标签”
当操作为 set-label
且指定条件返回 True
时,目标参数的标签将更改为指定文本。
parameters-conditions:
-
target: $parameters.app-name
action: set-label
value: if-then-else($parameters.lb-service-type == "TCP", "TCPApp","UDPApp")
<!--NeedCopy-->
当用户选择负载均衡器协议为 TCP 时,应用程序的标签将更改为 TCPApp。如果用户选择其他选项,应用程序的标签将更改为 UDPApp。
“设置描述”
当操作为 set-description
且指定条件返回 True
时,目标参数的描述将更改为指定文本。此描述将显示在目标参数的工具提示中。
parameters-conditions:
-
target: $parameters.app-name
action: set-description
value: if-then-else($parameters.lb-service-type == "TCP", "Select a TCP application name","Select a UDP application name")
<!--NeedCopy-->
当用户选择负载均衡器协议为 TCP 时,应用程序的工具提示将显示文本:Select a TCP application name
。如果用户选择其他选项,应用程序的描述将显示 Select a UDP application name
。
“折叠窗格”或“展开窗格”
当操作为 collapse-pane
且指定条件返回 True
时,目标参数的窗格将在 GUI 中折叠。
当操作为 expand-pane
且指定条件返回 True
时,目标参数的窗格将在 GUI 中展开。
parameters-conditions:
-
target: $parameters.security-settings.cert-details
action: expand-pane
condition: $parameters.protocol in ["SSL", "SSL-BRIDGE"]
<!--NeedCopy-->
最初,security-settings
参数的证书详细信息窗格可能未展开。当用户选择 SSL 或 SSL-Bridge 协议时,证书详细信息窗格将在 GUI 上展开。
“设置模式”
当操作为 set-pattern
且指定条件返回 True
时,目标参数字段将设置为指定模式。
parameters-conditions:
-
target: $parameters.app-name
action: set-pattern
value: "[a-z]+"
<!--NeedCopy-->
在此示例中,应用程序名称仅允许小写字母字符。
嵌套参数条件
在 StyleBook 定义中,您可以在参数条件中指定参数条件。这些条件称为嵌套参数条件,并使用重复构造来定义这些条件。当您希望将操作应用于来自另一个参数的参数时,嵌套参数条件非常有用。
parameters-conditions:
-
repeat: $parameters.lbvservers
repeat-item: lbvserver
parameters-conditions:
-
target: $lbvserver.port
action: set-allowed-values
condition: $lbvserver.protocol == "HTTPS"
value: $parameters.ssl-ports
<!--NeedCopy-->
在此示例中,当用户为负载均衡虚拟服务器选择 HTTPS 协议时,端口值将动态填充。并且,它适用于列表中的每个负载均衡虚拟服务器。