网络自动化02:基于xlsx传入设备信息与所需执行备份配置命令,使用netmiko自动化登录分发

这是这个系列第二篇
本文将仅简单介绍使用xlsx导入设备信息,并使用netmiko配置

目录

  • 环境
  • 设备信息表格式
  • 单线程
    • 代码
    • 解释
      • 代码逻辑分析
        • 函数解析
      • 逻辑调用图
      • 逻辑说明
  • 遇到的问题
  • 写在最后

环境

在这里插入图片描述
所有设备均能与我执行Python脚本的环境互通,同时均拥有独立的ip
所有设备已经配置好ssh,username python,password 123。同时已经全部测试ssh能顺利使用

设备信息表格式

以下表格格式,是九净老师文章中给出,请各位根据现网自行设计
文件名为inventory.xlsx

ipdevice_typeusernamepasswordtimeoutconn_timeoutbackup_cmd
192.168.100.11cisco_iospython12318020show current-configuration
192.168.100.12cisco_iospython12318020show current-configuration
192.168.100.13cisco_iospython12318020show current-configuration
192.168.100.14huaweipython12318020display current-configuration
192.168.100.15huaweipython12318020display current-configuration

单线程

代码

import pandas as pd
from netmiko import ConnectHandler


# 处理excel信息函数
def get_batch_backup_dev_infos(filename='inventory.xlsx'):
    '''
    读取Excel表格加载网络设备基本信息和其配置备份的命令,结果返回一个元组的列表
    :param filename: 表格名称,默认值是inventory.xlsx
    :return: [(<netmiko连接设备所需基本信息的字典>,<配置备份的命令>)]
    示例:
    [({'ip': '192.168.100.11',
       'device_type': 'cisco_ios',
       'username': 'python',
       'password': '123',
       'timeout': 180,
       'conn_timeout': 20},
       'show runn'),
    ]
    '''
    # 读取并将表格加载成字典的列表
    df = pd.read_excel(filename)
    items = df.to_dict(orient='records')
    # 构建返回的结果,dev_infos是一个元组的列表。
    dev_infos = []
    for i in items:
        # 取出配置备份的命令,并用del 将其从字典中删除,使字典仅有设备信息
        backup_cmd = i['backup_cmd']
        del i['backup_cmd']
        # 删除配置备份命令后的字典就是netmiko登录设备所需的信息
        dev = i
        # 构建列表,列表每个元素都是元组。
        #元组由两个部分组成,一部分是设备信息(字典),一部分是需要发送的命令(字符串)
        dev_infos.append((dev, backup_cmd))
    return dev_infos

# 登陆配置脚本
def network_device_backup(dev, cmd='display current-configuration'):
    """
    登录设备执行配置备份的命令,并将设备回显的配置写入一个<设备IP或者host>.txt的文件中,编码格式utf8
    :param dev: 设备的基础信息,类型字典,key与创建netmiko所需的参数对应
    :param cmd: 要执行的配置备份的命令,默认是华为的“display current-configuration”
    :return: None 不返回,只打印
    """
    with ConnectHandler(**dev) as conn:
    	# 假如需要提权
        conn.enable()
        output = conn.send_command(command_string=cmd)
        file_name = '{}.txt'.format(dev['host'])
        with open(file_name, mode='w', encoding='utf8') as f:
            f.write(output)
            print('{}执行备份成功'.format(dev['host']))

# 读取文件函数
def batch_backup(inventory_file='inventory.xlsx'):
	# 执行处理设备信息表的函数
    dev_infos = get_batch_backup_dev_infos(inventory_file)
    for dev_info in dev_infos:
    	# 取出设备信息
        dev = dev_info[0]
        # 取出命令
        cmd = dev_info[1]
        # 将上述两个变量作为参数传入执行netmiko的函数
        network_device_backup(dev, cmd)


if __name__ == '__main__':
    batch_backup()

解释

代码逻辑分析

该代码实现了一个批量备份网络设备配置的功能,主要包括读取设备信息、连接设备并执行配置备份命令、将结果写入文件。

函数解析
  1. get_batch_backup_dev_infos(filename='inventory.xlsx'):

    • 功能: 从Excel文件中读取网络设备的基本信息及其配置备份命令。
    • 参数:
      • filename: Excel文件名,默认是inventory.xlsx
    • 返回值: 返回一个元组列表,每个元组包含设备信息(字典)和对应的备份命令(字符串)。
    • 逻辑:
      • 使用pandas读取Excel文件,将其转换为字典列表。
      • 遍历字典,提取每个设备的备份命令并将其从字典中删除,最终将设备信息和命令组成元组,添加到结果列表中。
  2. network_device_backup(dev, cmd='display current-configuration'):

    • 功能: 连接网络设备并执行配置备份命令,结果写入以设备IP或host命名的文本文件中。
    • 参数:
      • dev: 设备信息字典。
      • cmd: 备份命令,默认是华为的display current-configuration
    • 逻辑:
      • 使用netmikoConnectHandler连接设备,执行命令并获取输出。
      • 将输出写入以设备名称命名的.txt文件,使用UTF-8编码。
  3. batch_backup(inventory_file='inventory.xlsx'):

    • 功能: 执行整个备份流程。
    • 参数:
      • inventory_file: 设备信息文件名。
    • 逻辑:
      • 调用get_batch_backup_dev_infos读取设备信息。
      • 遍历设备信息,调用network_device_backup进行配置备份。
  4. if __name__ == '__main__'::

    • 入口点,调用batch_backup()开始执行备份操作。

逻辑调用图

+------------------------------------------+
|              batch_backup()             |
|                                          |
|  +---------------------------+           |
|  | get_batch_backup_dev_infos|           |
|  | (inventory_file)         |           |
|  +---------------------------+           |
|                  |                          |
|                  v                          |
|        +------------------+                 |
|        | dev_infos: list  |                 |
|        +------------------+                 |
|                  |                          |
|                  v                          |
|           +-------------------+             |
|           | for dev_info in   |             |
|           | dev_infos:        |             |
|           +-------------------+             |
|                  |                          |
|                  v                          |
|          +--------------------+             |
|          | network_device_backup|            |
|          | (dev, cmd)         |             |
|          +--------------------+             |
|                  |                          |
|                  v                          |
|       +--------------------------+           |
|       | ConnectHandler(**dev)   |           |
|       +--------------------------+           |
|                  |                          |
|                  v                          |
|         +---------------------+              |
|         | conn.send_command(cmd)|             |
|         +---------------------+              |
|                  |                          |
|                  v                          |
|        +-----------------------+             |
|        | write output to file  |            |
|        +-----------------------+             |
|                                          |
+------------------------------------------+

逻辑说明

  1. batch_backup() 函数是整个程序的入口,负责调用设备信息获取和备份功能。
  2. get_batch_backup_dev_infos() 中,程序读取Excel文件并解析成设备信息和备份命令的元组列表。
  3. 通过循环遍历每个设备的信息,调用 network_device_backup(),连接设备并执行备份命令。
  4. 备份结果被保存到本地文件,确保每个设备的配置能够被有效备份和记录。

遇到的问题

  1. pandas读入数据默认数据类型

pandas从表格中读入信息时,如果这个单元格内是纯数字,pandas会为这个字典中k/v的v赋值为int类型
但ConnectHandler类中,对password、username、ip等参数的要求都是string。如果不指定数据类型或修改数据类型的话,就会报错。

可以通过这个方式解决:

# 指定某一列的数据类型为string
df = pd.read_excel(filename, sheet_name='Sheet1',dtype={'password': str})
  1. session_log不可用
    网络自动化01那篇文章中,我有提到过设备信息中有一个参数是session_log,可以用来记录这次ConnectHandler类所创建的对象通过ssh隧道执行的所有操作的内容,并打印到session_log指定的文件中
    但在这篇文章使用的设备信息表xlsx,如果添加了session_log就会报错。
    我最终没有解决,所以我在表格中去除了这个字段。

写在最后

这是第二篇,写的比较简单,但在真实测试这个脚本时,就遇到了两个问题。
所以实践出真知,请大家务必多实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905716.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Knowledge-refined Denoising Network for Robust Recommendation

Knowledge-refined Denoising Network for Robust Recommendation&#xff08;Sigir23&#xff09; 摘要 知识图&#xff08;KG&#xff09;包含丰富的边信息&#xff0c;是提高推荐性能和可解释性的重要组成部分。然而&#xff0c;现有的知识感知推荐方法直接在KG和用户-项目…

数据结构 之 图的 最小生成树(十二)

提示&#xff1a;本篇难点&#xff1a; 生成树概念的理解 重点&#xff1a;是普利姆算法、克鲁斯卡尔算法构造最小生成树 超超超重点的是 普利姆和克鲁斯卡尔构造最小生成树的算法&#xff0c;这部分可能需要同学们自行去学习了。 一定要理解后用代码能够实现这两个算法已经了解…

如何清空回收站后在 Windows 11/10 中恢复已删除的文件

这篇文章将解释如何将已删除的文件、文件夹和其他项目从回收站还原或恢复到原始位置。有时&#xff0c;我们最终会删除重要的文件和文件夹&#xff0c;然后我们不知道如何将它们恢复到原来的位置。但是您不必担心&#xff0c;因为这篇针对初学者的帖子将详细指导您完成所有步骤…

Axios 请求超时设置无效的问题及解决方案

文章目录 Axios 请求超时设置无效的问题及解决方案1. 引言2. 理解 Axios 的超时机制2.1 Axios 超时的工作原理2.2 超时错误的处理 3. Axios 请求超时设置无效的常见原因3.1 配置错误或遗漏3.2 超时发生在建立连接之前3.3 使用了不支持的传输协议3.4 代理服务器或中间件干扰3.5 …

不懂知识图谱的你,正在失去转行做AI产品经理的机会

伴随着AI这块新的投资风口&#xff0c;新兴企业对AI人才的需求也是激增。所以&#xff0c;你准备好了么&#xff1f; 一、AI来了&#xff0c;你被OUT了&#xff0c;有人却已在快车道上了 给你讲个恐怖的故事&#xff1a;我今年&#xff0c;32岁了&#xff01;三十岁左右是一生…

Generating /run/initramfs/rdsosreport.txt

Linux中遇到Generating /run/initramfs/rdsosreport.txt 第一步&#xff1a;首先输入 ls /dev/mapper 第二步&#xff1a;输入 xfs_repair /dev/mapper/centos-root -L 第三步&#xff1a;重启reboot 不说原因了&#xff0c;直接上解决方式&#xff1a; 第一步&#xff1a;首先…

纯CSS实现UI设计中常见的丝带效果(5)

原文传送门&#xff1a;纯CSS实现UI设计中常见的丝带效果 网页中的丝带效果在设计中扮演着多重角色&#xff0c;其作用可以归纳为以下几个方面&#xff1a; 视觉吸引与装饰 增强视觉吸引力&#xff1a;丝带效果以其独特的形态和色彩&#xff0c;能够迅速吸引用户的注意力&…

OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR

文章目录 一、信用卡数字识别1.1 模板匹配1.2 匹配多个对象1.3 处理数字模板1.4 预处理卡片信息&#xff0c;得到4组数字块。1.5 遍历数字块&#xff0c;将卡片中每个数字与模板数字进行匹配 二、人脸检测2.1人脸检测算法原理2.2 OpenCV中的人脸检测流程 三、车牌识别3.1 安装t…

音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)

由于本文篇幅较长&#xff0c;分为上、中、下三篇。 一、引言 通过FFmpeg命令可以获取到FLV文件的音频压缩编码格式、音频采样率、通道数、音频码率信息&#xff1a; ./ffmpeg -i XXX.flv 而由《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简…

深度学习之降维和聚类

1 降维和聚类 1.1 图解为什么会产生维数灾难 ​ 假如数据集包含10张照片&#xff0c;照片中包含三角形和圆两种形状。现在来设计一个分类器进行训练&#xff0c;让这个分类器对其他的照片进行正确分类&#xff08;假设三角形和圆的总数是无限大&#xff09;&#xff0c;简单的…

什么是 L0、L1、L2 和 L3 区块链层以及为什么需要它们

区块链的 L 层越来越多地出现在新闻中&#xff08;例如&#xff0c;A16z 投资基金正在投资以太坊Optimism上的 L2 解决方案&#xff0c;或者 Orbs 的 L3 解决方案将其解决方案扩展到 TON 区块链&#xff09;。 层的概念是区块链的一种分类&#xff0c;对于快速了解特定项目如何…

数据分析可视化:散点图矩阵与雷达图的生成

目录 一、经营数据绘制散点图矩阵1.代码解释2.代码说明3.注意事项 二、雷达图1.代码解释2.代码说明3. 注意事项4. 运行代码 总结 一、经营数据绘制散点图矩阵 import seaborn as sns import pandas as pd rc {font.sans-serif:Arial Unicode MS,axes.unicode_minus:False} sn…

硅谷甄选(9)SKU模块

SKU模块 8.1 SKU静态 <template><el-card><el-table border style"margin: 10px 0px"><el-table-column type"index" label"序号" width"80px"></el-table-column><el-table-columnlabel"名称…

ubuntu 异常 断电 日志 查看

sudo less /var/log/syslog 搜 Linux version

解决rabbitmq-plugins enable rabbitmq_delayed_message_exchange :plugins_not_found

问题&#xff1a;我是在docker-compose环境部署的 services:rabbitmq:image: rabbitmq:4.0-managementrestart: alwayscontainer_name: rabbitmqports:- 5672:5672- 15672:15672environment:RABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./rabbitmq/…

HCIA(DHCP服务)

第三节 开启DHCP服务 创建地址池 调用全局服务 [R1]dhcp enable 开启DHCP服务 [R1]ip pool AA 创建地址池 [R1-ip-pool-AA]network 192.168.1.0 mask 24 写入网段 [R1-ip-pool-AA]gateway-list 192.168.1.1 写入网关 [R1-ip-pool-AA]dns-list 8.8.8.8 114.1…

GB/T 28046.2-2019 道路车辆 电气及电子设备的环境条件和试验 第2部分:电气负荷(6)

写在前面 本系列文章主要讲解道路车辆电气及电子设备的环境条件和试验GB/T 28046标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解GB/T 28046标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 第2部分&#xff1a;电气负荷 附录C C.5…

ES8388 —— 带耳机放大器的低功耗立体声音频编解码器(3)

接前一篇文章&#xff1a;ES8388 —— 带耳机放大器的低功耗立体声音频编解码器&#xff08;2&#xff09; 二、详细描述 4. 时钟模式和采样频率 根据输入的串行音频数据采样频率&#xff0c;ES8388可以在两种速度模式下工作&#xff1a;单速或双速。表1列出了这两种模式下的…

ChatGPT 高级语音模式已登陆 Windows 和 Mac 平台,对话更自然

OpenAI ChatGPT 高级语音模式已登陆 Windows 和 Mac 平台&#xff0c;对话更自然&#xff0c;拟态更逼真 OpenAI 于10月31日正式宣布&#xff0c;ChatGPT 的高级语音模式&#xff08;Advanced Voice Mode&#xff0c;简称 AVM&#xff09;现已登陆 Windows 和 Mac 平台。基于最…

鸿道Intewell操作系统架构介绍之Intewell-Hyper I 虚拟化构型

鸿道Intewell-Hyper I 虚拟化构型是鸿道Intewell-V虚拟化架构下的构型体系&#xff01;鸿道Intewell-V是科东软件自主研发的实时虚拟化操作系统&#xff0c;包括鸿道Intewell-Hyper I 和鸿道Intewell-Hyper II。鸿道Intewell-V可以实现多个操作系统在同一物理硬件上并行运行&am…