Python自动化运维-使用Python脚本监控华为AR路由器关键路由变化

夏夜,蟋蟀劲鸣,星光灿烂,月光清澈。孩提时的晨在小山上快活的玩味着每一朵花,每一株草,亦或躺在绿油油的草地数星星。一切都是那么的美好,那么的惬意。

组网需求

如下图所示,管理员通过远程网络对Router进行管理,可以上传Python脚本至Router。用户希望能够监控关键路由的变化,在关键路由变化的时候,触发日志通知,使用户能够及时感知路由变更。

配置思路

采用如下的配置思路:

  1. 配置端口的路由地址。
  2. 制作Python脚本climuti.pyroutetrack.py,在脚本中实现监控关键路由变化的功能。
  3. 上传Python脚本至Router,安装脚本climuti.py
  4. 为了实现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路由器关键路由变化到此结束。如果你不能对我好一辈子,请你不要对我好,哪怕只是一秒钟;如果你不能骗我一辈子,请你不要骗我,哪怕只是一个字;如果你不能爱我一辈子,请你不要爱我,哪怕只是一瞬间。小编再次感谢大家对我们的支持!

标签: Python AR