使用变量的 EEM 脚本

网络工程 联网 自动化 思科
2022-02-03 23:46:38

我想知道是否可以构建一个 EEM 脚本,该脚本将关闭、等待,然后根据系统日志消息启用路由器接口。我知道如果我在日志消息和操作中指定接口,我可以让它工作,但我想知道是否可以将一个脚本用于多个接口。他是我计划实施的脚本示例:

event manager applet interface_Shutdown
 event syslog pattern "(Tunnel2) is down: retry limit exceeded"
 action 1.0 cli command "enable"
 action 1.5 cli command "config t"
 action 2.0 cli command "interface Tunnel2
 action 2.5 cli command "shutdown"
 action 3.0 wait 360
 action 3.5 cli command "no shutdown"
 action 4.0 cli command "end"

是否有一个变量可以用于隧道接口编号,允许我运行这个适用于所有隧道接口的脚本?还是必须为每个人创建一个脚本?

1个回答

为了在顺序范围内自动执行shutdown多个no shutdown接口的操作,最好不要完全使用 EEM,而是结合使用 EEM 和 TCL 脚本(EEM 用于监视事件并触发 TCL 脚本的启动)。

首先,您需要创建您的 TCL 脚本并将其存储在设备的 flash 或 bootflash 分区中。您想要执行的单个脚本(没有暂停)的示例可能类似于:

for {set i 0} {$i <= 9} {incr i} {
set var Tunnel
append var $i
exec "interface $var"
exec "shutdown"
exec "no shutdown"}

然后,您可以根据需要创建您的 EEM 小程序,第一个操作行是您的“启用”命令,下一个是启动您刚刚创建的 TCL 脚本的调用。例如:

event syslog pattern "(Tunnel[0-9]) is down: retry limit exceeded"
action 1.0 “enable”
action 1.5 cli command "tclsh flash:shut_no-shut_tunnels.tcl"

如果您想在shutdownandno shutdown命令之间暂停 360 秒,您可以轻松地将脚本拆分为 2 个脚本(一个 to shutdown,另一个 to no shutdown)。例如:

关闭:

for {set i 0} {$i <= 9} {incr i} {
set var Tunnel
append var $i
exec "interface $var"
exec "shutdown"}

不关机:

for {set i 0} {$i <= 9} {incr i} {
set var Tunnel
append var $i
exec "interface $var"
exec "no shutdown"}

只需相应地命名文件并根据需要在 EEM 小程序中的单独操作中引用它们,例如:

action 1.5 cli command "tclsh flash:shut_tunnels.tcl"
action 2.0 wait 360
action 2.5 cli command "tclsh flash:no-shut_tunnels.tcl"

如果您坚持只使用 EEM,您可以使用一些变量来提取您寻找的信息。使用该命令show event manager detector syslog detailed将显示 TCL 和 EEM 小程序格式/语法中可用变量的列表。

因此,您可以结合使用正则表达式和这些变量来处理此任务。

执行此操作的此类 EEM 小程序的示例可能是:

event manager applet interface_Shutdown
 event syslog pattern "(Tunnel[0-9]) is down: retry limit exceeded"
 action 1.0 regexp "(Tunnel[0-9]) is down: retry limit exceeded" "$_syslog_msg" match intf
 action 1.5 cli command "enable"
 action 2.0 cli command "configure terminal"
 action 2.5 cli command "interface $intf"
 action 3.0 cli command "shutdown"
 action 3.5 wait 360
 action 4.0 cli command "no shutdown"
 action 4.5 cli command "end"

注意:我还没有测试过 EEM 小程序以查看它是否正常工作。这只是一个例子。