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

news2024/11/23 22:34:08

目录

  • 拓扑图
    • 设备信息
  • 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.coloradmin.cn/o/2237212.html

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

相关文章

vue2,vue3,uniapp,小程序实现前端url生成二维码

最近遇到一个项目&#xff0c;api返回url地址&#xff0c;前端通过地址生成二维码。 话不多说直接上代码&#xff0c;亲测有效&#xff0c;希望能帮助大家&#xff0c;同时如果有更好的方法希望大家能够分享 1、第一步&#xff0c;在项目的utils文件夹下面创建一个weapp-qrco…

openlayers实现图层裁剪,只展示关心区域,抹掉无关区域,“抠”地图

先给大家看一下效果: 很久没有用ol了,今天突发奇想,想完成一下在ol中如何实现图层裁剪,抹掉消除非关心区域的地图的操作。过去写了有关于遮罩和掩膜的教程,现在看来好像有点低级,不足以满足需求,于是我们重新来做一下。 首先要知道ol官方是支持canvas参数传递的,就是说…

SpringBoot框架:共享汽车管理的创新工具

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 共享汽车管理系统的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 投放地区管理 系统管理员可以对投放地区信息进行添加&#…

初学者指南:用例图——开启您的软件工程之旅

目录 背景&#xff1a; 基本组成&#xff1a; 关联&#xff08;Assciation&#xff09;&#xff1a; 包含&#xff08;Include&#xff09;&#xff1a; 扩展&#xff08;Extend&#xff09;&#xff1a; 泛化&#xff08;Inheritance&#xff09;&#xff1a; 完整银行…

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…

安信金业:3d黄金跟999足金的区别

黄金饰品&#xff0c;作为一种永恒的象征&#xff0c;一直备受人们的喜爱。随着工艺技术的不断革新&#xff0c;黄金饰品也呈现出多元化的风格。近年来&#xff0c;3D硬金逐渐走入人们的视野&#xff0c;与传统的999足金形成了鲜明的对比。那么&#xff0c;3D硬金和999足金究竟…

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计&#xff0c;使得Mac book有着非常棒的使用体验&#xff0c;但是在Mac电脑的使用时间过长时&#xff0c;电脑也会出现响应速度变慢或应用程序崩溃的情况&#xff0c;当发生的时候却不知道什么原因导致的&#xff0c;想要查询电脑…

c语言其实很简单----【数组】

TOC 1.输入10个学生成绩&#xff0c;计算及格人数&#xff0c;平均成绩&#xff0c;总成绩。 #include<stdio.h> int main(){float score[10];int i ,cut;float avar0.0,sum0.0;for(i0;i<10;i)scanf("%f",&score[i]);//输入10个学生的成绩cut0;for(i0…

音视频入门基础:H.264专题(22)——通过FFprobe显示H.264裸流每个packet的信息

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

centos7的maven配置

首先进入conf配置文件夹下的setting.xml 要改两个地方 第一&#xff1a;设置镜像源 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>c…

【优选算法 — 滑动窗口】滑动窗口小专题(一)

长度最小的子数组 长度最小的子数组 题目解析&#xff1a; 对于示例一 对于剩下两种示例&#xff1a; 解法一&#xff1a;暴力枚举 把所有的子数组全部枚举出来&#xff0c;并且枚举出的每一个子数组求和判断&#xff0c;返回长度最小的子数组&#xff1b; 时间复杂度 &…

从零创建vue+elementui+sass+three.js项目

初始化&#xff1a; vue init webpack projectnamecd projectnamenpm install支持sass: npm install sass --save-dev npm install sass-loader7.1.0 --save-dev npm install node-sass4.12.0 --save-devbuild/webpack.base.conf.js添加 rules: [...,{test: /\.scss$/,loade…

Golang--网络编程

1、概念 网络编程&#xff1a;把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息、共享数据、软件、数据信息等资源。 客户端&#xff08;Client&#xff09; 客户端是请求服务…

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络&#xff08;CNN&#xff0c;全连接网络&#xff09;的流程是前向传播、反向传播和参数更新&#xff0c;存在以下不足&#xff1a; 无法处理时序数据&#xff1a;时序数据长度一般不固定&#xff0c;而前馈神经网络要求输入和输出的维度是固定的&a…

Parallax.js:让智能设备视差效果更智能、更自然

今天给大家分享一款功能非常强大的javascript视觉差特效引擎插件&#xff1a;Parallax.js。 Parallax.js简介 Parallax.js是一个简单的&#xff0c;轻量级的视差引擎。你可以将它作为作为jQuery或Zepto插件来使用&#xff0c;也可以以纯JS的方式来使用。 最-最-最厉害的是它…

【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

文章目录 摘要一、引言二、主要方法1.3D Gaussian Splatting2.其他方法2.1 Gaussian Grouping&#xff08;ECCV 2024&#xff09;2.2 GARField 3. 2D Versatile 投影4. 3D Semantic Network4. 推理 四、实验1. 实验设置2.定量结果 论文&#xff1a;https://arxiv.org/pdf/2403.…

【功能介绍】信创终端系统上各WPS版本的授权差异

原文链接&#xff1a;【功能介绍】信创终端系统上各WPS版本的授权差异 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于信创终端操作系统上WPS Office各版本&#xff08;不包括政务版、企业版等&#xff09;之间的差异的文章。WPS Office作为国内广泛使用的办公软…

Elmo驱动器上位机软件的详细配置

续接上文,本文讲解Elmo驱动器上位机软件更详细的配置,重点关注,在电机的位置受到约束的情况下,完成驱动器的参数整定过程,以及一些调试方法 一 硬件介绍 本文使用的是另一套设备,假设电机的位置是受到约束的 1 编码器规格书 编码器已知信息是 :读数头是26位的,通讯…

「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用

本篇将带你实现一个番茄钟倒计时应用&#xff0c;用户可以设置专注时间和休息时间的时长&#xff0c;点击“开始专注”或“开始休息”按钮启动计时&#xff0c;应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助&#xff0c;并且还会加入猫咪图片…

SparkSql读取数据的方式

一、读取普通文件 方式一&#xff1a;给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二&#xff1a;直接调用对应数据源类型的方法 …