Application Delivery Management

内置函数

样本中的表达式可以利用内置函数。

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

str($parameters.order)

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

int($parameters.priority)

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

str()

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

允许的参数类型:

  • string
  • number
  • TCP 端口
  • 布尔值
  • IP 地址

示例

  • “set-“ + str(10) 返回 “set-10”
  • str(10) 返回 “10”
  • str(1.1.1.1) 返回 “1.1.1.1”
  • str (T rue) 返回“T 规则”
  • str(mas) 返回 “mas”

int()

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

示例

  • int(“10”) 返回 10
  • int(10) 返回 10

bool()

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

否则返回 true。

示例

  • bool(true) 返回 “true”
  • bool(false) 返回 “false”
  • bool($parameters.a) 返回 false,前提为
  • $parameters.a 为 false、空或不存在。

len()

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

示例 1

如果按以下所示定义 substitution:

items: [“123”, “abc”, “xyz”]

len($substitutions.items) 返回 3

示例 2

len(“netscaler mas”) 返回 13

示例 3

如果为 $parameters.vip 分配了值 [‘1.1.1.1’, ‘1.1.1.2’, ‘1.1.1.3’],则 len($parameters.vips) 将返回 3

min()

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

包含一系列编号/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 端口列表,其值为:[80、81、8080]。

    min($parameters.ports) 返回 80。

max()

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

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

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

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

  • 支持 $parameters.ports 是 TCP 端口列表且值为:[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(“MAS”) 返回 “mas”

upper()

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

示例

upper(“netscaler_mas”) 返回 “NET SCALER_MAS”

sum()

sum () 函数将数字列表或 tcpport 作为参数,并返回列表中数字的总和。

示例 1

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

  • 数字列表:

    • 11
    • 22
    • 55

    总和(美元替换,数字列表)返回 88

示例 2

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

pow()

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

示例

pow(3,2) 返回 9

ip()

ip 函数接收字符串或 IP 地址作为参数,并基于输入值返回 IP 地址。

示例

  • ip(“2.1.1.1”) 返回 “2.1.1.1”
  • ip(3.1.1.1) 返回 “3.1.1.1”

base64.encode()

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

示例

base64.encode(“abcd”) 返回 “YWJjZA==”

base64.decode()

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

示例

base64.decode(“YWJjZA==”) 返回 “abcd”

存在 ()

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

假定 $parameters.monitor 是一个可选参数。如果您在创建配置包时为此参数提供值,则 exists($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,则该函数不返回值。

示例 1

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

示例 2

如果 $parameters.servicetype 的值为 HTTP,则 if-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 端口、字符串或 IP 地址列表

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

该函数将作为参数一提供的列表的元素连接为一个字符串,其中的每个元素以作为参数二提供的分隔符字符串分隔开。如果未提供参数二,则列表中的元素连接在一起作为一个字符串。

示例

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

    • 使用分隔符参数:

      join ($parameters.ports, ‘-‘) 返回“81-82-83”

    • 没有分隔符参数:

      加入 ($parameters.ports) 返回“818283”

地图 ()

map 函数接收两个参数;

参数 1:任何函数

参数 2:元素列表。

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

参数 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

    • 替换:

      add-10(port): $port + 10

    • 表达式:

      map($substitutions.add-10,

      $parameters.nums) 返回数字列表: [91、92、93]

此 map 函数的结果是数字列表,每个元素是对输入列表 ($parameters.nums) 中的对应元素应用 substitution 函数 $substitutions.add-10 计算所得。

报价包装 ()

quotewrap 函数接收字符串作为参数,并返回在输入值前后添加了双引号字符的字符串。

示例

quotewrap (“mas”) 返回“” mas “”

替换 ()

replace 函数接收三个参数:

参数 1:字符串

参数 2:字符串

参数 3:字符串(可选)

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

如果未提供参数三,则从参数一中删除出现的所有参数二(也就是说,替换为空字符串)。

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

  • replace(‘abcdef’, ‘def’, ‘xyz’) 返回 “abcxyz”。
    • 出现的所有 “def” 替换为 “xyz”。
  • replace(‘abcdefabc’, ‘def’) 返回 “abcabc”。
    • 由于没有第三个参数,因此从结果字符串中删除了 “def”。

修剪 ()

trim 返回从输入字符串中去掉前导空格和尾随空格的字符串。

示例

trim (‘abc’) 返回“abc”

截断 ()

truncate 函数接收两个参数:

参数 1:字符串

参数 2:数字

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

示例

truncate(‘netscaler mas’, 9) 返回 “netscaler”

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 格式,则返回“真”。

is-ipv4 (10.10.10.10) 返回“真”

is-ipv6 ()

is-ipv6 () 函数将 IP 地址作为参数,如果 IP 地址为 IPv6 格式,则返回“真”。

is-ipv6 (2001:DB8::) 返回“真”