This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已动态机器翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
This content has been machine translated dynamically.
This content has been machine translated dynamically.
This content has been machine translated dynamically.
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.
Este artigo foi traduzido automaticamente.
这篇文章已经过机器翻译.放弃
Translation failed!
表达式
样书最强大的功能之一是使用表达式。可以在各种方案中使用样本表达式来计算动态值。以下示例是将参数值与文字字符串连接起来的表达式。
示例:
$parameters.appname + "-mon"
此表达式检索名为的参数 appname
,并将其与字符串连接起来 -mon
。
支持以下类型的表达式:
算术表达式
- 添加 (+)
- 减法 (-)
- 乘法 (*)
- 司 (/)
- 模数 (%)
示例:
- 添加两个数字:$parameters.a + $parameters.b
- 乘以两个数字:$parameters.a * 10
- 在一个数字除以另一个数字后查找剩余数字:
15%10
中的结果 5
字符串表达式
- 连接两个字符串 (+)
示例:
连接两个字符串:str(“app-“) + $parameters.appname
列表表达式
合并两个列表 (+)
示例:
-
连接两个列表:$parameters.external-servers + $parameters.internal-servers
-
如果
$parameters.ports-1
是 [80, 81] 和$parameters.port-2
是 [81, 82],则$parameters.ports-1 + $parameters.ports-2
显示为列表 [80, 81, 81, 82]。
关系表达式
-
== :测试两个操作数是否相等,如果它们相等,则返回 true,否则返回 false。
-
! =:测试两个操作数是否不同,如果它们不同,则返回 true,否则返回 false。
-
> :如果第一个操作数大于第二个操作数,则返回 true,否则返回 false。
-
>= :如果第一个操作数大于或等于第二个操作数,则返回 true,否则返回 false。
-
< :如果第一个操作数小于第二个操作数,则返回 true,否则返回 false。
-
<= :如果第一个操作数小于或等于第二个操作数,则返回 true,否则返回 false。
示例:
- 平等运算符的使用:
$parameters.name = = "abcd"
- 使用不等式运算符:
$parameters.name != "default"
- 其他关系运算符示例
- 10 > 9
- 10 >= 10
- 0 < 9
- 10 <= 9
- 10 == 10
- 10 != 1
逻辑表达式-布尔值
-
和: 逻辑 ‘和’ 运算符. 如果两个操作数为 true,则结果为 true,否则为 false。
-
或:逻辑 ‘或’ 运算符。如果其中一个操作数为 true,则结果为 true,否则为 false。
-
不:一元运算符。如果操作数为 true,则结果为假,相反。
-
在:测试第一个参数是否是第二个参数的子字符串
-
在:测试项目是否是列表的一部分
注意
您可以将字符串转换为数字并将数字转换为字符串的类型转换表达式。同样,您可
tcp-port
以转换为数字,并且 IP 地址可以转换为字符串。在任何运算符之前和之后使用分隔符。可以使用以下分隔符:
在运算符之前:
space
tab``、comma
、、(
、)
、[
,]
运算符后:
space
、tab
、(
、[
例如:
abc + def
100 % 10
10 > 9
逐字字符串表达式
当字符串中的特殊字符必须采用文字形式时,您可以使用逐字字符串。这些字符串可以包含转义字符、反斜杠、引号、括号、空格、括号等。在逐字字符串中,跳过特殊字符的常规解释。字符串中的所有字符都以其文字形式保留。
在样书中,可以使用逐字字符串以文字形式包含 Citrix ADC 策略表达式。策略表达式通常包含特殊字符。如果没有逐字字符串,您必须通过将字符串拆分为子字符串来转义特殊字符。
要创建逐字字符串,请在特殊字符之间封装字符串,如下所示:
~{string}~
您可以在样书中的任何位置使用逐字字符串。
注意:请
勿在输入字符串
}~
中使用字符序列,因为此序列表示逐字字符串的结尾。
示例:
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
表达式类型验证
样本引擎现在允许在编译期间进行增强的类型检查,即,在导入样本本身的过程中,而不是在创建配置包时,验证编写样本时使用的表达式,
对参数、替换、组件、组件属性、组件输出、用户定义的变量(重复项、重复索引、替代函数的参数)等的所有引用都是根据它们的存在和类型进行验证的。
类型检查示例:
在以下示例中, lbvserver
样书的端口属性的预期类型为 tcp-port
。在 Citrix Application Delivery Management (ADM) 中,类型验证会在编译时(导入时)进行。编译器会发现该字符串并 tcp-port
且不兼容类型,因此样书编译器会显示错误,无法导入或迁移样书。
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: str("80")
servicetype: HTTP
要成功编译此样书,请在编译器中将以下内容声明为数字:
port: 80
标记无效表达式的示例:
在早期版本中,当将无效表达式分配给属性名称时,编译器未检测到无效表达式,并允许将样本导入 Citrix ADM。现在,如果将此样书导入到 Citrix ADM,则编译器会识别此类无效表达式并标记它。因此,样书无法导入到 Citrix ADM。
在此示例中,分配给 lb-sg-binding-comp
组件中 name 属性的表达式为: $components.lbvserver-comp.properties.lbvservername
。但是,组件 lbvservername
中没有调用的属性 lbvserver-comp
。在早期的 Citrix ADM 版本中,编译器将允许此表达式并成功导入该表达式。当用户要使用此样本创建配置包时,实际上会失败。但是现在,在导入过程中会识别此类错误,并且样本不会导入到 Citrix ADM。手动更正此类错误并导入样书。
Components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: 80
servicetype: HTTP
-
name: sg-comp
type: ns::servicegroup
properties:
servicegroupname: mysg
servicetype: HTTP
-
name: lb-sg-binding-comp
type: ns::lbvserver_servicegroup_binding
condition: $parameters.create-binding
properties:
name: $components.lbvserver-comp.properties.lbvservername
servicegroupname: $components.sg-comp.properties.servicegroupname
为列表建立索引
现在,可以直接为列表中的项目建立索引来访问它们:
表达式 | 说明 |
$components.test-lbs[0] |
引用 test-lbs 组件中的第一个项目 |
$components.test-lbs[0].properties.p1 |
引用 test-lbs 组件中的第一个项目的属性 p1 |
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname |
指组件中 servicegroupname 第二个项目的属性,该属性是 servicegroups 组件第一个项目的 lbcomps 输出 |
This Preview product documentation is Citrix Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Citrix Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Citrix product purchase decisions.
If you do not agree, select Do Not Agree to exit.