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)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
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.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
原位内插
现在可以使用样书表达式替换字符串的部分。当样书编译器对这些字符串表达式进行计算时,使用样书表达式的字符串部分将被表达式的值替换。要在字符串中包含样书表达式,我们使用以下表示法:
"...%{...}%..."
<!--NeedCopy-->
其中包含在“% {”和“}%”之间的字符构成样书表达式。这些表达式称为“原位内插”。
例如,字符串 lb-%{$parameters.appname}%-svc
是具有样书表达式的就地插值的字符串表达式。字符串表达式的值取决于插值表达式的值。假定为 $parameters.appname 分配了 app1。然后,字符串表达式的计算结果为 lb-app1-svc 这就允许不在字符串表达式中对值进行硬编码,而是根据用户定义的值求值。
原位内插的一个实际用例是在样书中参数化策略表达式。假设这样一个场景: 您要编写一个策略表达式,用于检查 HTTP URL 是否包含特定的单词,例如 “jpeg”。
为此,您可以编写如下所示的策略表达式:”HTTP.REQ.URL.CONTAINS(\“jpeg\”)”。
现在,如果您想参数化 HTTP URL 中的对象,您可以在样书中添加一个字符串参数,比如说 $parameters.url-object
。策略表达式是基于此参数编写的。为此,应使用字符串连接来达到效果。该表达式类似如下:
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
<!--NeedCopy-->
如果 $parameter.url-object
分配了“csv”,则上述表达式的计算结果为“HTTP.REQ.URL.CONTAY (\” csv\”)”。但是,此表达式不易阅读。为了使此参数化形式易于阅读和理解,可以使用原位内插。
现在,包含原位内插的表达式为:
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
<!--NeedCopy-->
在上述表达式中,使用了一个在 $parameters.url-object 值两边添加内部引号的内插表达式。此表达式的结果与上述结果相同,但是,它看起来更直观,更接近实际结果。
内插中允许的类型
您可以使用在插值中生成以下类型值的表达式:布尔值、数字、tcp-port
、ipaddress
和字符串。内插替换为结果时,生成的值会自动转换为字符串。
字符串表达式可以有 0、1 个或更多内插。在顺序内插中,字符串表达式的不同部分可以替换为不同的样书表达式。例如,如果 $parameters.appname 为“app1”且 $parameters.vip 为“1.1.1.1”,字符串 lb-%{$parameters.appname}%-%{$parameters.vip}% 返回“lb-app1-1.1.1.1”
字符串表达式还支持嵌套插值。即,内插表达式可以嵌套在另一个内插表达式中,以便一个表达式的值可以作为另一个表达式的输入。
例如,考虑一个字符串“%{lb-%{$parameters.port + 1}%}%”
如果 $parameters.port 为 80,则内部字符串“%{$parameters.port + 1}%”返回“lb-81”。此处此表达式嵌套在另一个插值表达式中。
下表介绍了不同类型的内插,并提供了示例和相应的结果。示例中使用的参数值为:
- $parameters.appname: “lb1”
- $parameters.vip: “1.1.1.1”
- $parameters.n1: 1
- $parameters.n2: 3
简单插值
表达式 | 结果 |
---|---|
lb-%{$parameters.appname}%-def |
lb-lb1-def |
自动类型转换
表达式 | 结果 |
---|---|
lb-%{1}% | lb-1 |
lb-%{$parameters.vip}% | lb-1.1.1.1 |
lb-%{true}% | lb-True |
顺序插值
表达式 | 结果 |
---|---|
%{$parameters.appname}%-%{str($parameters.appname)}% | lb1-lb1 |
lb-%{1}%-%{2}% | lb-1-2 |
嵌套内插
表达式 | 结果 |
---|---|
%{abc-%{$parameters.n1 + 1}%}% |
abc-2 |
str("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") |
bc-1-3 |
使用 quotewrap
的插值
表达式 | 结果 |
---|---|
str("%{quotewrap(abcd)}%")
str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL")
|
"abcd
<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL
|
内插中的转义字符
如果字符“% {”或“}%”是字符串的一部分,则必须提供“\
”作为转义字符,这样样书编译器就不会将它们视为插值标签。
示例:
str("%{\%\{ + str($parameters.vip) + \}\%}%") returns "%{1.1.1.1}%" if $parameters.vip is 1.1.1.1
下表介绍了另外一些表达式及其结果:
|类别|表达式|结果|
|—|—|—|
|转义内插|str("%{str($parameters.n1) + \}\%}%")
|1}%
|
| |lb-%{str($parameters.n1) + \}\%}%
|lb-1}%
|
| |"%{str($parameters.n1) + \\"\\}\\%\\"}%"|1}%
|
共享
共享
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group 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 Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.