DataScript 中提供了以下组函数:

函数

描述

avi.ipgroup.contains( ipgroup, ip-address )

将 IP 地址与 IP 组中的 IP 进行比较。

avi.stringgroup.beginswith( stringgroup, string )

将字符串与字符串组中的字符串列表进行比较。

avi.stringgroup.contains( stringgroup, string )

将字符串与字符串组中的字符串列表进行比较。

avi.stringgroup.equals( stringgroup, string )

将字符串与字符串组中的字符串列表进行比较。

avi.stringgroup.endswith( stringgroup, string )

将字符串与字符串组中的字符串列表进行比较。

avi.ipgroup.contains

函数

avi.ipgroup.contains ( ipgroup, ipaddress )

描述

将 IPv4 或 IPv6 地址与 IP 组中的 IP 地址列表进行比较。IP 组可以是 IP 地址、网络或国家/地区的列表。

有任何匹配项时,比较将返回 true

例如,如果 IP 组包含 10.0.0.0/8、10.10.0.0/16 和 10.10.10.10 条目,并且评估的 IP 地址为 10.10.10.10,则函数成功匹配。

事件

HTTP_REQ。

HTTP_RESP。

参数

ipgroup 是要与之进行比较的 IP 组的名称。在使用 GUI 或 API 创建 DataScript 时,必须将 IP 组映射到 DataScript。

ipaddress 是一个以点四分法 (1.2.3.4) 表示的 IP 地址。

IP 组 Datascript 接受 IP 组名称作为变量。例如,

ipgrp_name = “IPGRP1”
avi.ipgroup.contains(ipgrp_name, ip_address)

返回

如果找到了匹配项,match 将返回 true,如果未找到匹配项,则返回 false

相关

avi.stringgroup.contains() - 将自定义字符串与字符串组匹配。

示例

放弃与 IP 黑名单匹配的客户端。

var = avi.vs.client_ip()
if avi.ipgroup.contains("IP-Group", var) then
   avi.vs.log("Blacklisted IP" .. var.. "attempting to log in")
   avi.http.close_conn()
end

avi.stringgroup.beginswith

函数

avi.stringgroup.beginswith( stringgroup, string )

描述

字符串组是简单字符串数据列表。此函数将评估自定义字符串,以查看其是否以匹配的字符串组中的条目开头。如果字符串组已配置为键值对映射,则将比较该字符串以查看它是否与键匹配,并从键的值字段中返回字符串。

在找到最短匹配项时,字符串比较将返回 true。例如,如果字符串组具有 a、ab、abc 条目,并且评估的字符串为“abc”,则函数将匹配“a”,因为它是最短的有效匹配项。

事件

HTTP_REQ。

HTTP_RESP。

参数

stringgroup 是要与之进行比较的字符串组的名称。在 GUI 或 API 的 DataScript 创建中,必须将字符串组映射到 DataScript。

string 是要在字符串组中搜索的自定义数据。

CASE 用于执行区分大小写的检查。默认情况下,执行比较时忽略大小写。要执行区分大小写的匹配,请使用以下语法:

avi.stringgroup.beginswith_CASE( "stringgroup", "string")

字符串组 Datascript 也接受字符串组名称作为变量。

示例:

client = avi.http.get_header(“SessionID”)strgrp_name = “StringGroup”val, match = avi.stringgroup.beginswith(strgrp_name, client)

返回

此函数可以返回一个或两个变量,具体取决于所引用字符串组的类型。

value:如果为键值对配置了字符串组,则会将 string 参数与键进行比较,并在 value 变量中返回值。如果没有为键值对配置字符串组,则 value 变量将为 nil。

如果找到了匹配项,match 将返回 true,如果未找到匹配项,则返回 false。

相关

avi.ipgroup.contains():将 IP 地址与 IP 组匹配。

avi.stringgroup.contains():如果字符串组条目包含另一个字符串的一部分,则匹配。

avi.stringgroup.endswith():如果字符串组条目以另一个字符串的一部分结尾,则匹配。

avi.stringgroup.equals():如果字符串组条目等于另一个字符串,则匹配。

示例

以下示例必须与配置并启用了键值对的字符串组一起使用。

client = avi.http.get_header("SessionID")
val, match = avi.stringgroup.beginswith("StringGroup", client)
if match then
   avi.vs.log("User " .. val .. "authorized.")
else
   -- Deny users not in the whitelist
   avi.http.response(403)
end
字符串组 Datascript 也接受字符串组名称作为变量。

示例:

StringGroup="abc" val, match = avi.stringgroup.beginswith("StringGroup", client)

avi.stringgroup.contains( stringgroup, string )

函数

avi.stringgroup.contains ( stringgroup, string )

描述

字符串组是简单字符串数据列表。此函数将评估自定义字符串,以查看该字符串是否存在于字符串组的条目中。如果字符串组已配置为键值对映射,则将比较该字符串以查看它是否与键匹配,并从键的值字段中返回字符串。

字符串比较将在找到最短匹配项时返回 true。如果字符串组具有 a、ab、abc 的条目,并且评估的字符串为“abcdef”,则函数将匹配“a”,因为它是最短的有效匹配项。

事件

HTTP_REQ。

HTTP_RESP。

参数

stringgroup 是要与之进行比较的字符串组的名称。在 GUI 或 API 的 DataScript 创建中,必须将字符串组映射到 DataScript。

string 是要在字符串组中搜索的自定义数据。

CASE 用于执行区分大小写的检查。默认情况下,执行比较时忽略大小写。要执行区分大小写,请使用以下语法:avi.stringgroup.contains_CASE( "stringgroup", "string")

字符串组 Datascript 也接受字符串组名称作为变量。

示例:

strgrp_name = “StringGroup” val, match = avi.stringgroup.contains(strgrp_name, client)

返回

此函数可能会返回一个或两个变量,具体取决于所引用字符串组的类型。

value:如果为键值对配置了字符串组,则会将 string 参数与键进行比较,并在 value 变量中返回值。如果没有为键值对配置字符串组,则 value 变量将为 nil。

match:如果找到了匹配项,将返回 true,如果未找到匹配项,则返回 nil。

相关

avi.ipgroup.contains():将 IP 地址与 IP 组匹配。

avi.stringgroup.beginswith():如果字符串组条目以另一个字符串的一部分开头,则匹配。avi.stringgroup.endswith():如果字符串组条目以另一个字符串的一部分结尾,则匹配。avi.stringgroup.equals():如果字符串组条目等于另一个字符串,则匹配。

示例

以下示例必须与配置并启用了键值对的字符串组一起使用。

client = avi.http.get_header("Authorization")
val, match = avi.stringgroup.contains("StringGroup", client)
if match then
   avi.vs.log("User " .. val .. "authorized.")
else
   -- Deny users not in the whitelist
   avi.http.response(403)
end

avi.stringgroup.equals( stringgroup, string )

函数

avi.stringgroup.equals( stringgroup, string )

描述

字符串组是简单字符串数据列表。此函数将评估自定义字符串,以查看其是否与字符串组中的条目完全匹配。如果字符串组已配置为键值对映射,则将比较字符串以查看它是否与键匹配,并返回键的值字段。

事件

HTTP_REQ。

HTTP_RESP。

参数

stringgroup 是要与之进行比较的字符串组的名称。在 GUI 或 API 的 DataScript 创建中,必须将字符串组映射到 DataScript。

string 是要在字符串组中搜索的自定义数据。

CASE 用于执行区分大小写的检查。默认情况下,将执行不区分大小写的比较。对于区分大小写的匹配,请使用以下语法:

avi.stringgroup.endswith_CASE( "stringgroup", "string")

字符串组 DataScript 还接受字符串组名称作为 L7 DataScript 变量。

示例:

strgrp_name = “StringGroup” val, match = avi.stringgroup.equals(strgrp_name, avi.http.hostname())

返回

此函数始终返回两个变量。

value:如果为键值对配置了字符串组,则会将 string 参数与键进行比较,并在 value 变量中返回值。如果没有为键值对配置字符串组,则仍会返回 value 变量,但其值始终为 nil。

如果找到了匹配项,match 将返回 true,如果未找到匹配项,则返回 false

相关

avi.ipgroup.contains():将 IP 地址与 IP 组匹配。

avi.stringgroup.contains():如果字符串组条目包含另一个字符串的一部分,则匹配。

avi.stringgroup.beginswith():如果字符串组条目以另一个字符串的一部分开头,则匹配。

avi.stringgroup.endswith():如果字符串组条目以另一个字符串的一部分结尾,则匹配。

示例 1

在允许访问站点之前,以下示例将先检查 userID 是否位于已批准列表中。这是一种我们期望 val 始终返回 nil 的情况。

val, match = avi.stringgroup.equals("StringGroup", avi.http.get_userid())
if not match then    avi.http.redirect("https://login.site.com") end

示例 2

此示例通过将位置移动到路径开头,基于嵌入到主机标头中的位置重定向客户端。下表说明了存储在字符串组中的键值。在这种情况下,如果 match 为 trueval 将包含相应的值。

密钥

us.test.com

/us

eu.test.com

/eu

ap.test.com

/ap

sa.test.com

/sa

val, match = avi.stringgroup.equals("StringGroup", avi.http.hostname())
if match then    avi.http.redirect("https://www.test.com" .. val .. avi.http.get_url())
end
sa.test.com/path/index.htm?query=1 将被重定向到 www.test.com/sa/path/index.htm?query=1

avi.stringgroup.endswith( stringgroup, string )

函数

avi.stringgroup.endswith( stringgroup, string )

描述

字符串组是简单字符串数据列表。此函数将评估自定义字符串,以查看其是否以匹配的字符串组中的条目结尾。如果字符串组已配置为键值对映射,则将比较字符串以查看它是否与键匹配,并且将返回键的值字段。

字符串比较将在找到最短匹配项时返回 true。如果字符串组具有 a、ab、abc 的条目,并且评估的字符串为“xxxab”,则函数将匹配字符串“ab”,因为它是最短的有效匹配项。

事件

HTTP_REQ。

HTTP_RESP。

参数

stringgroup 是要与之进行比较的字符串组的名称。在 GUI 或 API 的 DataScript 创建中,必须将字符串组映射到 DataScript。

string 是要在字符串组中搜索的自定义数据。

CASE - 默认情况下,执行比较时不区分大小写。要在执行比较时区分大小写,请使用以下语法:avi.stringgroup.endswith_CASE( "stringgroup", "string") 从 Avi Vantage 20.1.1 开始,字符串组 Datascript 还接受字符串组名称作为变量。

例如,strgrp_name = “StringGroup” val, match = avi.stringgroup.endswith(strgrp_name, path)

返回

此函数可能会返回一个或两个变量,具体取决于所引用字符串组的类型。

value:如果为键值对配置了字符串组,则会将 string 参数与键进行比较,并在 value 变量中返回值。如果没有为键值对配置字符串组,则 value 变量将为 nil。

如果找到了匹配项,match 将返回 true,如果未找到匹配项,则返回 false。

相关

avi.ipgroup.contains():将 IP 地址与 IP 组匹配。

avi.stringgroup.contains():如果字符串组条目包含另一个字符串的一部分,则匹配。

avi.stringgroup.beginswith():如果字符串组条目以另一个字符串的一部分开头,则匹配。

avi.stringgroup.equals():如果字符串组条目等于另一个字符串,则匹配。

示例

以下示例将检查 URL 的路径是否以批准的类型(如 .html、.png 或 .css)结尾。将丢弃不在列表中的其他文件类型。此示例使用标准字符串列表,而不是键值对。

path = avi.http.get_path()
val, match = avi.stringgroup.endswith("StringGroup", path) 
if not match then    
avi.http.response(404) 
end