在事件策略中执行事件脚本
事件脚本 是可扩展样式表语言转换 (XSLT) 脚本、样式表语言替代语法 (SLAX) 脚本或事件策略在触发时可以执行的 Python 脚本。事件脚本可执行通过 Junos XML 或 Junos XML 协议远程过程调用 (RPC) 提供的任何功能。此外,您还可以将定义的一组参数传递给事件脚本。
事件脚本可以构建并运行操作模式命令、接收命令输出、检查输出并确定下一个相应操作。此过程可重复,直至确定故障源。然后,脚本可在 CLI 上向您报告故障源或自动更改设备配置。
您可以配置执行事件脚本的事件策略,并将这些脚本的输出上传到指定位置进行分析。要配置此类策略,请在 [edit event-options]
层次结构级别包括以下语句:
[edit event-options] policy policy-name { events [ events ]; then { event-script filename { arguments { argument-name argument-value; } destination destination-name; output-filename filename; output-format (text | xml); } } }
在该语句中 events
,您可以列出多个事件。如果发生一个或多个列出的事件,则事件进程将执行在层次结构下配置的 then
操作。事件策略操作可以包括执行一个或多个事件脚本,该脚本通过包括语 event-script filename
句来配置。事件进程将按照在配置中显示的顺序运行脚本。您在语句中 event-script
引用的脚本必须位于设备硬盘上的 /var/db/scripts/event 目录中,或闪存内存中的 /config/scripts/event/ directory。 此外,事件脚本必须在层次结构级别启用 [edit event-options event-script file]
。有关更多信息,请参阅 Store and Enable Junos Automation Scripts。
如果脚本位于闪存内存中,则必须在层次结构级别上配置 load-scripts-from-flash
语句 [edit system scripts]
。
有关在运行 Junos OS 的设备上执行 Python 自动化脚本时的要求和限制的详细信息,请参阅 在 Junos 设备上执行 Python 自动化脚本的要求。
您可以将语句配置 arguments
为将参数传递至事件脚本作为名称/值对。该参数值可包含包含有关触发事件或其他已接收事件的信息的变量。然后,事件脚本可在执行过程中参考此信息。有关将参数传递至事件脚本的详细信息,请参阅 配置事件策略以将参数传递至事件脚本。
您可以配置事件脚本,将其输出写入文件。事件进程执行脚本时,它会将带有脚本输出的文件上传到语句中 destination
指定的位置。语句中 destination
包含在层次结构级别上配置的目标 [edit event-options destinations]
名称。有关更多信息,请参阅 示例:按事件策略定义文件存档目标。
在语句中 output-filename
,定义文件名中包含的描述性字符串。每个上传的文件还包括文件名中的主机名和时间戳,以确保每个文件名都是唯一的。如果在 1 秒内多次触发策略,则将索引号附加到文件名中,以确保文件名仍然唯一。索引号范围为 001 到 999。
从 Junos OS 版本 14.1R3 开始,将更改事件脚本生成的命令输出文件的命名约定。当事件策略执行事件脚本且脚本生成输出文件时,该文件的名称取决于设备上运行的 Junos OS 版本。在 Junos OS 14.1R3 版本之前,文件名具有以下命名约定:
hostname_output-filename_YYYYMMDD_HHMMSS_index-number
从 Junos OS 14.1R3 版开始,文件名会在时间戳之后放置 output-filename 字符串。
hostname_YYYYMMDD_HHMMSS_output-filename_index-number
例如,在运行 Junos OS 版本 14.1R3 或更高版本的名为 r1 的设备上,如果将 output-filename
语句配置为 ifl 事件,并且此事件策略在 1 秒内触发三次,则文件命名为:
r1_20060623_132333_ifl事件
r1_20060623_132333_ifl events_001
r1_20060623_132333_ifl-events_002
对于和destination
output-filename
语句,有四种配置场景:
您可以省略
destination
和output-filename
语句。当事件脚本无输出时,此选项很有意义。例如,事件脚本可能仅request
执行无输出的命令。您可以同时
destination
包含和output-filename
语句。如果在配置中包含语output-filename
句,则配置中还必须包含语destination
句。在这种情况下,脚本输出将重定向到输出文件,并将该文件发送至配置中指定的目标。您可在配置中包含语
destination
句。您可以在配置中省略语output-filename
句,而是在事件脚本中指定输出文件名。脚本输出将发送至配置中指定的目标。如果配置中未包含语destination
句,则不会上传脚本输出。在这种情况下,事件策略将从事件脚本中提取文件名。事件脚本将输出文件名写为 STDOUT。要在事件脚本中使用的 XML 语法包括:
<output> <event-script-output-filename>filename</event-script-output-filename> </output>
该
<event-script-output-filename>
元素必须是父标记中<output>
的第一个儿童标记。在名为
device2
的设备上,使用目标host
配置事件脚本操作,然后省略output-filename
语句。将目标host
定义为 ftp://user@device1//tmp。在 脚本1.xsl 事件脚本中,将以下输出写入 STDOUT:
<event-script-output-filename>/var/cmd.txt</event-script-output-filename>
配置
policy1
事件策略,如下所示:[edit event-options] policy policy1 { then { event-script script1.xsl { destination host; } } } destinations { host { archive-sites { "ftp://user@device1//tmp" password "$ABC123"; ## SECRET-DATA*** } } }
在此示例中, /var/cmd.txt 文件驻留在设备2 上。事件策略使用文件传输协议 (FTP) 将此文件上传到设备1 上的 /tmp 目录。
事件策略将读取中的输出文件名/var/cmd.txt
STDOUT
。然后,事件策略会将/var/cmd.txt 文件上传到配置的目标,即设备1 上的 /tmp 目录。该事件策略将/var/cmd.txt 文件重命名为 device2_YYYYMMDD_HHMMSS_cmd.txt_index-number。您可以包括和
output-filename
语句,destination
还可以在事件脚本中直接指定输出文件名。如果这样做,配置中指定的输出文件名将覆盖事件脚本中指定的输出文件名。
事件脚本输出的默认格式和唯一格式是 Junos 可扩展标记语言 (XML)。
事件脚本输出始终以 XML 格式发出,即使您在层次结构下[edit event-options policy policy-name then event-script filename]
配置output-format text
语句也是如此。