微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用ncclient模块使用Netconf解析和提取信息?

如何解决如何使用ncclient模块使用Netconf解析和提取信息?

我正在研究支持Netconf的Cisco 9300交换机(IOS-XE)。我正在尝试使用ncclient解析并提取接口Gigabitethernet 1/0/12的描述和VLAN信息,以下是Gi1 / 0/12的原始配置

interface GigabitEthernet1/0/12
 description *** UNIT-114 DATA & VOICE Port ***
 switchport access vlan 740
 switchport mode access
 switchport voice vlan 737
 spanning-tree portfast
end

下面是使用etree.tostring()方法将接口Gi1​​ / 0/12的XML对象转换为字符串格式。

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
    <interface>
      <GigabitEthernet>
        <name xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">1/0/12</name>
        <description>*** UNIT-114 DATA &amp; VOICE Port ***</description>
        <switchport>
          <access xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-switch">
            <vlan>
              <vlan>740</vlan>
            </vlan>
          </access>
          <mode xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-switch">
            <access/>
          </mode>
          <voice xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-switch">
            <vlan>
              <vlan>737</vlan>
            </vlan>
          </voice>
        </switchport>
        <spanning-tree xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-spanning-tree">
          <portfast/>
        </spanning-tree>
      </GigabitEthernet>
    </interface>
  </native>
</data>

我设法解析并提取了在Python脚本下运行的该接口的描述内容

from ncclient import manager
from lxml import etree

m = manager.connect(host='x.x.x.x',port=830,username='xxx',password='xxx',hostkey_verify=False,device_params={'name':'iosxe'},timeout=300)

FILTER = """
<filter>
        <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
        <interface>
            <GigabitEthernet>
                <name>1/0/12</name>
            </GigabitEthernet>
        </interface>
        </native>   
</filter>"""

interface = m.get_config('running',FILTER)

description = interface.data.find('.//{http://cisco.com/ns/yang/Cisco-IOS-XE-native}description')
print (description.text)

这返回了我想要的输出,即*** UNIT-114 DATA&VOICE Port ***

但是,当我尝试使用相同的find()方法解析VLAN编号(740和737)时,它不起作用,我得到的是 AttributeError:'nonetype'对象没有属性'text'。 (运行以下脚本后)。

from ncclient import manager
from lxml import etree

m = manager.connect(host='x.x.x.x',FILTER)

vlan = interface.data.find('.//{http://cisco.com/ns/yang/Cisco-IOS-XE-native}vlan')
print (vlan.text)

请告知我如何使用ncclient从其中解析并提取两个VLAN ID 740和737。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?