在 Junos OS 自动化脚本中使用扩展函数
Junos OS 提供了可用于提交、操作、事件和 SNMP 脚本的扩展功能,以便在运行 Junos OS 的设备上更轻松地完成脚本任务。以下各节概述了如何导入和使用不同脚本语言的扩展函数:
在 SLAX 和 XSLT 脚本中使用扩展函数
若要在 SLAX 和 XSLT 脚本中使用扩展函数,脚本必须在样式表声明中声明相应的命名空间 统一资源标识符 (URI)。Junos OS 扩展函数具有特定于运行 Junos OS 的设备的功能,在命名空间中使用关联的 URI http://xml.juniper.net/junos/commit-scripts/1.0定义。SLAX 扩展函数在具有关联 URI http://xml.libslax.org/slax的命名空间中定义。
SLAX 和 XSLT 脚本通常将 jcs or slax 前缀映射到其各自的 URI,以避免与标准 XSLT 函数和用户定义模板的名称冲突。然后,脚本使用适当的前缀限定扩展函数,该前缀在处理过程中扩展为其关联的 URI 引用。
例如,以下 SLAX 命名空间语句将 jcs 前缀映射到命名空间 URI,该 URI 定义自动化脚本中使用的 Junos OS 扩展函数:
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
以下 SLAX 命名空间语句将 slax 前缀映射到定义 SLAX 扩展函数的命名空间 URI:
ns slax = "http://xml.libslax.org/slax";
若要在 SLAX 或 XSLT 脚本中调用扩展函数,请包含任何必需的变量声明,根据需要使用 jcs:function-name() 或 slax:function-name() 调用该函数,并传递任何必需或可选参数。参数必须按函数定义指定的精确顺序传递到函数中。这与模板不同,模板中的参数按名称分配,可以按任何顺序显示。扩展函数的返回值必须始终分配给变量或指定为输出。
以下示例将 jcs 前缀映射到 URI http://xml.juniper.net/junos/commit-scripts/1.0标识的命名空间。然后,该脚本使用一个参数调用该 jcs:invoke() 函数。
XSLT 语法
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0”
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">
...
<xsl:variable name="result" select="jcs:invoke('get-software-information')"/>
...
</xsl: stylesheet>
SLAX 语法
version 1.2;
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
...
var $result = jcs:invoke('get-software-information');
...
以下示例将 slax 前缀映射到 URI http://xml.libslax.org/slax标识的命名空间。然后,该脚本使用一个字符串参数调用该 slax:get-input() 函数。
SLAX 语法
version 1.2;
ns slax = "http://xml.libslax.org/slax";
...
var $input = slax:get-input($prompt);
...
在 Python 脚本中使用扩展函数
导入 jcs 模块的 Python 自动化脚本可以使用受支持的 Junos OS 和 SLAX 扩展函数的 Python 版本。要确定 Python 脚本支持哪些扩展函数,请参阅 了解 Junos OS 自动化脚本中的扩展函数。
要在 Python 脚本中调用等效扩展函数,请首先包含 import jcs 语句和任何必需的变量声明。然后使用 调用 jcs.function_name()函数,并传递任何必需或可选参数。请注意,在 Python 脚本中,扩展函数名称必须使用下划线而不是连字符。例如:
Python 语法
import jcs
if __name__ == '__main__':
name = jcs.get_input("Enter name: ")
jcs.output(name)