当前位置: 首页 > 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
http://www.lryc.cn/news/477546.html

相关文章:

  • 跳表原理笔记
  • 计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
  • AI开发-三方库-torch-torchvision
  • 解析 MySQL 数据库容量统计、存储限制与优化技巧
  • 智能工厂的软件设计 思维进阶与数学程序
  • 技术速递|GitHub Copilot upgrade assistant for Java 技术预览发布!
  • 淘宝有哪些API是用来获取商品列表的?(商品id列表)
  • D59【python 接口自动化学习】- python基础之异常
  • 解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析
  • 从xss到任意文件读取
  • nuiapp vue3 uni-ui uni.uploadFile 图片上传
  • 【计算机科学】位运算:揭开二进制世界的奥秘
  • 弹性裸金属服务器和传统裸金属服务器有什么区别?
  • shodan(五)连接Mongodb数据库Jenkinsorg、net、查看waf命令
  • ThingsBoard规则链节点:Push to Edge节点详解
  • 基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
  • 【golang/navmesh】使用recast navigation进行寻路
  • 【软考】Redis不同的数据类型和应用场景。
  • java 对人名和电话 脱敏-replaceAll
  • 计算机网络:网络层 —— 网络地址转换 NAT
  • 【Pikachu靶场:XSS系列】xss之过滤,xss之htmlspecialchars,xss之herf输出,xss之js输出通关啦
  • 面向制造和装配的产品设计指南(二):面向装配的设计指南
  • Python中的PDF处理工具:PyPDF2和ReportLab使用指南
  • 【vxe-table】多选筛选项对列表的列进行动态的显示与隐藏
  • 微信小程序uniapp+vue飞机订票航空售票系统
  • 如何取消Outlook中的循环会议
  • Docker-- cgroups资源控制实战
  • 使用Python和Vosk库实现语音识别
  • stm32使用串口的轮询模式,实现数据的收发
  • 105. UE5 GAS RPG 搭建主菜单