当前位置: 首页 > news >正文

网络自动化03:简单解释send_config_set方法并举例

目录

  • 拓扑图
    • 设备信息
  • netmiko涉及方法
  • send_config_set()方法的简单示例
    • 代码
    • 输出结果
    • 代码解释
      • 导入模块
      • 配置信息
      • `config_device_interface_description` 函数
      • 主程序块
      • 总结
  • send_config_set方法参数:
      • 1. enter_config_mode
      • 2. config_commands
      • 3. enter_config_mode
      • 4. error_pattern

拓扑图

在这里插入图片描述

设备信息

sw1 = {'device_type':'cisco_ios','ip':'192.168.100.11','username':'python','password':'123','session_log':'Log/sw1.log'
}
sw2 = {'device_type':'cisco_ios','ip':'192.168.100.12','username':'python','password':'123','session_log':'Log/sw2.log'
}
sw3 = {'device_type':'cisco_ios','ip':'192.168.100.13','username':'python','password':'123','session_log':'Log/sw3.log'
}
sw4 = {'device_type':'huawei','ip':'192.168.100.14','username':'python','password':'123','session_log':'Log/sw4.log'
}
sw5 = {'device_type':'huawei','ip':'192.168.100.15','username':'python','password':'123','session_log':'Log/sw5.log'
}

netmiko涉及方法

  1. send_config_set()
    自动进入设备的config模式,配置发送完成,设备接收到之后,它还会自动退出config模式
  2. save_config()
    netmiko自动输入对应平台的保存命令,并自动完成一部分交互。
    比如华为的savey

send_config_set()方法的简单示例

代码

from netmiko import ConnectHandler
from deviceinfo import sw4,sw1config_cisco = ['interface g0/0', 'des This_is_Cisco_G_0/0_interface']
config_huawei = ['interface g1/0/0', 'des This_is_huawei_G_1/0/0_interface', 'commit']
def config_device_interface_description(device):with ConnectHandler(**device) as ssh_device:ssh_device.enable()if device['device_type'] == 'cisco_ios':config_output = ssh_device.send_config_set(config_cisco)else:config_output = ssh_device.send_config_set(config_huawei)print('config output:')print(config_output)# netmiko的send_config_set会自动进入config配置模式并配置,但不会保存# 保存使用save_config()config_save_output = ssh_device.save_config()print('======================\n''config_save_output:')print(config_save_output)if __name__ == '__main__':for device in [sw4,sw1]:config_device_interface_description(device)

输出结果

config output:
system-view
Enter system view, return user view with return command.
[~sw4_huawei]interface g1/0/0
[~sw4_huawei-GE1/0/0]des This_is_huawei_G_1/0/0_interface
[~sw4_huawei-GE1/0/0]commit
[~sw4_huawei-GE1/0/0]return
<sw4_huawei>
======================
config_save_output:
save
Warning: The current configuration will be written to the device. Continue? [Y/N]:y
Now saving the current configuration to the slot 17 .
Info: Save the configuration successfully.
<sw4_huawei>config output:
configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
sw1(config)#interface g0/0
sw1(config-if)#des This_is_Cisco_G_0/0_interface
sw1(config-if)#end
sw1#
======================
config_save_output:
write mem
Building configuration...
Compressed configuration from 3153 bytes to 1805 bytes[OK]
sw1#

代码解释

这段代码的作用是通过使用 Netmiko 库,自动配置 Cisco 和 Huawei 网络设备的接口描述。以下是代码的逐步解释:

导入模块

from netmiko import ConnectHandler
from deviceinfo import sw4, sw1
  • netmiko:这是一个用于通过 SSH 连接网络设备并发送命令的 Python 库。
  • deviceinfo:这个模块可能包含了 sw4sw1 设备的连接信息(例如设备的 IP 地址、用户名、密码等)。

配置信息

config_cisco = ['interface g0/0', 'des This_is_Cisco_G_0/0_interface']
config_huawei = ['interface g1/0/0', 'des This_is_huawei_G_1/0/0_interface', 'commit']
  • config_cisco:针对 Cisco 设备的配置命令,设置接口 g0/0 的描述为 This_is_Cisco_G_0/0_interface
  • config_huawei:针对 Huawei 设备的配置命令,设置接口 g1/0/0 的描述为 This_is_huawei_G_1/0/0_interface,并且包含 commit 命令来提交配置。

config_device_interface_description 函数

def config_device_interface_description(device):with ConnectHandler(**device) as ssh_device:ssh_device.enable()if device['device_type'] == 'cisco_ios':config_output = ssh_device.send_config_set(config_cisco)else:config_output = ssh_device.send_config_set(config_huawei)print('config output:')print(config_output)config_save_output = ssh_device.save_config()print('======================\n''config_save_output:')print(config_save_output)
  • ConnectHandler(**device):使用 device 字典中的参数打开与设备的 SSH 连接(设备类型、IP 地址、用户名、密码等)。
  • ssh_device.enable():进入特权模式,允许进行配置更改。
  • 设备类型检查
    • 如果设备类型是 'cisco_ios',则发送 Cisco 特有的配置命令(config_cisco)。
    • 否则,发送 Huawei 特有的配置命令(config_huawei)。
  • send_config_set():将配置命令列表发送到设备,自动进入配置模式并应用配置。
  • save_config():保存配置更改(此步骤在退出配置模式后非常重要,以确保更改被持久化)。
  • 函数会打印配置命令执行的输出和保存操作的输出。

主程序块

if __name__ == '__main__':for device in [sw4, sw1]:config_device_interface_description(device)
  • 这个循环遍历 sw4sw1 两个设备(从 deviceinfo 模块导入),并对每个设备调用 config_device_interface_description 函数进行配置。

总结

  • 该脚本自动连接 Cisco 和 Huawei 设备,根据设备类型配置接口描述。
  • 对于 Cisco 设备,设置 g0/0 接口的描述;对于 Huawei 设备,设置 g1/0/0 接口的描述并提交更改。
  • 配置应用后,脚本会保存配置并打印配置输出和保存操作的结果。

这段代码简化了在多个设备上进行接口描述配置的操作,并且能够自动根据设备类型(Cisco 或 Huawei)选择不同的配置命令。

send_config_set方法参数:

1. enter_config_mode

是否进入配置模式config,默认True,会自动进入,输入config_commands参数中所有内容后,根据exit_config_mode的值是否自动退出特权模式

2. config_commands

需要执行的命令,一般用列表或元组。每一个成员都是发送配置的一行。

3. enter_config_mode

默认True,输入完命令后自动退出配置模式。

4. error_pattern

根据回显判断配置是否有误的正则。默认为空。如果设置了一个正则,匹配上后会自动暂停后续的命令发送。

    # error_pattern进行赋值,如果某行命令回显符合正则则会抛出异常,代码终止,配置不会继续下发config_output = conn.send_config_set(config_commands=config_cmds, error_pattern=r'Error:')

以上如果遇到Error后,会抛出异常。例如Error: Wrong parameter found at '^' position.,会抛出 raise ConfigInvalidException(msg) netmiko.ssh_exception.ConfigInvalidException: Invalid input detected at command: interface GE2/0/0

一般来说,华为的Error经常有'^',因此可以如下操作:

# 故意对一个不存在的端口进行配置config_cmds = ['interface GE2/0/0', 'description cofiged by netmiko', 'commit']# error_pattern进行赋值,如果某行命令回显符合正则则会抛出异常,代码终止,配置不会继续下发# 注意^在正则是开头的意思,需要转义config_output = conn.send_config_set(config_commands=config_cmds, error_pattern=r"'\^'")

最终会抛出异常:

 raise ConfigInvalidException(msg)
netmiko.ssh_exception.ConfigInvalidException: Invalid input detected at command: interface GE2/0/0

相关文章:

网络自动化03:简单解释send_config_set方法并举例

目录 拓扑图设备信息 netmiko涉及方法send_config_set()方法的简单示例代码输出结果代码解释导入模块配置信息config_device_interface_description 函数主程序块总结 send_config_set方法参数&#xff1a;1. enter_config_mode2. config_commands3. enter_config_mode4. error…...

跳表原理笔记

课程地址 跳表是一种基于随机化的有序数据结构&#xff0c;它提出是为了赋予有序单链表以 O(logn) 的快速查找和插入的能力 创建 首先在头部创建一个 sentinel 节点&#xff0c;然后在 L1 层采用“抛硬币”的方式来决定 L0 层的指针是否增长到 L1 层 例如上图中&#xff0c;L…...

计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

AI开发-三方库-torch-torchvision

1 需求 数据集&#xff1a;torchvision.datasets torchvision.datasets.MNIST数据变换&#xff1a;torchvision.transforms torchvision.transforms.Composetorchvision.transforms.ToTensortorchvision.transforms.Normalize模型&#xff1a;torchvision.models可视化工具&…...

解析 MySQL 数据库容量统计、存储限制与优化技巧

管理 MySQL 数据库时&#xff0c;了解数据库中的数据量和存储占用情况是非常重要的&#xff0c;尤其是在面对大规模数据时。无论是为了优化数据库性能&#xff0c;还是为了进行容量规划&#xff0c;准确地统计数据库的容量可以帮助我们做出更好的决策。mysql的客户端工具是Navi…...

智能工厂的软件设计 思维进阶与数学程序

本文要点 讨论 “智能工厂的软件设计”中的“数学程序”。 这里 “数学程序” 是指能“格物致知”来理解“相续”一词。 完整的表述是&#xff1a; 思想素养提升的 思维进阶法&#xff08;三种 数学程序 &#xff1a; 格物致知 &#xff09;之思维导图&#xff1a; 二叉树及其…...

技术速递|GitHub Copilot upgrade assistant for Java 技术预览发布!

作者&#xff1a;Nick Zhu - Senior Program Manager 排版&#xff1a;Alan Wang 随着人工智能和大型语言模型&#xff08;LLMs&#xff09;的不断发展&#xff0c;Agent&#xff08;“智能代理”&#xff09;和智能代理化工作流程正在迅速成为AI领域的下一个前沿。这些自主系统…...

淘宝有哪些API是用来获取商品列表的?(商品id列表)

淘宝商品详情接口item_get是通过商品id或者商品链接来获取商品详情数据的&#xff0c;但是不少客户是没有商品id的&#xff0c;这时需要通过接口来拿到商品id。 可以获取商品id的API有&#xff1a; item_search 通过关键字搜索商品列表 item_search_shop 获取店铺所有商品列…...

D59【python 接口自动化学习】- python基础之异常

day59 捕获异常常见问题 学习日期&#xff1a;20241105 学习目标&#xff1a;异常 -- 75 避坑指南&#xff1a;编写捕获异常程序时经常出现的问题 学习笔记&#xff1a; 捕获位置设置不当 设置范围不当 捕获处理设置不当 嵌套try-except语法错误 总结 位置&#xff0c;范围…...

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析 遇到的问题&#xff1a; 在使用 Spring 的 Async 注解开启异步处理时&#xff0c;遇到以下错误&#xff1a; The bean ServiceImplChannel could not be injected as a com.wn.order.pay.recharge.controller.Serv…...

从xss到任意文件读取

xss一直是一种非常常见且具有威胁性的攻击方式。然而&#xff0c;除了可能导致用户受到恶意脚本的攻击外&#xff0c;xss在特定条件下还会造成ssrf和文件读取&#xff0c;本文主要讲述在一次漏洞挖掘过程中从xss到文件读取的过程&#xff0c;以及其造成的成因。 0x01 前言 xss一…...

nuiapp vue3 uni-ui uni.uploadFile 图片上传

<div style"position: relative;margin-top: 0.8em;"> <div style"position: absolute;left: 1.5em;top: 2em;">施工图片</div> <div style"position: absolute; left: 7em;top: 0em;right: 0em;bottom…...

【计算机科学】位运算:揭开二进制世界的奥秘

位运算是计算机运算的一种基础操作&#xff0c;直接作用于数据的二进制位&#xff08;bit&#xff09;&#xff0c;在计算机中具有极高的效率。无论是编写高效算法&#xff0c;还是进行底层开发&#xff0c;位运算都扮演着重要角色。本文将从位运算的起源、常见操作符、应用场景…...

弹性裸金属服务器和传统裸金属服务器有什么区别?

弹性裸金属服务器是一种结合了传统裸金属服务器和云计算资源两种特点的服务器&#xff0c;是一种云计算服务&#xff0c;下面我们就来了解一下弹性裸金属服务器和传统裸金属服务器之间有什么区别吧&#xff01; 弹性裸金属服务器能够支持企业快速部署新的硬件和软件系统&#x…...

shodan(五)连接Mongodb数据库Jenkinsorg、net、查看waf命令

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 引言&#xff1a; 1.Shodan 是一个专门用于搜索连…...

ThingsBoard规则链节点:Push to Edge节点详解

引言 1. Push to Edge 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 边缘计算 3.2 本地数据处理 3.3 实时响应 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备管…...

基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力

作者&#xff1a;肯梦 本文将演示如何使用事件总线&#xff08;EventBridge&#xff09;&#xff0c;向量检索服务&#xff08;DashVector&#xff09;&#xff0c;函数计算&#xff08;FunctionCompute&#xff09;结合灵积模型服务 [ 1] 上的 Embedding API [ 2] &#xff0…...

【golang/navmesh】使用recast navigation进行寻路

目录 说在前面安装使用可视化 说在前面 go version&#xff1a;1.20.2 linux/amd64操作系统&#xff1a;wsl2detour-go版本&#xff1a;v0.2.0github&#xff1a;这里&#xff0c;求star! 安装 使用go mod安装即可go get github.com/o0olele/detour-go使用 使用场景模型构建n…...

【软考】Redis不同的数据类型和应用场景。

Redis的不同数据类型和对应的应用场景&#xff1a; Redis 数据类型及其应用场景 String&#xff08;字符串&#xff09; 特点&#xff1a;简单的值存储&#xff0c;支持二进制数据。应用场景&#xff1a; 缓存用户会话。缓存小的配置文件。缓存计数器。文章浏览量&#xff0…...

java 对人名和电话 脱敏-replaceAll

学习了《正则匹配人名》和《正则匹配电话号码》&#xff0c;如果要一起进行脱敏处理&#xff0c;改怎么做&#xff1f; 脱敏的&#xff0c;考虑配置规则&#xff0c;进行匹配的方式进行处理&#xff1a; 脱敏规则&#xff1a; DesensitizationRules Data public class Desens…...

计算机网络:网络层 —— 网络地址转换 NAT

文章目录 网络地址转换 NAT 概述最基本的 NAT 方法NAT 转换表的作用 网络地址与端口号转换 NAPTNAT 和 NAPT 的缺陷 网络地址转换 NAT 概述 尽管因特网采用了无分类编址方法来减缓 IPv4 地址空间耗尽的速度&#xff0c;但由于因特网用户数量的急剧增长&#xff0c;特别是大量小…...

【Pikachu靶场:XSS系列】xss之过滤,xss之htmlspecialchars,xss之herf输出,xss之js输出通关啦

一、xss之过滤 <svg onloadalert("过关啦")> 二、xss之htmlspecialchars javascript:alert(123) 原理&#xff1a;输入测试文本为herf的属性值和内容值&#xff0c;所以转换思路直接变为js代码OK了 三、xss之href输出 JavaScript:alert(假客套) 原理&#x…...

面向制造和装配的产品设计指南(二):面向装配的设计指南

参考引用 面向制造和装配的产品设计指南 1. 概述 1.1 装配的概念 装配是指把多个零件组装成产品&#xff0c;使得产品能够实现相应的功能并体现产品的质量&#xff0c;装配包含三层含义 把零件组装在一起实现相应的功能体现产品的质量 1.2 最好和最差的装配工序 1.3 面向装…...

Python中的PDF处理工具:PyPDF2和ReportLab使用指南

Python中的PDF处理工具&#xff1a;PyPDF2和ReportLab使用指南 在日常工作和项目中&#xff0c;PDF 文件处理是个常见需求&#xff0c;不论是合并报告、加密文档、填充表单&#xff0c;还是生成发票。Python 中有许多用于操作 PDF 文件的库&#xff0c;其中 PyPDF2 和 ReportL…...

【vxe-table】多选筛选项对列表的列进行动态的显示与隐藏

需求&#xff1a; 列表的组成部分由&#xff1a;一些固定的列&#xff0c;如:姓名&#xff0c;工号&#xff0c;以及 需要动态显示与隐藏的列&#xff0c;如&#xff1a;出勤、旷工、事假、病假等假勤类型 1、通过多选框多选&#xff0c;展示选中的列&#xff0c;未选中的不展示…...

微信小程序uniapp+vue飞机订票航空售票系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 对于小程序飞机订票信息管理所牵扯的信息管理及数据保存都是非常多的&#xff0c;举例像所有的管理员&#xff1b;管理员…...

如何取消Outlook中的循环会议

如何取消Outlook中的循环会议 参考链接&#xff1a;https://iknow.lenovo.com.cn/detail/195430 1、打开Outlook&#xff0c;进入 日历 视图界面&#xff1b; 2、 选择并双击要取消的循环会议&#xff1b; 3、 在 打开定期项目 对话框中选择整个序列&#xff0c;然后单击 确…...

Docker-- cgroups资源控制实战

上一篇&#xff1a;容器化和虚拟化 什么是cgroups&#xff1f; cgroups是Linux内核中的一项功能&#xff0c;最初由Google的工程师提出&#xff0c;后来被整合进Linux内核; 它允许用户将一系列系统任务及其子任务整合或分隔到按资源划分等级的不同组内&#xff0c;从而为系统…...

使用Python和Vosk库实现语音识别

使用Python和Vosk库实现语音识别 在人工智能和机器学习领域&#xff0c;语音识别技术正变得越来越重要。Python作为一种强大的编程语言&#xff0c;拥有丰富的库和框架&#xff0c;可以方便地实现语音识别功能。今天&#xff0c;我们将介绍如何使用Python中的SpeechRecognitio…...

stm32使用串口的轮询模式,实现数据的收发

------内容以b站博主keysking为原型&#xff0c;整理而来&#xff0c;用作个人学习记录。 首先在STM32CubeMX中配置 前期工作省略&#xff0c;只讲重点设置。 这里我配置的是USART2的模式。 会发现&#xff0c;PA2和PA3分别是TX与RX&#xff0c;在连接串口时需要TX对RX&…...