Citrix Application Delivery Management 服务

内置函数

样书中的表达式可以使用内置函数。

例如,您可以使用内置函数 str() 将数字转换为字符串。

str($parameters.order)

或者,你可以使用内置函数 int() 将字符串转换为整数。

int($parameters.priority)

下面是样本表达式中支持的内置函数列表以及这些函数的用法示例。

str()

str() 函数将输入参数转换为字符串值。

允许的参数类型:

  • string
  • number
  • TCP-port
  • boolean
  • IP address

示例

  • "set-" + str(10) 函数返回 "set-10"
  • str(10) 函数返回 10
  • str(1.1.1.1) 函数返回 1.1.1.1
  • str(T rue) 函数返回 "T rue"
  • str(ADM) 函数返回 "mas"

int()

int() 函数接受字符串、数字、IP 地址或 tcpport 作为参数并返回一个整数。

示例

  • int("10") 函数返回 10
  • int(10) 函数返回 10
  • int(ip('0.0.4.1')) 函数返回 1025

bool()

bool() 函数将任何类型作为参数。如果参数值为 false、空值或不存在,则此函数返回 false

否则,它会返回 true

示例

  • bool(true) 函数返回 true
  • bool(false) 函数返回 false
  • 如果 $parameters.afalse、空值或不存在,bool($parameters.a) 函数将返回 false

len()

len() 函数将字符串或列表作为参数,并返回字符串中的字符数或列表中的项目数。

示例 1

如果按以下所示定义 substitution:

items: ["123", "abc", "xyz"]

len($substitutions.items) 函数返回 3

示例 2

len("Citrix ADM") 函数返回 10

示例 3

如果 $parameters.vips 有值 ['1.1.1.1', '1.1.1.2', '1.1.1.3'],则 len($parameters.vips) 函数返回 3

min()

min() 函数接受列表或一系列数字或 tcp-ports 作为参数,然后返回最小的项目。

包含一系列编号/TCP 端口的示例:

  • min(80, 100, 1000) 函数返回 80
  • min(-20, 100, 400) 函数返回 -20
  • min(-80, -20, -10) 函数返回 -80
  • min(0, 100, -400) 函数返回 -400

包含编号/tcp 端口列表的示例:

  • 支持 $parameters.ports 是一个列表,tcp-ports 具有以下值:[80, 81, 8080]

    min($parameters.ports) 函数返回 80

max()

max() 函数接受列表或一系列数字或 tcp-ports 作为参数,然后返回最大的项目。

包含一系列编号/TCP 端口的示例:

  • max(80, 100, 1000) 函数返回 1000
  • max(-20, 100, 400) 函数返回 400
  • max(-80, -20, -10) 函数返回 -10
  • max(0, 100, -400) 函数返回 100

包含编号/tcp 端口列表的示例:

  • 支持 $parameters.portstcp-ports 的列表,具有值:[80, 81, 8080]

    max($parameters.ports) 函数返回 8080

bin()

bin() 函数将数字作为参数,并返回一个以二进制格式表示数字的字符串。

表达式示例

bin(100) 函数返回 0b1100100

oct()

oct() 函数将数字作为参数,并返回一个字符串,该字符串以八进制格式表示该数字。

表达式示例

oct(100) 函数返回 0144

hex()

hex() 函数接受一个数字作为参数,并返回一个小写字符串,该字符串表示十六进制格式的数字。

表达式示例

hex(100) 函数返回 0x64

lower()

lower() 函数接受一个字符串作为参数,并以小写形式返回相同的字符串。

示例

lower("ADM") 函数返回 adm

upper()

upper() 函数接受一个字符串作为参数,并以大写形式返回相同的字符串。

示例

upper("Citrix ADM") 函数返回 CITRIX ADM

sum()

sum() 函数接受数字列表或 tcpports 作为参数并返回列表中数字的总和。

示例 1

如果按如下方式定义替 代:替代:

list-of-numbers = [11, 22, 55]

sum($substitutions.list-of-numbers) 函数返回 88

示例 2

如果 $parameters.ports[80, 81, 82],则 sum($parameters.ports) 函数返回 243

pow()

pow() 函数接受两个数字作为参数,并返回一个数字,该数字表示第一个参数提出到第二个幂的参数。

示例

pow(3,2) 函数返回 9

ip()

ip() 函数采用整数、字符串或 IP 地址作为参数,并根据输入值返回 IP 地址。

示例

  • ip 函数中指定 IP 地址:

    ip(3.1.1.1) 函数返回 3.1.1.1

  • ip 函数中指定一个字符串:

    ip('2.1.1.1') 函数返回 2.1.1.1

  • ip 函数中指定一个整数:

    • ip(12) 函数返回 0.0.0.12

    • 当您在 ip 函数中将整数指定为字符串时,它会返回输入的等效 IP 地址。

      ip('1025') 函数返回 0.0.4.1

    此函数还支持整数加减操作,并返回生成的 IP 地址。

    • 加法:ip(1025) + ip(12) 函数返回 0.0.4.13

    • 减法:ip('1025') - ip(12) 函数返回 0.0.3.245

    • 合并加减:ip('1.1.1.1') + ip('1.1.1.1') – ip(2) 返回 2.2.2.0

ip_network ()

ip_network 函数将 IP 地址和网络掩码长度作为参数并返回 IP 网络符号。

Example-1:

ip_network(1.1.1.1, 28) 函数返回 1.1.1.1/28

Example-2:

考虑网络 1.1.1.1/30ip_network($parameters.ipaddr, 30) 函数返回 1.1.1.1

Example-3:

考虑网络 23.1.12.76/24ip_network(23.1.12.76, $parameters.netmask-len) 函数返回 24

network_ip ()

network_ip() 函数返回指定 IP 网络的第一个 IP 地址。

示例

network_ip(1.1.1.1/28) 函数返回 1.1.1.0。在此示例中, 1.1.1.0 是给定网络中的第一个 IP 地址。

subnets()

subnets() 函数返回指定 IP 网络和子网掩码长度的子网列表。

示例

subnets(1.1.1.1/28, 30) 函数返回给定 IP 网络和子网掩码长度的子网列表。输出可以如下:

[1.1.1.0/30', '1.1.1.4/30', '1.1.1.8/30', '1.1.1.12/30']

netmask_ip()

netmask_ip() 函数返回指定 IP 网络的网络掩码 IP 地址。

示例

netmask_ip(1.1.1.1/28) 函数返回 255.255.255.0。在给定的 IP 网络中, 255.255.255.0 是子网掩码 IP 地址。

broadcast_ip()

broadcast_ip() 函数返回指定 IP 网络的广播 IP 地址。

示例

broadcast_ip(1.1.1.1/28) 函数返回 1.1.1.15。在给定网络中, 1.1.1.1 是广播 IP 地址。

cidr()

cidr() 函数返回指定 IP 网络的 CIDR 表示法。

示例

cidr(1.1.1.1/28) 函数返回 1.1.1.0/28。在给定的网络中, 1.1.1.0/28 是 CIDR 符号。

is_cidr()

is_cidr() 函数接受 ipnetwork 作为输入。而且,如果指定的值与 IP 网络的 CIDR 表示法匹配,它将返回 True

Example-1:

is_cidr(1.1.1.0/24) 函数返回 True,因为指定的值是给定网络的 CIDR 表示法。

Example-2:

is_cidr(1.1.1.1/28) 函数返回 False,因为给定网络的 CIDR 表示法与指定的值不同。

is_in_network()

is_in_network() 函数接受 ipnetworkipaddress 值。而且, True 如果指定的 IP 地址存在于指定的 IP 网络中,它将返回。

Example-1:

is_in_network(1.1.1.1/24, 1.1.1.121) 函数返回 True,因为 1.1.1.121 地址是 1.1.1.1/24 网络的一部分。

Example-2:

is_in_network(1.1.1.1/28, 2.1.1.1) 函数返回 Fasle,因为 2.1.1.1 地址不是 1.1.1.1/28 网络的一部分。

base64.encode()

base64.encode() 函数接受一个字符串参数并返回 base64 编码的字符串。

示例

base64.encode("abcd") 函数返回 YWJjZA==

base64.decode()

base64.decode 函数将 base64 编码的字符串作为参数并返回解码的字符串。

示例

base64.decode("YWJjZA==") 函数返回 abcd

存在 ()

exists() 函数接受任何类型的参数并返回布尔值。如果输入有任何值,则返回值为 True。如果输入参数没有值(即没有值),返回值为 False

假设 $parameters.monitor 是一个可选参数。如果在创建配置包时为此参数提供值,则存在 ($parameters.monitor) 函数返回 True

否则,它会返回 False

筛选器 ()

filter() 函数有两个参数。

参数 1:接收一个参数并返回布尔值的 substitution 函数。

参数 2:列表。

传递给第一个参数中的替代函数时, 该函数返回每个元素计算结果为 True 的原始列表的一个子集。

示例

假定按如下所示定义了 substitution 函数。

substitutions:

x(a): $a != 81

如果输入值不等于 81,此函数返回 True。否则,它会返回 False

假设 $parameters.ports[81, 80, 81, 89]

filter($substitutions.x, $parameters.ports) 通过从列表中删除 81 的所有实例返回 [80, 89]

如果-然后-否则 ()

函数 if-then-else() 需要三个参数。

参数 1:布尔表达式

参数 2:任何表达式

参数 3:任何表达式(可选)

如果参数 1 中的表达式的计算结果为 True,则函数返回作为参数 2 提供的表达式的值。

否则,如果提供了参数 3,该函数返回参数 3 中的表达式的值。

如果未提供参数 3,则函数返回 no

示例 1

如果 $parameters.servicetype 有值 HTTP,则 if-then-else($parameters.servicetype == HTTP, 80, 443) 函数返回 80。否则,函数返回 443

示例 2

如果 $parameters.servicetype 有值 HTTPif-then-else($parameters.servicetype == HTTP, $parameters.hport, $parameters.sport) 函数返回 $parameters.hport 的值。

否则,函数返回 $parameters.sport 的值。

示例 3

如果 $parameters.servicetype 有值 HTTP,则 if-then-else($parameters.servicetype == HTTP, 80) 返回 80

否则,该函数不返回任何值。

连接 ()

join() 函数有两个参数:

参数 1:数字、tcp-ports、字符串或 IP 地址列表

参数 2:分隔符字符串(可选)

此函数将作为参数 1 提供的列表中的元素连接到一个字符串中,其中每个元素由作为参数 2 提供的分隔符字符串分隔。如果未提供参数 2,则列表中的元素将作为一个字符串连接。

示例

  • $parameters.ports[81, 82, 83]

    • 使用分隔符参数:

      join($parameters.ports, '-') 函数返回 81-82-83

    • 没有分隔符参数:

      join($parameters.ports) 函数返回 818283

split()

split() 函数根据指定的分隔符将输入字符串拆分为多个列表。如果未指定或空白 ('') 分隔符,则此函数将空格视为分隔符并将字符串拆分为列表。

示例:

  • split('Example_string_split', 's') 函数返回 ['Example_','tring_','plit']

  • split('Example string split') 函数返回 ['Example','string','split']

  • split('Example string split', '') 函数返回 ['Example','string','split']

  • split('Example string') 函数返回 ['Example','string']

    此函数将连续空格视为一个空间。

地图 ()

map() 函数需要两个参数;

参数 1:任何函数

参数 2:元素列表。

该函数返回一个列表,其中列表中的每个元素都是将 map() 函数(参数 1)应用于参数二中的相应元素的结果。

参数 1 中允许的函数:

  • 采用一个参数的内置函数:

    base64.encode, base64.decode, bin, bool, exists, hex, int, ip, len, lower, upper, oct, quotewrap, str, trim, upper, url.encode, url.decode

  • 至少接收一个参数的 substitution 函数。

示例

假设 $parameters.nums 为 [81, 82, 83]

  • 使用内置函数 str 的 map

    map(str, $parameters.nums) 函数返回 ["81", "82", "83"]

    map 函数的结果是字符串列表,其中的每个元素是对输入列表 ($parameters.nums) 中的对应元素应用 str 函数计算所得的字符串。

  • 使用 substitution 函数的 map

    • substitutions:

      add-10(port): $port + 10

    • 表达式:

      map($substitutions.add-10, $parameters.nums) 函数返回数字列表:[ 91, 92, 93 ]

这个 map 函数的结果是一个数字列表,每个元素都是通过对输入列表 ($parameters.nums) 中的相应元素应用替代函数 $substitutions.add-10 来计算的。

报价包装 ()

quotewrap() 函数接受一个字符串作为参数,并在输入值之前和之后添加双引号字符后返回一个字符串。

示例

quotewrap("ADM") 函数返回 "mas"

替换 ()

replace() 函数有三个参数:

参数 1:字符串

参数 2:字符串或列表

参数 3:字符串(可选)

该函数将参数一中出现的所有参数二替换为参数三。

如果未提供参数 3,则将从参数 1 中删除所有出现的参数 2(换句话说,用空字符串替换)。

将一个子字符串替换为另一个字符串:

  • replace('abcdef', 'def', 'xyz') 函数返回 abcxyz

    所有出现的 def 都将替换为 xyz

  • replace('abcdefabc', 'def') 返回 abcabc

    由于没有第三个参数, def 将从结果字符串中删除。

指定要在字符串中替换的字符列表。

$parameters.spl_chars = ['@', '#', '!', '%']

此列表包含必须在输入字符串中替换的值。

replace('An#example@to%replace!characters', $parameters.spl_chars, '_') 函数返回 An_example_to_replace_characters

输出字符串具有下划线 (_) 而不是 $parameters.spl_chars 列表中指定的字符。

修剪 ()

trim() 函数返回一个字符串,其中将从输入字符串中删除前导和尾随空格。

示例

trim(' abc ') 函数返回 abc

截断 ()

truncate() 函数有两个参数:

参数 1:字符串

参数 2:数字

该函数返回参数一中的输入字符串截断为参数二中指定的长度的字符串。

示例

truncate('Citrix ADM', 6) 返回 Citrix

distinct()

distinct() 函数从列表输入中提取唯一项目。

示例: 如果 $parameters.input_list['ADM', 'ADC', 'VPX', 'ADC', 'ADM', 'CPX'],则 distinct($parameters.input_list) 函数返回 ['ADM', 'ADC', 'VPX', 'CPX']

url.encode()

url.encode() 函数返回一个字符串,其中根据 RFC 3986 使用 ASCII 字符集转换字符串。

示例

url.encode("a/b/c") 函数返回 a%2Fb%2Fc

url.decode()

url.decode() 函数返回一个字符串,其中 URL 编码的参数根据 RFC 3986 解码为常规字符串。

示例

url.decode("a%2Fb%2Fc") 函数返回 a/b/c

is-ipv4()

is-ipv4() 函数将 IP 地址作为参数,如果 IP 地址为 IPv4 格式,则返回布尔值 True

is-ipv4(10.10.10.10) 函数返回 True

is-ipv6()

is-ipv6() 函数将 IP 地址作为参数, True 如果 IP 地址为 IPv6 格式,则返回布尔值。

is-ipv6(2001:DB8::) 函数返回 True

startswith()

startswith() 函数确定字符串是否以给定前缀开头。此函数需要两个强制字符串参数。

startswith(str, sub_str)

当字符串 (str) 以子字符串 (sub_str) 开头时,此函数返回 True

示例

  • startswith('Citrix', 'Ci') 函数返回 True
  • startswith('Citrix', 'iC') 函数返回 False
  • startswith('Citrix', 'Ab') 函数返回 False

endswith()

endswith() 函数确定字符串是否以给定后缀结尾。此函数需要两个强制字符串参数。

endswith(str, sub_str)

当字符串 (str) 以子字符串 (sub_str) 结尾时,此函数返回 True

示例

  • endswith('Citrix', 'ix') 函数返回 True
  • endswith('Citrix', 'Ix') 函数返回 False
  • endswith('Citrix', 'ab') 函数返回 False

contains()

contains() 函数确定字符串是否包含给定的子字符串。此函数需要两个强制字符串参数。

contains(str, sub_str)

True 当子字符串 (sub_str) 包含在字符串 () 内的任何位置时,此函数返回。str

示例:

  • contains('Citrix', 'tri') 函数返回 True
  • contains('Citrix', 'Ci') 函数返回 True
  • contains('Citrix', 'ti') 函数返回 False

substring()

使用 substring() 函数从字符串中提取子字符串。

substring(str, start_index, end_index)

此函数需要两个强制参数和一个可选的整数参数。

  • str (强制性)
  • start_index (强制性)
  • end_index (可选)

此函数从指定索引位置之间的字符串 (str) 返回子字符串。如果不指定结束索引位置,则函数将从起始索引提取子字符串到字符串末尾。

注意:指定

end_index,子字符串将排除 end_index 位置的字符。

示例:

  • substring('Citrix', 2) 函数返回 trix

  • substring('Citrix', 10) 函数返回 (")

    在此示例中,函数返回一个空字符串,因为它的 start_index 位置无效。

  • substring('Citrix', 2, 4) 函数返回 tr

    在此示例中,函数提取介于 2 到 4 个索引位置之间的字符。

  • substring('Citrix', -3) 函数返回 rix

    如果要提取字符串末尾的字符,请为 start_index 参数指定负值。

    在此示例中,函数提取包含字符串中最后三个字符的子字符串。