Junos 快照管理员配置文件
了解 Junos 快照管理员配置文件
Junos 快照管理器配置文件定义快照的范围以及单个快照或两个快照比较的评估标准。提供 Junos 快照管理器配置文件的位置作为命令的 jsnap
参数。
在 Junos 快照管理器配置文件中,大括号分隔代码块,分号表示语句或命令的结束。可以通过在行首使用哈希 (#) 或分号 (;)将注释插入配置文件。
Junos Snapshot Administrator 配置文件包含一个必需 do
的代码块,该代码块位于配置文件的开头,后跟任意数量的用户定义的测试节。以下各节介绍了各个配置文件组件的详细信息:
执行部分
do
代码块列出了将在快照中使用的每个测试部分的名称。此部分是必需的,必须放在配置文件的开头。您可以根据需要定义任意数量的测试节,但必须在代码块中包含do
测试节名称才能执行该测试。代码块的do
语法为:
do { test-section-name1; test-section-name2; test-section-name3; }
例如,以下 do
代码块列出了五个测试部分。当 Junos 快照管理员引用配置文件时,尽管配置文件可能定义了五个以上的测试节,但该工具仅执行代码块中 do
列出的五个测试节。
do { re0-master; ospf-checks; l2vpn-list; vpls-list; bgp-checks; }
测试部分
在配置文件中,定义一个或多个测试节。测试部分按任意顺序放置在代码块之后 do
,定义快照的范围以及单个快照或两个快照比较的评估标准。
每个测试部分都包含一个唯一的配置节,其中包含:
部分名称 - 应描述正在执行的检查的唯一用户定义字符串。
一条
command
语句 — 指定为收集数据而执行的 Junos OS 操作模式命令 。item
一个或多个或iterate
内容部分声明 - 定义用于评估数据的测试用例。
测试部分代码块的一般语法为:
test-section-name { command command-syntax; (item | iterate) xpath-expression { [id xpath-expression;] # test cases } }
例如:
re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { info re0 is always master; err " re0 is not master, rather %s", mastership-state; err " Correct so that re0 is the master!"; } } }
以下各节详细介绍了测试部分的组件:
测试部分名称
测试节名称是用户定义的唯一字符串,应描述正在执行的检查。将要执行的测试节的名称添加到配置文件开头的代码块中 do
。当 Junos 快照管理员引用配置文件时,该工具将执行代码块中 do
列出的任何测试部分。
理想情况下,您应该创建描述性的测试节名称,以便您或使用配置文件的任何其他人都可以在创建配置文件后很长时间内快速识别每个测试节的范围和用途。例如,您可以用于 active-chassis-alarm-check
检查是否存在任何活动机箱报警的测试部分,如下所示:
active-chassis-alarm-check { command show chassis alarms; item alarm-summary { exists no-active-alarm { info No chassis alarms; err "There are %s chassis alarms", active-alarm-count; } } }
测试部分命令语句
每个测试部分包含一个 command
标识符,后跟 Junos OS 操作模式命令,执行该命令是为了收集该检查的所需数据。例如,如果要收集和评估有关某个接口的 OSPF 邻接方的数据,则需要添加 command
标识符,后跟 show ospf neighbor
操作模式命令,如下所示:
ospf-neighbor-check { command show ospf neighbor; iterate ospf-neighbor { id interface-name; # # test cases # } }
ospf-neighbor-check
如果节名称包含在代码块中do
,则生成的快照将包含命令输出中的 show ospf neighbor
XML 数据。有关 Junos OS 操作模式命令的详细信息,请参阅 Junos XML API 操作参考。输出示例show ospf neighbor
如下所示:
<ospf-neighbor-information> <ospf-neighbor> <neighbor-address>10.1.12.2</neighbor-address> <interface-name>ae18.0</interface-name> <ospf-neighbor-state>Full</ospf-neighbor-state> <neighbor-id>10.0.0.2</neighbor-id> <neighbor-priority>128</neighbor-priority> <activity-timer>3</activity-timer> </ospf-neighbor> <ospf-neighbor> <neighbor-address>10.1.15.2</neighbor-address> <interface-name>ae19.0</interface-name> <ospf-neighbor-state>Full</ospf-neighbor-state> <neighbor-id>10.0.0.5</neighbor-id> <neighbor-priority>128</neighbor-priority> <activity-timer>3</activity-timer> </ospf-neighbor> </ospf-neighbor-information>
您可以通过定义测试用例来评估快照输出中的特定元素或跨多个快照比较元素。
测试部分评估标准
测试节语句后可以跟有或item
iterate
内容节command
声明,您可以在其中定义一个或多个测试用例来评估捕获的快照数据。该语句用于唯一标识特定元素,并使用iterate
语句循环item
访问多个元素。
内容节声明的一般语法为:
(item | iterate) xpath-expression { test-operator operator-params { #specify an ID for test operators that compare two collections [id xpath-expression;] info string; err "string"; } }
每个测试用例都由测试运算符定义,后跟任何必需的参数。有关可用测试运算符的详细信息,请参阅了解 Junos 快照管理员测试运算符和 Junos 快照管理员测试运算符摘要。在测试用例代码块中,您可以定义一个info
语句来提供有关测试用例和预期操作条件的信息。您还可以定义一个或多个err
语句,这些语句是当内容未通过特定测试用例时生成的。
以下示例有一个测试用例,用于检查命令的 show chassis routing-engine
XML 输出,以确定插槽 0 中的路由引擎是否为主路由引擎。 mastership-state
如果插槽 0 中的路由引擎不等于 “master”,则代码将生成两个 err
语句。
re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { info RE-0 is always master; err " RE-0 is not master, rather %s", mastership-state; err " Correct error so that RE-0 is the master"; } } }
使用某些测试运算符比较两个快照中的元素值时,为了将第一个快照数据项映射到第二个快照数据项,必须选择创建唯一 ID 的数据元素。若要为测试用例创建唯一 ID,请包含 id
语句,后跟引用唯一元素的 XPath 表达式。要基于多个元素值创建唯一 ID,请定义多个 id
语句。您还可以构造相对于内容值的 ID 值。有关创建 ID 值的详细信息,请参阅 了解 Junos 快照管理员测试运算符。
示例:创建 Junos 快照管理员配置文件
此示例创建一个基本示例 Junos 快照管理员配置文件。
要求
服务器上安装了 Junos 快照管理员 1.0 版。
概述
此示例创建一个 Junos 快照管理员配置文件,其中包含一个名为 的 re0-master
测试节。 re0-master
测试部分检索并解析来自 Junos OS 操作模式命令 show chassis routing-engine
的 XML 输出。双路由引擎设备的 XML 输出示例如下所示:
<route-engine-information xmlns="http://xml.juniper.net/junos/11.4R1/junos-chassis"> <route-engine> <slot>0</slot> <mastership-state>master</mastership-state> <mastership-priority>master (default)</mastership-priority> <status>OK</status> <temperature junos:celsius="30">30 degrees C / 86 degrees F</temperature> <cpu-temperature junos:celsius="27"> 27 degrees C / 80 degrees F </cpu-temperature> <memory-dram-size>768</memory-dram-size> <memory-buffer-utilization>48</memory-buffer-utilization> <cpu-user>1</cpu-user> <cpu-background>0</cpu-background> <cpu-system>5</cpu-system> <cpu-interrupt>1</cpu-interrupt> <cpu-idle>94</cpu-idle> <model>RE-5.0</model> <serial-number>19995858810</serial-number> <start-time junos:seconds="1337708989"> 2012-05-22 10:49:49 PDT </start-time> <up-time junos:seconds="8735869"> 101 days, 2 hours, 37 minutes, 49 seconds </up-time> <last-reboot-reason> Router rebooted after a normal shutdown. </last-reboot-reason> <load-average-one>0.00</load-average-one> <load-average-five>0.00</load-average-five> <load-average-fifteen>0.00</load-average-fifteen> </route-engine> </route-engine-information>
对于双路由引擎设备,测试用例会检查 XML 输出,以确定插槽 0 中的路由引擎是否为主路由引擎。测试部分使用该 item route-engine[slot = '0']
表达式选择 route-engine
子元素值为“0”的元素 slot
。测试用例使用测试运算符将 is-equal
子元素的值 mastership-state
与字符串值“master”进行比较。如果测试用例返回 true,则插槽 0 中的路由引擎为主路由引擎。如果测试用例返回 false,代码将报告两个错误语句。
必填 do
部分包括当 Junos 快照管理员引用此配置文件时应执行的所有测试部分的名称。对于此示例,该 do
节仅 re0-master
包含 .
配置
Junos 快照管理器配置由一个必需 do
部分和一个或多个测试部分组成。
如何配置测试部分
分步过程
Junos 快照管理器配置由测试部分组成,这些部分定义快照或快照比较中使用的命令和评估标准。要配置测试部分:
使用唯一的描述性字符串命名测试节。
re0-master { ... }
添加
command
语句,并指定代码为检索所需的 XML 数据而执行的 Junos OS 操作模式命令。re0-master { command show chassis routing-engine; }
添加 or
iterate
item
语句,后跟用于选择所需元素的 XPath 表达式。re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { } }
如果测试部分比较两个快照中的元素,请添加指定唯一 ID 的语句,以
id
将第一个快照数据项映射到第二个快照数据元素。此示例不需要
id
语句。创建检查期间使用的测试用例条件。
re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { } } }
在测试用例代码块中,添加
info
描述测试用例或正常操作条件的语句。re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { info re0 is always master; } } }
在测试用例代码块中,添加一个或多个
err
语句,如果测试用例失败,将执行这些语句。re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { info re0 is always master; err " re0 is not master, rather %s", mastership-state; err " Correct so that re0 is the master!"; } } }
如何配置“执行”部分
分步过程
Junos 快照管理员配置文件必须以定义 do
要在快照中使用的测试部分的代码块开头。
在配置文件的开头,添加
do
代码块。do { }
添加将在快照中使用的每个测试部分的名称。
do { re0-master; }
结果
do { re0-master; } re0-master { command show chassis routing-engine; item route-engine[slot = '0'] { is-equal mastership-state, "master" { info re0 is always master; err " re0 is not master, rather %s", mastership-state; err " Correct so that re0 is the master!"; } } }