美文网首页银狐NetDevOps
银狐NetDevOps-网络运维Python初篇(三)openp

银狐NetDevOps-网络运维Python初篇(三)openp

作者: 科技银狐 | 来源:发表于2021-05-18 00:00 被阅读0次
    科技银狐

    1、训练场景:读取excel大量设备信息,根据得到的信息进行批量操作

    上一个章节我们举了一个简单的案例,利用netmiko抓取单台思科设备的配置,现实情况我们不会对1台设备进行操作,那样的话就不需要自动化了。网上有很多教程,教大家用for循环读取txt文档内容,这种方式也确实可以。

    不过有些企业有自己的CMDB系统,支持API调用或者excel导出,所以本章内容就以excel内容为例,总归类似的内容相对较少。

    2、实验环境:

    操作系统:windows 10 PC机

    python版本:python 3.8

    网络设备:华为CE 6865

    编辑器:vscode(pycharm、sublime均可,推荐vscode)

    excel格式:初次使用简单一些,excel中只加入IP地址

    [图片上传失败...(image-bed0b-1621266802456)]

    3、思路分析

    使用python第三方库openpyxl读取设备IP地址,并形成一个IP地址的list,这里需要注意第一行是表头,所以要从第二行开始读取。拿到所有设备IP地址列表后进行for循环对每台设备进行SSH连接(netmiko),然后发送CLI命令,并打印出来。

    4、整体代码

    #!/usr/bin/env python
    #coding: utf-8
    
    from netmiko import ConnectHandler
    from openpyxl import Workbook
    from openpyxl import load_workbook
    
    def read_device_excel( ):
    
        ip_list = []
    
        wb1 = load_workbook('/home/netops/venv/cs_lab.xlsx')
        ws1 = wb1.get_sheet_by_name("Sheet1")
    
        for cow_num in range(2,ws1.max_row+1):
    
            ipaddr = ws1["a"+str(cow_num)].value
            ip_list.append(ipaddr)
    
        return ip_list
    
    def get_config(ip_list):
    
        for ipaddr in ip_list:
    
            session = ConnectHandler(device_type="huawei",
                                    ip=ipaddr,
                                    username="dev_user",
                                    password="dev_password",
                                    banner_timeout=300)
    
            print("connecting to "+ ipaddr)
            print ("---- Getting HUAWEI configuration from {}-----------".format(ipaddr))
    
            config_data = session.send_command('dis ip int brief ')
    
            print (config_data)
            session.disconnect()
    
    def main():
        ip_list = read_device_excel()
        get_config(ip_list)
    
    #-------------------------------------------------------    
    if __name__ == '__main__':
        main()
    

    执行结果:

    image

    5、代码详解

    #!/usr/bin/env python
    #coding: utf-8
    
    from netmiko import ConnectHandler
    from openpyxl import Workbook
    from openpyxl import load_workbook
    

    导入netmiko和openpyxl模块就不多说了,大家都懂。

    def read_device_excel( ):
    
        ip_list = []
    
        wb1 = load_workbook('/home/netops/venv/cs_lab.xlsx')
        ws1 = wb1.get_sheet_by_name("Sheet1")
    
    

    1、创建read_device_excel函数,因为我们需要一个IP地址的列表,所以先创建一个空list。

    2、调用openpyxl穿件workbook对象,用于创建workbook并复制给wb1,workbook1内的sheet1赋值给ws1(Sheet1也是默认sheet)。

        for cow_num in range(2,ws1.max_row+1):
    
            ipaddr = ws1["a"+str(cow_num)].value
            ip_list.append(ipaddr)
    
        return ip_list
    

    3、A列第一行可以用A1表示,A1的value属性就是单元格里的内容,比如A1=IP,A2=10.23.80.93,现在我们想遍历出所有IP地址,就要用for循环遍历A列所有内容,这里要注意,第一行我们是不需要的,所以我们真正要遍历的是2-5行,可以使用ws1.max_row得到最大值,这里max_row =5,range的(2,5)其实=2,3,4,这样最后一行就抓不到了,所以要max_row+1,确保第一行所有IP都能抓到。

    4、最后把ip列表retrun出来(传递出来)

    def get_config(ip_list):
    
        for ipaddr in ip_list:
    
            session = ConnectHandler(device_type="huawei",
                                    ip=ipaddr,
                                    username="dev_user",
                                    password="dev_password",
                                    banner_timeout=300)
    
            print("connecting to "+ ipaddr)
            print ("---- Getting HUAWEI configuration from {}-----------".format(ipaddr))
    
            config_data = session.send_command('dis ip int brief ')
    
            print (config_data)
            session.disconnect()
    

    5、创建一个get_config的函数,并把上面的ip_list传递进来进行for循环。

    6、针对没一个IP地址进行SSH登录,并用print提示我们正在登录哪个设备。

    7、直接使用send_command方法发送CLI命令。

    8、打印交换机返回的结果,并关闭session。

    def main():
        ip_list = read_device_excel()
        get_config(ip_list)
    
    #-------------------------------------------------------    
    if __name__ == '__main__':
        main()
    

    为了代码更加清晰,创建了1个主函数main(),并分别调用读取excel函数和getconfig函数。

    *SSH也可以单独写成一个函数,get_config内部调用SSH函数,这种方式更灵活。

    相关文章

      网友评论

        本文标题:银狐NetDevOps-网络运维Python初篇(三)openp

        本文链接:https://www.haomeiwen.com/subject/igydjltx.html