Python如何实现网络自动化运维华为设备

 更新时间:2024年11月27日 14:36:47   作者:qq_2661138306  
本文介绍了如何使用Python实现华为设备的网络自动化运维,包括环境配置、设备配置、功能模块实现和SFTP文件传输测试

Python网络自动化运维华为设备

本文将讲述使用Python实现华为设备的网络自动化运维。

本次运维是基于Python 3.11环境,需要提前安装paramiko和ncclient第三方库。

使用eNSP仿真模拟器来模拟真实环境的拓扑图

首先需要保证宿主机与模拟器内的网络互通

我这里使用了192.168.10.0/24的本地适配器作为桥接网卡

测试互通性效果如下:

接下来配置登录LSW4交换机设备的本地账户

int vlan 1
ip add 192.168.10.2 24    //配置VLANif 1的地址用来连接设备
user-interface vty 0 4
authentication-mode aaa    //将虚拟远程登录的模式设置为AAA认证
protocol inbound ssh        //使能SSH协议连接功能
user privilege level 15    //用户权限为15,这是最高权限
quit
stelnet server enable        //使能设备stelnet服务的功能
ssh user test                //配置SSH用户test
ssh user test service-type stelnet     //将用户的服务类型改为stelnet
ssh user test authentication-type password    //将SSH用户test的登录模式改为密码模式
aaa                                            //进入AAA视图
local-user test password cipher  Huawei@123    //配置test账户的密码
local-user test privilege level 15            //配置test账号的权限为15
local-user test service-type ssh             //配置SSH账户的权限为SSH
//以上是connect和command模块

sftp server enable                            //使能SFTP服务
ssh user test service-type  all                 //开启test全部的服务
ssh user test sftp-directory flash:            //将用户test的sftp下载目录指定为flash:下
//以上是download模块

配置LSW6的聚合链路和OSPF协议用以测试

int eth-tr 1
mode lacp
trunkport g0/0/1
trunkport g0/0/2
//配置聚合链路

int vlan 1
ip add 192.168.10.4 24
//使用该地址登录设备

ospf 
area 0
net 0.0.0.0 0.0.0.0
//与LSW4建立OSPF邻居关系

LSW4上也要进行相应OSPF和聚合链路的配置

interface Eth-Trunk1
 mode lacp-static
#
interface GigabitEthernet0/0/2
 eth-trunk 1
#
interface GigabitEthernet0/0/3
 eth-trunk 1
//聚合链路

ospf 1
 area 0.0.0.0
  network 0.0.0.0 255.255.255.255
//配置OSPF协议

接下来进行CE2设备的配置

该设备主要用来进行netconf的功能测试

int vlan 1
ip add 192.168.10.3 24
//配置登录地址

int g1/0/0
undo shut
//开启接口

stelnet server enable    //使能stelnet服务

user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
//将远程登录模式设置为AAA模式,开启SSH登录功能

aaa
 local-user netconf password cipher Huawei@123
 local-user netconf service-type ssh
 local-user netconf level 3
//创建一个netconf账户,密码为Huawei@123,服务类型为SSH,权限为3
#
ssh user netconf
ssh user netconf authentication-type password
ssh user netconf service-type snetconf
//将用户netconf的认证类型改为密码类型,服务类型改为snetconf
将
#
netconf
protocol inbound ssh port 830
//netconf的端口号为830,允许netconf通过830号端口连接
q
#
snetconf server enable
//使能snetconf服务

下载好第三方库

ncclient,paramiko

在PyCharm环境内引入对应的库

import re,time,paramiko
from datetime import datetime
from config import parameter_dict,netconf1
from ncclient import manager
from ncclient.xml_ import to_ele
from threading import Thread

创建一个类

里面定义并实现六个功能模块:

class SW:
    def __init__(self):    //初始化,建立起与设备的SSH连接。
        self.session = paramiko.SSHClient()
        self.session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.session.connect(hostname='192.168.10.2',password='Huawei@123',username='test',port=22,allow_agent=False,look_for_keys=False)
        self.vty = self.session.invoke_shell()
        self.command('sc 0 te')
        print('连接成功')
    def command(self,command):    //向网络设备终端输入变量并输出回显,回显字符上限为999999,类型为utf-8
        self.vty.send(command+'\n')
        time.sleep(1)
        return self.vty.recv(999999).decode('utf-8')
    def parameter_info(self):    //定义监控数据参数方法,每个5分钟输出一次设备参数
        parameter_list = []
        while True:
            for i in parameter_dict.keys():
                pat = self.command(parameter_dict[i]['command'])
                print(pat)
                res = re.compile(parameter_dict[i]['re']).findall(pat)
                print(res)
                if i == 'fan': res = res if res else "All are fans faulty"
                parameter_list.append(f'{i}:{res}')
            print('\n'.join(parameter_list))
            time.sleep(60 * 5)
    def download(self):        //通过SFTP功能下载flash:/vrpcfg.zip文件,并每隔一天保存在本地W:\\TestPython文件夹内
        while True:
            with paramiko.Transport(('192.168.10.2',22)) as t:
                t.connect(username='test',password='Huawei@123')
                sftp = paramiko.SFTPClient.from_transport(t)
                sftp.get('/vrpcfg.zip',f'W:\\TestPython\\{datetime.now().strftime("%Y_%m_%d_%H_%M_%S")}.zip')
            print('下载成功')
            time.sleep(60 * 60 * 24)
    def netconf(self,xml):        //最后配置日志文件地址为10.1.60.2
        manager.connect(host='192.168.10.3',port=22,username='netconf',password="Huawei@123",allow_agent=False,hostkey_verify=False,device_params={"name":"huawei"}).rpc(to_ele(xml))
        print("设置成功")
    def start(self):            //定义多进程模块
        Thread(target=self.download).start()
        Thread(target=self.parameter_info).start()
if __name__ == "__main__":        //满足条件则运行该文件
    for i in netconf1.values():
        SW().start()
        SW().netconf(i)

需要配置一个名为config的xml文件

内容如下所示,运行后会查看该设备的风扇状态,电源状态,CPU利用率,内存使用率,OSPF邻居状态,以及聚合链路状态。

parameter_dict = {
"fan" : {"command":"display fan","re":"Normal"},
"power" : {"command":"display power","re":"Supply|NotSupply|Sleep|No"},
"cpu" : {"command":"display cpu-usage","re":"CPU Usage            : .+?%"},
"memory" : {"command":"display memory","re":"Memory Using Percentage Is: .+?%"},
"ospf" : {"command":"display ospf peer brief","re":"down|init|2-way|exstart|exchange|loading|Full"},
"lacp" : {"command":"display eth-trunk","re":"Up|Down"}
}

netconf1 = {
    'host_log': '''
            <edit-config>
    <target>
      <running/>
    </target>
    <default-operation>merge</default-operation>
    <error-option>rollback-on-error</error-option>
    <config>
      <syslog xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
        <syslogServers>
          <syslogServer operation="merge">
            <ipType>ipv4</ipType>
            <serverIp>10.1.60.2</serverIp>
            <isDefaultVpn>false</isDefaultVpn>
            <vrfName>_public_</vrfName>
            <timestamp>UTC</timestamp>
            <transportMode>tcp</transportMode>
          </syslogServer>
        </syslogServers>
      </syslog>
    </config>
  </edit-config>  
'''}

运行后就可以输出网络设备终端的回显内容了

以下是回显截图:

SFTP本地下载设备状态到指定路径测试

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pycharm远程连接服务器并配置python interpreter的方法

    pycharm远程连接服务器并配置python interpreter的方法

    这篇文章主要介绍了pycharm远程连接服务器并配置python interpreter的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 使用Python对mongo数据库中字符串型正负数值比较大小

    使用Python对mongo数据库中字符串型正负数值比较大小

    这篇文章主要介绍了使用Python对mongo数据库中字符串型正负数值比较大小,
    2023-04-04
  • Python使用pydub实现M4A转MP3转换器

    Python使用pydub实现M4A转MP3转换器

    这篇文章主要介绍了如何使用 wxPython 创建一个图形用户界面(GUI)应用程序,能够将 .m4a 文件转换为 .mp3 文件,感兴趣的可以了解下
    2024-11-11
  • Python reversed函数用法小结

    Python reversed函数用法小结

    reversed函数是Python中的内置函数之一,是对给定的序列返回一个逆序序列的迭代器,需要通过遍历/list/next()等方法获取作用后的值,本文给大家介绍Python reversed函数及用法,感兴趣的朋友一起看看吧
    2023-10-10
  • 解决pycharm运行出错,代码正确结果不显示的问题

    解决pycharm运行出错,代码正确结果不显示的问题

    今天小编就为大家分享一篇解决pycharm运行出错,代码正确结果不显示的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python实现汉诺塔递归算法经典案例

    python实现汉诺塔递归算法经典案例

    这篇文章主要大家分享了python实现汉诺塔递归算法经典案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 在CentOS6上安装Python2.7的解决方法

    在CentOS6上安装Python2.7的解决方法

    在CentOS6上yum安装工具是基于Python2.6.6的,所以在CentOS6上默认安装的是Python2.6.6,因为要在服务器系统为CentOS6上部署生产环境,但是代码都是基于Python2.7写的,所有遇到了问题,下面通过本文给大家介绍下在CentOS6上安装Python2.7的解决方法,一起看看吧
    2018-01-01
  • 在树莓派2或树莓派B+上安装Python和OpenCV的教程

    在树莓派2或树莓派B+上安装Python和OpenCV的教程

    这篇文章主要介绍了在树莓派2或树莓派B+上安装Python和OpenCV的教程,主要基于GTK库,并以Python2.7和OpenCV 2.4.X版本的安装作为示例,需要的朋友可以参考下
    2015-03-03
  • Tensorflow 查看变量的值方法

    Tensorflow 查看变量的值方法

    今天小编就为大家分享一篇Tensorflow 查看变量的值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python使用tcp实现局域网内文件传输

    python使用tcp实现局域网内文件传输

    这篇文章主要介绍了python使用tcp实现局域网内文件传输,文件包括文本,图片,视频等,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论