本节将列出 NSX Advanced Load Balancer 上可用的 L4 DataScript 函数。
字符串 |
描述 |
---|---|
从套接字缓冲区中读取负载。 |
|
收集 num_bytes,然后再将负载置于 DataScript。 |
|
将传递的消息记录到连接日志 |
|
关闭当前 TCP/UDP 连接 |
|
返回客户端的源端口。 |
|
返回客户端的 IP 地址。 |
|
将请求负载均衡到提供的可选池或连接到虚拟服务的池。 |
|
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 将显示错误。 |
事件 |
|
参数 |
字节数 |
返回 |
在 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 可用。 |
事件 |
|
参数 |
字节数 |
返回 |
当前缓冲的字节数 |
示例 |
Buffered = avi.l4.collect(1000) Payload = avi.l4.read(200) |
avi.vs.log
函数 |
avi.vs.log() |
描述 |
将传递的消息记录到连接日志。这将在连接日志 API 中显示为 ds_log。 可记录的最大字符串长度为 256。 可以多次调用此 API,从而导致串联消息。 只有在内存紧张期间,才不会串联消息。 默认情况下,所有日志都是非重要日志,但可以通过传递预设值“avi.SIG_ENABLE”作为最后一个参数来升级。 |
事件 |
|
参数 |
接受任意数量的参数。日志可以包含字符串、数字、布尔和 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() |
描述 |
返回客户端的源端口。 |
事件 |
|
参数 |
无 |
返回 |
包含客户端源端口的字符串 |
示例 |
if avi.vs.client_port() == “60000" then avi.vs.close_conn() end |
avi.vs.client_ip
函数 |
avi.vs.client_ip() |
描述 |
返回客户端的 IP 地址。 |
事件 |
|
参数 |
无 |
返回 |
包含客户端的源 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 之间进行镜像。 |
事件 |
|
参数 |
如果未指定可选的 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 将从指定键的数据存储中移除指定的键/值对。 |
事件 |
|
参数 |
如果未指定可选的 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 将查找键并返回相应的值。此键值存储对于每个虚拟服务而言都是唯一的,并在托管虚拟服务的所有服务引擎之间进行镜像。 |
事件 |
|
参数 |
如果未指定可选的 table_name,则将在虚拟服务的默认表中查找键。 指定后,将搜索自定义表。键用于查找值。可选的 如果未指定,则使用默认值 300 秒。这意味着,默认情况下,查找键的值将使键的生命周期再延长 300 秒。 要在不影响过期的情况下查找键,请将 |
返回 |
返回查找的字符串的值。如果字符串无效,则返回的值为 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] ) |
描述 |
刷新键/值存储中键条目的生命周期。 |
事件 |
|
参数 |
除非通过可选的表名称指定其他表名称,否则将查找默认虚拟服务表中的键。键用于搜索所需的表条目。可选的 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) |
描述 |
确定服务器侦听指定端口的状态 |
事件 |
|
参数 |
所有三个参数字段均为必填字段。
|
返回 |
返回值 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 ) |
描述 |
为当前请求选择池或池中的特定服务器和端口。 |
事件 |
|
参数 |
|
注意事项 |
可以明确调用也可以根据 Lua 表达式动态确定池名称、服务器名称或 IP 以及服务器端口。如果池名称、服务器或服务器端口不存在或无法由虚拟服务引用,则会生成错误。 |
返回 |
不返回任何值 |
示例 |
将请求转发到显式目标。 avi.pool.select("radius",server, 1812) end |
avi.pool.get_server_info
函数 |
avi.pool.get_server_info() |
描述 |
返回此请求或响应的服务器的 IP 地址和端口 |
事件 |
|
参数 |
无 |
返回 |
服务器的 IP 地址(字符串)及其端口号 |
示例 |
ip, port = avi.pool.get_server_info() |
avi.pool.get_server_ip
函数 |
avi.pool.get_server_ip() |
描述 |
返回此请求或响应的服务器的 IP 地址 |
事件 |
|
参数 |
无 |
返回 |
服务器的 IP 地址(字符串) |
示例 |
ip = avi.pool.get_server_ip() |
avi.poolgroup.select
函数 |
avi.poolgroup.select( poolgroup) |
描述 |
为当前请求选择一个池组。如果 HTTP 请求策略还配置了用于选择池的切换操作,则选择不会生效。HTTP 请求策略的切换操作优先于 DataScript 的池组选择。 |
事件 |
|
参数 |
无 |
返回 |
服务器的 IP 地址(字符串) |
示例 |
ip = avi.pool.get_server_ip() |