Нужна помощь в выяснении, как разобрать и извлечь файл в режиме порта?
У меня есть текстовый файл, который содержит следующую информацию:
interfaces {
ge-2/0/0 {
description "site1;;hostname1;ge-16/0/9;;;TRUST;";
unit 0 {
family ethernet-switching {
port-mode trunk;
}
}
}
ge-2/0/2 {
description "site2;;hostname2;ge-16/0/8;;;TRUST;";
unit 0 {
family ethernet-switching {
port-mode trunk;
}
}
}
С помощью других я смог извлечь идентификатор интерфейса (ge-2/0/0), а также описание.
Код для этого выглядит следующим образом:
from ciscoconfparse import CiscoConfParse
parse = CiscoConfParse("testconfig.txt", syntax="junos")
intfs = parse.find_objects_w_parents(r'^interfaces', r'^\s+ge-')
for intfobj in intfs:
intf_name = intfobj.text.strip()
descr = intfobj.re_match_iter_typed(r'description\s+"(\S.+?)"$', group=1)
print ('Intf: {0}, {1}'.format(intf_name, descr))
Это дает мне результат:
Intf: ge-2/0/0, site1;;hostname1;ge-16/0/9;;;TRUST;
Intf: ge-2/0/2, site2;;hostname2;ge-16/0/8;;;TRUST;
До сих пор это было огромно для меня, и я действительно думал, что смогу понять, как копать глубже в интерфейсе, чтобы извлечь "режим порта".
Мои попытки пока проваливаются.
Это общий ход мыслей, который я пытался откопать, но безрезультатно:
ltype = parse.find_objects_w_parents(r'^interfaces', r'^\s+ge-', r'^unit\s0', r'^family\sethernet-switching')
for ltypeobj in ltype:
pmode = intfobj.re_match_iter_typed(r'port-mode\s+"(\S.+?)"$', group=1)
print ('Port Mode: {0}'.format(pmode))
Я получаю следующее, и я просто не могу понять это.
Traceback (most recent call last):
File "convert.py", line 11, in <module>
ltype = parse.find_objects_w_parents(r'^interfaces', r'^\s+ge-', r'^unit\s0', r'^family\sethernet-switching')
TypeError: find_objects_w_parents() takes from 3 to 4 positional arguments but 5 were given
Любой совет по выполнению этого будет принята с благодарностью.
1 ответ
Проверьте, работает ли этот пример для вас
import re
for i in re.findall('(ge-\d/\d/\d).*\n\s+description\s+(.*)(\n\s+.*){2}\n\s+port-mode\s(.*);', x):
print 'interface: ', i[0]
print 'description: ', i[1]
print 'port mode: ', i[-1]
выход:
interface: ge-2/0/0
description: "site1;;hostname1;ge-16/0/9;;;TRUST;";
port mode: trunk
interface: ge-2/0/2
description: "site2;;hostname2;ge-16/0/8;;;TRUST;";
port mode: trunk