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

网络自动化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,sw1

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']
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.kler.cn/a/386260.html

相关文章:

  • 现代无线通信接收机架构:超外差、零中频与低中频的比较分析
  • 有了Makefile, CMake存在的意义是什么?如何借助Makefile构建ObjC语言编译环境?如何获取编译器的版本号?
  • 计算机网络 (1)互联网的组成
  • 一文窥见神经网络
  • A029-基于Spring Boot的物流管理系统的设计与实现
  • 【Excel】ToRow超级查找函数
  • Docker 基础命令简介
  • Hive 实现查询用户连续三天登录记录
  • 【Ubuntu学习】Ubuntu无法使用vim命令编辑
  • 线程隔离和熔断降级并配置对应的服务降级
  • Wecom酱搭建企业微信发送消息
  • Leetcode:26. 删除有序数组中的重复项——Java快慢指针暴力解法
  • 华为云计算HCIE-Cloud Computing V3.0试验考试北京考场经验分享
  • 实战项目:通过自我学习让AI学习五子棋 - 1 - 项目定义
  • 【C语言】文件操作(超万字解析+形象图解)
  • Jest进阶知识:React组件的单元测试
  • 万字长文详解JavaScript基础语法--前端--前端样式--JavaWeb
  • redis 写入权限配置
  • 常用的 Lambda 表达式案例解析
  • 《 C++ 修炼全景指南:十九 》想懂数据库?深入 B 树的世界,揭示高效存储背后的逻辑
  • 不加锁解决线程安全
  • AWS账号安全:如何防范与应对账号被盗风险
  • 【mysql相关】
  • 使用ChatGPT神速精读文献,12个高阶ChatGPT提示词指令,值得你复制使用
  • 哪些人群适合考取 PostgreSQL 数据库 PGCM 证书?
  • 【C++练习】使用海伦公式计算三角形面积