Используйте TextFSM для поиска разрешенных VLAN на транке - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь настроить шаблон TextFSM для NTC ANSI, который будет извлекать только Vlans, разрешенные для транка, из выходных данных команды «show interface trunk» и не может получить желаемое.Это дает мне все строки, а не только одну строку, которую я хочу.Выходные данные команды выглядят следующим образом:

switch#sh int g9/17 trunk

Port                Mode         Encapsulation  Status        Native vlan
Gi9/17              on           802.1q         trunking      1

Port                Vlans allowed on trunk
Gi9/17              501,503,513,540,950-957

Port                Vlans allowed and active in management domain
Gi9/17              501,503,513,540,950-957

Port                Vlans in spanning tree forwarding state and not pruned
Gi9/17              501,503,513,540,950-957

В этих выходных данных я хочу только вернуть строку ниже «Vlans позволено на транке», а не другие повторяющиеся строки, которые имеют ту же информацию.Мой шаблон выглядит так:

Value PORT (\S+)
Value VLANS (.*)

Start
  ^Port.*Vlans allowed on trunk -> Begin

Begin
  ^(?=\s{0,9}${PORT})\s+${VLANS} -> Record
  ^Port.*Vlans allowed and active in management domain -> End

1 Ответ

0 голосов
/ 18 мая 2018

Сделайте регулярные выражения более конкретными и получите желаемый результат (возможно:).

import io
import textfsm

template = io.StringIO("""\
Value Port (\S+(/\d+)?)
Value Vlans (\d+([-,]\d+)+)

Start
  ^Port\s+Vlans allowed on trunk$$ -> Begin

Begin
  ^${Port}\s+${Vlans}$$ -> Record
  ^Port\s+Vlans allowed and active in management domain$$ -> End
""")
fsm = textfsm.TextFSM(template)
result = fsm.ParseText("""\
switch#sh int g9/17 trunk

Port                Mode         Encapsulation  Status        Native vlan
Gi9/17              on           802.1q         trunking      1

Port                Vlans allowed on trunk
Gi9/17              501,503,513,540,950-957

Port                Vlans allowed and active in management domain
Gi9/17              501,503,513,540,950-957

Port                Vlans in spanning tree forwarding state and not pruned
Gi9/17              501,503,513,540,950-957
""")
print(result)

[['Gi9/17', '501,503,513,540,950-957']]
...