SNMP 脚本所需的样板
Junos OS SNMP 脚本可以用可扩展样式表语言转换 (XSLT)、样式表替代语法 (SLAX) 或 Python 编写。SNMP 脚本必须包括该脚本语言所需的必要样板,用于基本脚本功能以及脚本中使用的任何可选功能(如 Junos OS 扩展函数和命名模板)。本主题提供可在 XSLT、SLAX 和 Python SNMP 脚本中使用的标准样板。
SNMP 脚本的 SLAX 样板
SLAX SNMP 脚本样板如下:
1 version 1.2;
2 ns junos = "http://xml.juniper.net/junos/*/junos";
3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
5 ns dyn = "http://exslt.org/dynamic";
6 ns snmp extension = "http://exslt.org/functions";
7 match / {
8 <snmp-script-results> {
9 var $snmp-action = snmp-script-input/snmp-action;
10 var $snmp-oid = snmp-script-input/snmp-oid;
<!-- ... insert your code here ... -->
11 <snmp-oid> $snmp-oid;
12 <snmp-type> $snmp-type;
13 <snmp-value> $snmp-value;
}
}
SLAX 和 XSLT SNMP 脚本基于 Junos XML 和 Junos XML 协议标记元素。与所有 XML 元素一样,尖括号将 Junos XML 或 Junos XML 协议标记元素的名称括在其开始和结束标记中。这是一个 XML 约定,括号是完整标记元素名称的必需部分。不要将它们与文档中用来表示 Junos OS CLI 命令字符串可选部分的尖括号混淆。
第 1 行将 SLAX 版本指定为 1.2。
1 version 1.2;
第 2 行到第 6 行列出了 SNMP 脚本中常用的所有命名空间映射。此示例中并未使用所有这些前缀。列出所有命名空间映射可防止在更高版本的脚本中使用这些映射时出现错误。通过这些命名空间映射,您可以在脚本中使用扩展函数和命名模板。 了解 Junos OS 自动化脚本中的扩展函数 和 了解 Junos OS 自动化脚本中的命名模板中讨论了这些扩展函数和命名模板。
第 5 行和第 6 行具有 EXSLT 命名空间映射。SNMP 扩展函数在命名空间中定义,具有关联的 URI http://exslt.org/functions。第 6 行使用 snmp EXSLT 函数命名空间注册扩展命名空间,允许您在 snmp SLAX 脚本中使用前缀来定义自定义函数。有关 EXSLT 命名空间的详细信息,请参阅 http://exslt.org/func/index.html。
2 ns junos = "http://xml.juniper.net/junos/*/junos"; 3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; 4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; 5 ns dyn = "http://exslt.org/dynamic"; 6 ns snmp extension = "http://exslt.org/functions";
第 7 行定义了一个未命名的模板 match /,表示配置层次结构的顶层。脚本中的所有 XML 路径语言 (XPath) 表达式都必须从配置层次结构中的顶级元素开始。这允许脚本访问所有可能的 Junos XML 和 Junos XML 协议远程过程调用 (RPC)。有关更多信息,请参见 XPath 概述。
7 match / {
match /在 tag 元素之后,<snmp-script-results>container 标记必须是顶级子标记,如第 8 行所示。此容器的值将返回给 OID 请求者。
8 <snmp-script-results> {
第 9 行和第 10 行根据可在代码中用于确定操作是 get 还是 get-next 的相应元素以及 OID 的值来定义变量。
9 var $snmp-action = snmp-script-input/snmp-action; 10 var $snmp-oid = snmp-script-input/snmp-oid;
在第 10 行和第 11 行之间,可以定义包含从模板中 match / 调用的 XSLT 模板的其他代码。
第 11 行到第 13 行定义 SNMP 脚本返回给 OID 请求者的值。的 <snmp-oid> 值取自 的 snmp-script-input/snmp-oid输入值。对于 SNMP 脚本功能,支持以下对象标识符类型 <snmp-type> :
Counter32Counter64Integer32Unsigned32Octet String
将 设置为 <snmp-value> 脚本的返回值。
11 <snmp-oid> $snmp-oid; 12 <snmp-type> $snmp-type; 13 <snmp-value> $snmp-value;
SNMP 脚本的 XSLT 样板
XSLT 样板是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:junos="http://xml.juniper.net/junos/*/junos"
xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"
xmlns:dyn="http://exslt.org/dynamic"
xmlns:snmp="http://exslt.org/functions"
version="1.0" extension-element-prefixes="snmp">
<xsl:template match="/">
<snmp-script-results>
<xsl:variable name="snmp-action" select="snmp-script-input/snmp-action"/>
<xsl:variable name="snmp-oid" select="snmp-script-input/snmp-oid"/>
<!-- Insert your code here -->
<snmp-oid>
<xsl:value-of select="$snmp-oid"/>
</snmp-oid>
<snmp-type>
<xsl:value-of select="$snmp-type"/>
</snmp-type>
<snmp-value>
<xsl:value-of select="$snmp-value"/>
</snmp-value>
</snmp-script-results>
</xsl:template>
</xsl:stylesheet>
SNMP 脚本的 Python 样板
Python SNMP 脚本没有必需的样板,但它们必须导入脚本中使用的任何对象。Python SNMP 脚本必须包含该 import jcs 语句,才能使用 get_snmp_action()、 get_snmp_oid()和 emit_snmp_attributes() 函数来检索传递给脚本的操作和 OID 值,并返回所请求的 MIB 对象的数据。
import jcs if __name__ == '__main__':
Python 自动化脚本不需要在脚本开头包含解释器指令行 (#!/usr/bin/env python)。但是,如果存在,程序仍将正确执行。