网络自动化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就会报错。
    我最终没有解决,所以我在表格中去除了这个字段。

写在最后

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试类型与持续集成频率的关系

持续集成是敏捷开发的一个重要实践&#xff0c;可是究竟多频繁的集成才算“持续”集成&#xff1f; 一般来说&#xff0c;持续集成有3种常见的集成频率&#xff0c;分别是每分钟集成、每天集成和每迭代集成。项目组应当以怎样的频率进行集成&#xff0c;这取决于测试策略&…

制作一个简易恒流电子负载教程,实战教程,单片机程序,电路图,方案

师从&#xff1a;https://www.bilibili.com/read/cv4088568/ 题目是这样的&#xff1a; 设计和制作一台恒流&#xff08;CC&#xff09;工作模式的简易直流电子负载。其原理示意图如图1所示。 图1简易直流电子负载原理示意图 二、要求 1.基本要求 &#xff08;1&#xff09;…

日期类数据和控件管理

目录 QTime API QDate API QDateTime QDateTimeEdit API QCalendarWidget API 测试样例&#xff08;参考了《Qt6开发指南》&#xff09; (严肃提示&#xff1a;笔者认为这里的控件没有难点&#xff0c;本篇文章实际上是GPT辅助的代码整理和表格使用&#xff0c;笔者建…

PostgreSQL-06-入门篇-集合运算

文章目录 1. UNION 组合多个查询的结果集简介带有 ORDER BY 子句的 UNION设置样例表PostgreSQL UNION 示例1) 简单的 PostgreSQL UNION 示例2) PostgreSQL UNION ALL 示例3) 带 ORDER BY 子句 UNION ALL 示例 2. INTERSECT 取交集简介带 ORDER BY 子句的 INTERSECT 操作Postgre…

露营投影仪什么牌子好,中科极光A5 Pro Max开启投影新未来

伴随着现代学业工作繁重&#xff0c;人们的时间变得碎片化&#xff0c;对生活轻量化的需求也越来越高。便捷性、便利性、简易性开始成为人们的关注重点。而在简化、便捷的背后&#xff0c;品质是否能跟上成为了商品需要接受的考验。打造一间属于自己的私人小影厅&#xff0c;听…

当我们在微服务中使用API网关时,它是否会成为系统的瓶颈?这种潜在的瓶颈如何评估和解决?如何在微服务架构中保证高效请求流量?|API网关|微服务|异步处理

目录 1. API网关在微服务中的角色与重要性 2. API网关瓶颈的评估 2.1 请求延迟分析 2.2 并发请求量监控 2.3 内存和CPU使用情况 2.4 限流和熔断机制评估 2.5 日志分析 3. API网关瓶颈的解决方案 3.1 缓存机制优化 3.2 负载均衡优化 3.3 异步处理与消息队列 3.4 限流…

【python ASR】win11-从0到1使用funasr实现本地离线音频转文本

文章目录 前言一、前提条件安装环境Python 安装安装依赖,使用工业预训练模型最后安装 - torch1. 安装前查看显卡支持的最高CUDA的版本&#xff0c;以便下载torch 对应的版本的安装包。torch 中的CUDA版本要低于显卡最高的CUDA版本。2. 前往网站下载[Pytorch](https://pytorch.o…

mysql8.0.32升级到8.0.40

上篇8.0.32库的准备&#xff1a;mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No suc-CSDN博客 此篇测试升级到8.0.40 MySQL :: Download MySQL Community Server rootjyc:~# mysql -u root -pabcd1234 mysql: [Warning]…

从此告别图床失效:一个几乎可以代理所有图床的工具!

原项目 Github: https://github.com/webp-sh/webp_server_go 根据此项目制作的脚本工具 一键脚本&#xff1a; curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/webp-server.sh && chmod x webp-server.sh && ./webp-server.sh是的&…

JavaScript语法基础——变量,数据类型,运算符和程序控制语句(小白友好篇,手把手教你学会!)

一、JavaScript概述 JavaScript是一种高级编程语言&#xff0c;常用于网页开发和服务器端应用程序。它是一种动态类型语言&#xff0c;可以在浏览器中直接解释执行&#xff0c;而不需要编译。 脚本&#xff08;Script&#xff09;是一种与计算机程序相关的指令集或代码块&…

Jenkins-配置使用ssh拉取仓库代码,配置自动化构建打包(三)(云效)

文章目录 准备注意&#xff1a;流程&#xff1a; 检查之前是否配置过与代码仓库的连接生成密钥对手动在服务器中与代码仓库建立连接以生成 Known hosts file代码仓库端添加公钥Jenkins System-Publish over SSH中添加私钥Jenkins中创建项目&#xff0c;并使用私钥添加ssh凭据构…

镭眸ILS-F13测量型激光雷达:超远距激光雷达专家

镭眸F13是一款超远距离测量型激光雷达&#xff0c;专为需要在超远距离内实现移动物体轮廓数据测量的用户设计。它能够以25Hz的扫描频率&#xff0c;在120米内提供3厘米的扫描精度&#xff0c;解决了现有传感器无法满足的测量距离问题。与市场上其他产品如西克&#xff08;SICK&…

windows安装deepin双系统

最近入手了一台中柏N100的小主机&#xff0c;本来只想当个机顶盒&#xff0c;没想到性能还可以&#xff0c;就打算用它做一些日常的办公&#xff0c;无聊时想着能不能再装个Linux&#xff0c;就去Deepin官网查看了下方法&#xff0c; 在此记录 另外&#xff0c;欢迎来我的博客…

SAP-FICO 月结流程

一、财务月结 1、资产会计-固定资产折旧计提AFAB 正式运行之前&#xff0c;先测试运行&#xff0c;没有问题就正式运行 可以看到&#xff0c;没有错误 因为正式系统的资产会过于庞大&#xff0c;一般都是后台运行资产的折旧 点击程序--后台执行 AFBP查看运行日志&#xff0c…

深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)

一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中&#xff0c;TensorFlow 由 Google 开发&#xff0c;自 2015 年发布以来&#xff0c;凭借其灵活的计算图、自动微分功能以及跨平台支持等特点&#xff0c;迅速成为主流深度学习框架…

JVM—类加载器、双亲委派机制

目录 什么是类加载器 类加载器的分类 Bootstrap启动类加载器 通过启动类加载器加载用户jar包 Extension扩展类加载器和Application应用程序类加载器 通过扩展类加载器加载用户jar包 双亲委派机制 打破双亲委派机制 自定义类加载器 线程上下文类加载器 Osgi框架的类加…

flask第一个应用

文章目录 安装一、编程第一步二、引入配置三、代码解析 安装 python环境安装的过程就不重复赘述了&#xff0c;flask安装使用命令pip install Flask即可&#xff0c;使用命令pip show Flask查看flask版本信息 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供…

享元模式-实现大颗粒度对象缓存机制

详解 享元模式是一种结构型设计模式&#xff0c;其主要目的是通过共享尽可能多的相同部分来有效地支持大量细粒度的对象。它通过将对象的属性分为内在属性&#xff08;可以共享、不随环境变化的部分&#xff09;和外在属性&#xff08;根据场景变化、不能共享的部分&#xff0…

Flutter学习笔记(一)-----环境配置

一、android 环境 android这边可以参照godot的配置 1.装java Java Downloads | Oracle x64 Compressed Archive &#xff1a;下载后直接解压到某个位置&#xff0c;不用安装 x64 installer: 下载后双击安装 注意&#xff1a;不要去百度直接搜Java安装&#xff0c;这样你最多安…

JetBrains Clion Idea 等缓存文件和配置文件迁移

JetBrains 缓存文件和配置文件迁移 文件默认路径 缓存文件默认路径&#xff1a; %userprofile%/AppData/Local/JetBrains/应用名 如 C:/Users/wbl/AppData/Local/JetBrains/CLion2021.3日志文件默认路径&#xff1a;默认在配置文件目录下的log文件夹 %userprofile%/AppData…