您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
网络设备管理(Python自动化运维实战:使用Python管理网络设备)
脚本,设备,地址网络设备管理(Python自动化运维实战:使用Python管理网络设备)
发布时间:2020-12-06加入收藏来源:互联网点击:
在上面的脚本中,首先使用raw_input()函数请求用户输入IP地址和IP网络,然后将输入的值作为参数传递给两个用户方法check_ip_address()和operate_on_ip_network()并调用它们。第一个函数check_ip_address()会检查输入的IP地址,同时尝试生成有关IP地址属性的报告(例如,IP地址是单播、多播、私有还是环回地址),并将输出返回给用户。
第二个函数operate_on_ip_network()用来完成和网络相关的操作,即生成网络ID、掩码、广播、版本、网络上的已知信息、IPv6地址的显示方式,最后生成该子网内的所有IP地址。
注意,net.info只能对公共IP地址生成可用信息,对私有IP地址不起作用。
同样,在使用之前需要先从netaddr模块导入IP Network和IP Address。
脚本运行结果如下所示。
4.4 简单的用例随着网络变得越来越大,其中包含更多来自各种不同供应商的设备,这就需要创建模块化的Python脚本来自动执行各种任务。接下来的几节将分析3个用例,这些用例可以从网络中收集不同信息,缩短解决问题所需的时间,或者至少将网络配置恢复到其上次已知的良好状态。使用自动化工作流来处理网络故障、修复网络环境,网络工程师能够更关心工作完成情况,提高业务水平。
4.4.1 备份设备配置备份设备配置对于任何一名网络工程师来说都是最重要的任务之一。在这个用例中,我们将使用netmiko库设计一个示例Python脚本。该脚本用来备份设备配置,它适用于不同的供应商和平台。
为方便日后访问或引用,我们将根据设备IP地址格式化输出文件名,例如,SW1备份操作的输出文件保存在dev_10.10.88.111_.cfg中。
创建Python脚本从定义交换机开始,我们希望将其配置备份为文本文件(设备文件),用逗号分隔访问设备的用户名、密码等详细信息。这样就可以在Python脚本中使用split()函数来获取这些数据,方便在ConnectHandler函数中使用这些数据。此外,还可以从Microsoft Excel工作表或任何数据库中轻松导出该文件以及把该文件导入其中。
文件结构如下。
<device_ipaddress>,<username>,<password>,<enable_password>,<vendor>
创建Python脚本,使用with open子句在脚本中导入该文件。在导入的文件对象上使用readlines()方法将文件中的每一行组成列表,然后用for循环逐行遍历文件,用split()函数获取每一行中用逗号隔开的设备信息,并将它们赋予相应的变量。
from netmiko import ConnectHandlerfrom datetime import datetimewithopen("/media/bassim/DATA/GoogleDrive/Packt/EnterpriseAutomationProject/Chapter5_Using_Python_to_manage_network_devices/UC1_devices.txt") asdevices_file: devices = devices_file.readlines()for line in devices: line = line.strip("n") ipaddr = line.split(",")[0] username = line.split(",")[1] password = line.split(",")[2] enable_password = line.split(",")[3] vendor = line.split(",")[4] if vendor.lower() == "cisco": device_type = "cisco_ios" backup_command = "show running-config" elif vendor.lower() == "juniper": device_type = "juniper" backup_command = "show configuration | display set"
由于我们的目标是创建模块化的、支持多种设备供应商的脚本,因此在if子句中需要检查设备供应商,并为该设备分配正确的device_type和backup_command。
接下来,建立与设备的SSH连接,使用netmiko模块中的.send_command()方法执行备份命令。
print str(datetime.now()) " Connecting to device {}" .format(ipaddr)net_connect = ConnectHandler(device_type=device_type, ip=ipaddr, username=username, password=password, secret=enable_password)net_connect.enable()running_config = net_connect.send_command(backup_command)print str(datetime.now()) " Saving config from device {}" .format(ipaddr)f = open( "dev_" ipaddr "_.cfg", "w")f.write(running_config)f.close()print "=============================================="
在最后的几行中,以写入方式打开一个文件(文件不存在时将自动创建),文件名中包含了前面从设备文件中读取的ipaddr变量。
脚本运行结果如下。
需要注意的是,备份的配置文件存储在项目的主目录中,文件名称包含每个设备的IP地址(见下图)。
4.4.2 创建访问终端
使用Linux服务器上的cron任务,或Windows服务器上的计划任务,可让服务器在指定时间运行上面的Python脚本。例如,每天凌晨运行一次,将配置信息存储在latest目录中,以方便运维团队使用。
在Python或其他编程活动中,你就是自己的设备供应商。为了满足自己的需求,你可以创建任何喜欢的代码组合和程序。在第二个例子中我们创建自己的终端(terminal),通过telnetlib访问路由器。只需要在终端写几个单词,就会在网络设备中执行很多命令并返回输出结果。输出结果将会显示在标准输出或保存在文件中。
#!/usr/bin/python__author__ = "Bassim Aly"__EMAIL__ = "basim.alyy@gmail.com"import telnetlibconnection = telnetlib.Telnet(host="10.10.88.110")connection.read_until("Username:")connection.write("admin" "n")connection.read_until("Password:")connection.write("access123" "n")connection.read_until(">")connection.write("en" "n")connection.read_until("Password:")connection.write("access123" "n")connection.read_until("#")connection.write("terminal length 0" "n")connection.read_until("#")while True: command = raw_input("#:") if "health" in command.lower(): commands = ["show ip int b", "show ip route", "show clock", "show banner motd" ] elif "discover" in command.lower(): commands = ["show arp", "show version | i uptime", "show inventory", ]else: commands = [command]for cmd in commands: connection.write(cmd "n") output = connection.read_until("#") print output print "==================="
首先,建立到路由器的Telnet连接并输入相应的用户信息,一直到打开特权(enable)模式。然后,创建一个始终为true的无限while循环,使用内置的raw_input()函数捕捉用户输入的命令。脚本捕获到用户输入之后,在网络设备上执行这些命令。
如果用户输入关键字health或discover,终端将自动执行一系列命令以反映期望的操作。这些关键字在排除网络故障时非常有用,可以根据常用的操作自由扩展它们。想象一下,在需要解决两个路由器之间的开放式最短路径优先(Open Shortest Path First,OSPF)邻居问题时,只要打开自己的Python终端脚本(这个脚本中已经写好了几个排除故障常用的命令),并将这些命令打包到诸如tshoot_ospf之类的if条件之后。一旦脚本看到这个关键字,它就会执行这些命令,输出OSPF邻居状态、MTU的接口、OSPF的广播网络等,简化定位问题的过程。
上一篇:防盗窗价格(防盗窗是铝合金好还是不锈钢好 ,铝合金防盗窗多少钱一平方?)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |