本节将列出 NSX Advanced Load Balancer 上可用的 L4 DataScript 函数。

字符串

描述

avi.l4.read()

从套接字缓冲区中读取负载。

avi.l4.collect ()

收集 num_bytes,然后再将负载置于 DataScript。

avi.vs.log()

将传递的消息记录到连接日志

avi.vs.close.conn()

关闭当前 TCP/UDP 连接

avi.vs.client_port()

返回客户端的源端口。

avi.vs.client_ip

返回客户端的 IP 地址。

avi.vs.persist()

将请求负载均衡到提供的可选池或连接到虚拟服务的池。

avi.pool.get_server_info()

avi.pool.get_server_ip()

avi.poolgroup.select

为当前请求选择一个池组。

注:

IP 组和字符串组不支持上述 API。但是,池组支持 DataScript。

avi.l4.read

函数

avi.l4.read()

描述

已将函数 avi.vs.read 重命名为 avi.l4.read。它将从套接字缓冲区中读取负载,并返回字节流。

必须使用此 API 才能读取负载并对其进行操作。

可读取的字节数不能超过 65000。此 API 可以与 avi.l4.collect 结合使用。如果套接字中没有足够的字节,API 将显示错误。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

字节数

返回

在 L4 (TCP/UDP) 之后以字节流形式返回负载

示例

payload = avi.l4.read() - Reads all bytes from socket buffer
payload = avi.l4.read(10) - Reads 10 bytes from socket buffer
payload = avi.l4.read(0) - Reads all bytes from socket buffer

avi.l4.collect (num_bytes)

函数

avi.l4.collect(num_bytes)

描述

收集 num_bytes,然后再将负载置于 DataScript。

如果在 TCP/UDP 空闲超时之前未收集 num_bytes,则空闲定时器将关闭连接。

此 API/DataScript 将一直保持放弃状态,直到 num_bytes 可用。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

字节数

返回

当前缓冲的字节数

示例

Buffered = avi.l4.collect(1000)  
Payload = avi.l4.read(200)

avi.vs.log

函数

avi.vs.log()

描述

将传递的消息记录到连接日志。这将在连接日志 API 中显示为 ds_log

可记录的最大字符串长度为 256。

可以多次调用此 API,从而导致串联消息。

只有在内存紧张期间,才不会串联消息。

默认情况下,所有日志都是非重要日志,但可以通过传递预设值“avi.SIG_ENABLE”作为最后一个参数来升级。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

接受任意数量的参数。日志可以包含字符串、数字、布尔和 nil 值的任意组合。

返回

无返回值

示例 1

avi.vs.log("hello ", num, " you!")

输出:hello 2 you!

这是作为非重要日志生成的输出。

示例 2

avi.vs.log("hello ", num, " you!", avi.SIG_ENABLE)

输出:"hello 2 you!"

这是作为重要日志生成的输出。

avi.vs.client_port

函数

avi.vs.client_port()

描述

返回客户端的源端口。

事件

VS_DATASCRIPT_EVT_L4_REQUEST

参数

返回

包含客户端源端口的字符串

示例

if avi.vs.client_port() == “60000" then
   avi.vs.close_conn()
end

avi.vs.client_ip

函数

avi.vs.client_ip()

描述

返回客户端的 IP 地址。

事件

VS_DATASCRIPT_EVT_L4_REQUEST

参数

返回

包含客户端的源 IP 的字符串。

示例

if avi.vs.client_ip() == "10.1.1.1" then
   avi.vs.close_conn()
end

avi.vs.table_insert

函数

avi.vs.table_insert( [table_name,] key, value [, lifetime] )

描述

表 API 用于存储和检索自定义数据。avi.vs.table_insert API 将值存储在密键的键值存储中。此键值存储对于每个虚拟服务而言都是唯一的,并在托管虚拟服务的所有 SE 之间进行镜像。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

如果未指定可选的 table_name,键值对将存储在虚拟服务的默认表中。指定后,将使用具有自定义名称的新表。

具有多个表的虚拟服务可以具有相同的键名称,但每个表的值不同。键用于查找值。值是要存储的自定义数据。可选的 lifetime 标记必须是正整数,表示此记录应存在的时间长度(以秒为单位)。

当时间耗尽时,键和值将被静默丢弃。如果未指定 lifetime 标记,则将使用默认值 300 秒。支持的最短生命周期为 300 秒。

返回

如果插入成功,则返回布尔值 true,如果插入失败,则返回 false。

示例

if radius_username == “myuser” then
   avi.vs.table_insert(radius_username, “10.2.3.4:1812”, 3600)
end
注:

插入已存在的键将重置键的生命周期。与键关联的值将保持相同,并且不会被覆盖。

avi.vs.table_remove

函数

avi.vs.table_remove( [table_name,] key)

描述

表 API 用于存储和检索自定义数据。

avi.vs.table_remove API 将从指定键的数据存储中移除指定的键/值对。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

如果未指定可选的 table_name,键值对将存储在虚拟服务的默认表中。指定后,将搜索自定义表。键用于搜索要删除的表条目。

返回

不返回任何值。

示例

if radius_username == “myuser” then
   avi.vs.table_remove(radius_username)
end

avi.vs.table_lookup

函数

avi.vs.table_lookup( [table_name,] key [, lifetime_exten] )

描述

表 API 用于存储和检索自定义数据。

avi.vs.table_lookup API 将查找键并返回相应的值。此键值存储对于每个虚拟服务而言都是唯一的,并在托管虚拟服务的所有服务引擎之间进行镜像。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

如果未指定可选的 table_name,则将在虚拟服务的默认表中查找键。

指定后,将搜索自定义表。键用于查找值。可选的 lifetime_exten 标记必须是正整数,表示应添加到键的当前 lifetime 参数的时间长度(以秒为单位)。

如果未指定,则使用默认值 300 秒。这意味着,默认情况下,查找键的值将使键的生命周期再延长 300 秒。

要在不影响过期的情况下查找键,请将 lifetime_exten 标记设置为 0

返回

返回查找的字符串的值。如果字符串无效,则返回的值为 nil。

示例

radius_username = “myuser”
if avi.vs.table_lookup(radius_username) then
   avi.vs.log(“Radius username ”..radius_username)
end

avi.vs.table_refresh

函数

avi.vs.table_refresh( [table_name,] key [, lifetime_exten] )

描述

刷新键/值存储中键条目的生命周期。

事件

VS_DATASCRIPT_EVT_L4_REQUESTVS_DATASCRIPT_EVT_L4_RESPONSE

参数

除非通过可选的表名称指定其他表名称,否则将查找默认虚拟服务表中的键。键用于搜索所需的表条目。可选的 lifetime_exten 是正整数,是用于在键/值存储中延长条目生命周期的值(以秒为单位)。如果未指定,将使用默认值 300 秒来延长条目的生命周期。生命周期现在将设置为 lifetime_exten。

返回

如果刷新成功,则返回布尔值 true,如果刷新失败,则返回 false。

示例

if avi.vs.client_ip() == "10.1.1.1" then
   avi.vs.table_refresh(“my_table”,”my_key”, 3600)
end

avi.pool.get_server_status

函数

avi.pool.get_server_status(pool, server, port)

描述

确定服务器侦听指定端口的状态

事件

VS_DATASCRIPT_EVT_L4_REQUEST

参数

所有三个参数字段均为必填字段。

  1. pool 可以是特定的池名称或求值结果为有效池名称的表达式。

  2. server 标记是服务器的 IPv4 地址,用引号括起。port 标记会将连接转发到服务器的特定服务端口。

  3. port 必须是介于 0 与 65536 之间的数字或求值结果为有效端口号的表达式。

返回

返回值 0 表示服务器已关闭。返回值 1 表示服务器已启动。

示例

if avi.pool.get_server_status("tcp-test-pool", "10.52.44.50", "80") == 0 then
   avi.vs.log(“Server is DOWN”)
end

avi.pool.select

函数

avi.pool.select( pool, server, port )

描述

为当前请求选择池或池中的特定服务器和端口。

事件

VS_DATASCRIPT_EVT_L4_REQUEST

参数

  1. pool 是特定的池名称或求值结果为有效池名称的表达式。

  2. server 参数(字符串)是服务器的 IPv4 地址,用引号括起。

  3. port 参数(整数)会将连接转发到服务器的特定服务端口。port 必须是介于 0 与 65536 之间的数字或求值结果为有效端口号的表达式。

注意事项

可以明确调用也可以根据 Lua 表达式动态确定池名称、服务器名称或 IP 以及服务器端口。如果池名称、服务器或服务器端口不存在或无法由虚拟服务引用,则会生成错误。

返回

不返回任何值

示例

将请求转发到显式目标。

avi.pool.select("radius",server, 1812)
end

avi.pool.get_server_info

函数

avi.pool.get_server_info()

描述

返回此请求或响应的服务器的 IP 地址和端口

事件

  • VS_DATASCRIPT_EVT_L4_REQUEST

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    如果在做出 LB 决策之前调用了请求中的 get_server_info 调用,则调用可能会失败。

参数

返回

服务器的 IP 地址(字符串)及其端口号

示例

ip, port = avi.pool.get_server_info()

avi.pool.get_server_ip

函数

avi.pool.get_server_ip()

描述

返回此请求或响应的服务器的 IP 地址

事件

  • VS_DATASCRIPT_EVT_L4_REQUEST

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    如果在做出 LB 决策之前调用了请求中的 get_server_ip 调用,则调用可能会失败。

参数

返回

服务器的 IP 地址(字符串)

示例

ip = avi.pool.get_server_ip()

avi.poolgroup.select

函数

avi.poolgroup.select( poolgroup)

描述

为当前请求选择一个池组。如果 HTTP 请求策略还配置了用于选择池的切换操作,则选择不会生效。HTTP 请求策略的切换操作优先于 DataScript 的池组选择。

事件

  • HTTP_REQ

  • VS_DATASCRIPT_EVT_L4_RESPONSE

    注:

    如果在做出 LB 决策之前调用了请求中的 get_server_ip 调用,则调用可能会失败。

参数

返回

服务器的 IP 地址(字符串)

示例

ip = avi.pool.get_server_ip()