Python ciscoconfparse to find shutdown interfaces and the whole interface block?

折月煮酒 提交于 2021-01-24 10:43:18

问题


The following examples will use this configuration which is taken from http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide3

! filename:exampleswitch.conf
!
hostname ExampleSwitch
!
interface GigabitEthernet 1/1
 switchport mode trunk
 shutdown
!
interface GigabitEthernet 1/2
 switchport mode access
 switchport access vlan 20
 switchport nonegotiate
 no cdp enable
!
interface GigabitEthernet 1/3
 no switchport
 ip address 192.0.2.1 255.255.255.0

This is the code which is also taken from http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide7

from ciscoconfparse import CiscoConfParse

parse = CiscoConfParse('exampleswitch.conf', syntax='ios')

for intf_obj in parse.find_objects_w_child('^interface', '^\s+shutdown'):
    print("Shutdown: " + intf_obj.text)

Output

$ python script.py 
Shutdown: interface GigabitEthernet 1/1
$ 

The code is working just fine. But instead of just displaying Shutdown: interface GigabitEthernet 1/1, would it be possible to display the whole interface GigabitEthernet 1/1 block in the output which is:

interface GigabitEthernet 1/1
 switchport mode trunk
 shutdown

回答1:


I guess what you are looking for is find_blocks.

find_blocks(linespec, exactmatch=False, ignore_ws=False). Find all siblings matching the linespec, then find all parents of those siblings. Return a list of config lines sorted by line number, lowest first

Have a look at the Ciscoconfparse API Documentation which includes an Example.

So I guess it would look something like this:

from ciscoconfparse import CiscoConfParse

parse = CiscoConfParse('exampleswitch.conf', syntax='ios')

for intf_obj in parse.find_blocks(r'^\sshutdown'):
      print(intf_obj)



回答2:


find_blocks is definately the better solution. But if you're still want to use find_objects_w_child, you might need to iterate all_children as follows:

>>> from ciscoconfparse import CiscoConfParse
>>> parse = CiscoConfParse('exampleswitch.conf')
>>> for i in parse.find_objects_w_child('^interface', '^\s+shutdown'):
...     i.text
...     for j in i.all_children:
...         j.text
... 
'interface GigabitEthernet 1/1'
' switchport mode trunk'
' shutdown'
>>> 


来源:https://stackoverflow.com/questions/65599519/python-ciscoconfparse-to-find-shutdown-interfaces-and-the-whole-interface-block

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!