Python ciscoconfparse для поиска интерфейсов выключения и всего блока интерфейса?

#python-3.x #cisco #cisco-ios #ciscoconfparse

#python-3.x #cisco #cisco-ios #ciscoconfparse

Вопрос:

В следующих примерах будет использоваться эта конфигурация, которая взята из 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
 

Это код, который также взят из 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)
 

Вывод

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

Код работает просто отлично. Но вместо простого отображения Shutdown: interface GigabitEthernet 1/1 можно ли отобразить весь interface GigabitEthernet 1/1 блок в выходных данных, который:

 interface GigabitEthernet 1/1
 switchport mode trunk
 shutdown
 

Ответ №1:

Я предполагаю, что вы ищете find_blocks .

find_blocks(linespec, exactmatch=False, ignore_ws=False). Найдите всех братьев и сестер, соответствующих linespec, затем найдите всех родителей этих братьев и сестер. Возвращает список строк конфигурации, отсортированных по номеру строки, наименьшему первому

Взгляните на документацию Ciscoconfparse API, которая включает пример.

Так что, я думаю, это будет выглядеть примерно так:

 from ciscoconfparse import CiscoConfParse

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

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