策略扩展

策略扩展功能使您可以为内置策略类型编写扩展函数。这些扩展可以在策略表达式中使用,就像内置函数一样。它们是在评估相应的策略表达式时执行的。此功能可用于:

  • 向现有策略添加自定义功能。
  • 为复杂的客户需求实施逻辑结构。

策略扩展功能使用户能够为内置策略类型编写扩展函数,从而解决了这些限制。然后可以在策略表达式中使用这些扩展,就像内置函数一样。它们是在评估相应的策略表达式时执行的。

下表列出了编写扩展时可以使用的策略类型及其关联映射。

策略类型 映射的策略类型 输出
TEXT_T NSTEXT 字符串
BOOL_AT NSBOOL 布尔值
NUM_AT NSNUM 数字(双精度浮点数)
DOUBLE_AT NSDOUBLE 数字(双精度浮点数)

使用策略扩展的先决条件

导入的函数必须符合现有的策略标准。因此:

  • 函数名称必须以字母开头,可以包含数字或下划线。
  • NetScaler 策略将函数名称视为不区分大小写。
  • 即使扩展语言返回多个值,该函数也必须返回单个值。
  • 不支持参数数量可变的函数。

延期策略是如何运作的

NetScaler 设备上的现有策略使用解释器来评估导入到策略扩展文件中的功能。当用户在策略扩展文件中导入新函数时:

  1. 扩展文件已通过语法和其他条件的验证。
  2. 如果验证失败,则将错误报告给用户。
  3. 如果验证成功,则扩展文件将导入到 NetScaler 设备,其内容可用于策略表达式,就像任何内置策略函数一样
    1. 如果策略表达式评估在运行时返回错误,则将其报告为 undef 事件,相关的错误计数器将递增。

      注意: 如果发生策略 undef 事件并且策略规则包含一个或多个策略扩展函数,则 show ns extension <name> 命令将在应用于这些策略扩展时显示 undef 命中次数。如果扩展函数中止,则中止计数器值将增加。

    2. 如果策略表达式求值成功,则表达式评估将继续,直到对整个表达式进行求值,或者直到表达式因错误而中止。

如果扩展函数运行时间过长,则会中止,与该扩展函数相关的错误计数器会增加。扩展功能采用沙盒化处理,可防止:

  • NetScaler 设备上的 CPU 使用率过高。
  • NetScaler 设备上的内存使用量过大。
  • 使用有害的内置库或第三方库或二进制文件。
  • 长时间运行的脚本可能会导致 NetScaler 设备重新启动。
策略扩展