组网需求
如下图所示,管理员通过远程网络对Router进行管理,可以上传Python脚本至Router。用户希望能够监控关键路由的变化,在关键路由变化的时候,触发日志通知,使用户能够及时感知路由变更。
配置思路
采用如下的配置思路:
- 配置端口的路由地址。
- 制作Python脚本climuti.py和routetrack.py,在脚本中实现监控关键路由变化的功能。
- 上传Python脚本至Router,安装脚本climuti.py。
- 为了实现Python脚本的自动运行,配置Python脚本的维护助手,注册Python脚本中的订阅事件。
操作步骤
1、配置端口的路由地址
<Huawei> system-view
[Huawei] sysname Router
[Router] interface GigabitEthernet 1/0/0
[Router-GigabitEthernet1/0/0] ip address 10.2.1.1 255.255.255.0
[Router-GigabitEthernet1/0/0] quit
[Router] quit
2、制作Python脚本
制作Python脚本climuti.py和routetrack.py,分别实现以下功能。
- 脚本climuti.py用来自定义命令routetrack,使能关键路由变化的监控功能,同时安装脚本routetrack.py。
- 脚本routetrack.py用来监控路由变化,路由变化时,输出日志。
3、上传Python脚本并安装
<Router> ops install file climuti.py
4、配置维护助手
配置维护助手,注册climuti.py脚本中的命令行事件,等待事件触发。
<Router> system-view
[Router] ops
[Router-ops] script-assistant python climuti.py
[Router-ops] quit
[Router] quit
5、验证配置结果
上述配置完成后,用户可以执行自定义命令routetrack启动关键路由变化的监控,在设备sd1:/$_user/目录下查看routetrack.py脚本是否安装成功。成功配置脚本的维护助手后,系统会自动生成对应脚本的.pyc文件,即脚本运行的中间文件。
<Router> routetrack
<Router> cd $_user
<Router> dir
Directory of sd1:/$_user/
Idx Attr Size(Byte) Date Time(LMT) FileName
0 -rw- 1,672 Jul 22 2015 14:29:33 climuti.py
1 -rw- 2,000 Jul 22 2015 14:29:57 climuti.pyc
2 -rw- 441 Jul 22 2015 14:31:00 routetrack.py
3 -rw- 891 Jul 22 2015 14:31:03 routetrack.pyc
1,927,468 KB total available (387,044 KB free)
打开日志开关,当监控的关键路由发生变化时,设备会自动输出日志。
<Router> system-view
[Router] info-center enable
[Router] quit
<Router> terminal monitor
<Router> terminal logging
<Router>
Jul 28 2015 14:29:17+08:00 Router %%01OPSA/2/SCRIPT_LOG(l)[0]:OPS: Syslog:
The important route changed. (user="routetrack.py", session=964036020).
climuti.py脚本示例
# coding=utf-8
import ops # 导入ops模块
import sys # 导入sys模块
import re # 导入reps模块
# 订阅处理函数
def ops_condition (ops):
print("\r\n user.py: enter ops_condition()") # 打印信息
value1, err_str1 = ops.cli.subscribe("cli1", "^routetrack$", enter=True, sync=True, sync_wait=60) # 自定义命令行routetrack
print("\r\n reg_cli.subscribe.value: %-15d"%(value1))
print("\r\n reg_cli.subscribe.err_str: %s"%(err_str1))
value2, err_str2 = ops.cli.subscribe("cli2", "^no routetrack$", enter=True, sync=True, sync_wait=60) # 自定义命令行no routetrack
value10, err_str10 = ops.correlate("cli1 or cli2") # 组合事件,输入命令行routetrack或no routetrack
print("\r\n correlate.value10:%d"%(value10))
print("\r\n correlate.err_str10:%s"%(err_str10))
return 0
# 工作处理函数
def ops_execute (ops):
key, value = ops.environment.get("_cli_input") # 获取系统环境变量_cli_input,表示用户输入的命令
print ("\r\n cli input:%s"%(key))
# 判断用户输入命令行routetrack时,执行以下步骤
if key == "routetrack":
handle, err_desp = ops.cli.open() # 打开命令行通道
print("\r\n handle:%-15d"%(handle))
print("\r\n err_desp:%s"%(err_desp))
result, n11, n21 = ops.cli.execute(handle,"ops install file routetrack.py")
# 执行ops install file routetrack.py命令安装routetrack.py脚本
result, n11, n21 = ops.cli.execute(handle,"system-view") # 执行system-view命令进入系统视图
result, n11, n21 = ops.cli.execute(handle,"OPS") # 执行ops命令进入OPS视图
result, n11, n21 = ops.cli.execute(handle,"script-assistant python routetrack.py")
# 执行script-assistant python routetrack.py命令配置routetrack.py脚本的维护助手
print("\r\n result:%s"%(result))
print("\r\n n11:%d"%(n11))
print("\r\n n21:%s"%(n21))
result = ops.cli.close(handle) # 关闭命令行通道
# 判断用户输入命令行no routetrack时,执行以下步骤
elif key == "no routetrack":
handle, err_desp = ops.cli.open() # 打开命令行通道
print("\r\n handle:%-15d"%(handle))
print("\r\n err_desp:%s"%(err_desp))
result, n11, n21 = ops.cli.execute(handle,"system-view") # 执行system-view命令进入系统视图
result, n11, n21 = ops.cli.execute(handle,"OPS") # 执行ops命令进入OPS视图
result, n11, n21 = ops.cli.execute(handle,"undo script-assistant python routetrack.py")
# 执行undo script-assistant python routetrack.py命令删除routetrack.py脚本的维护助手
result, n11, n21 = ops.cli.execute(handle,"quit") # 执行quit命令退回到系统视图
result, n11, n21 = ops.cli.execute(handle,"quit") # 执行quit命令退回到用户视图
result, n11, n21 = ops.cli.execute(handle,"ops uninstall file routetrack.py")
# 执行ops uninstall file routetrack.py命令卸载routetrack.py脚本
print("\r\n result:%s"%(result))
print("\r\n n11:%d"%(n11))
print("\r\n n21:%s"%(n21))
result = ops.cli.close(handle) # 关闭命令行通道
else:
pass
return 0
routetrack.py脚本示例
# coding=utf-8
import ops # 导入ops模块
import sys # 导入sys模块
# 订阅处理函数
def ops_condition (o):
print("\r\n user.py: enter ops_condition()")
value, err_str = o.route.subscribe("route1", network = "10.2.1.0", maskLen = 24, optype="modify", protocol="ospf")
# 监控10.2.1.0/24网段的OSPF路由的变更
print("\r\n retrieve.route1.value:%d"%(value))
print("\r\n retrieve.route1.err_str:%s"%(err_str))
return 0
# 工作处理函数
def ops_execute (o):
status, err_log = o.syslog("Syslog: The important route changed.", ops.CRITICAL, "syslog")
# 记录自定义的Critical级别的用户日志,提示路由变更
return 0
本文Python自动化运维-使用Python脚本监控华为AR路由器关键路由变化到此结束。如果你不能对我好一辈子,请你不要对我好,哪怕只是一秒钟;如果你不能骗我一辈子,请你不要骗我,哪怕只是一个字;如果你不能爱我一辈子,请你不要爱我,哪怕只是一瞬间。小编再次感谢大家对我们的支持!