Сообщение об ошибке при запуске скрипта Python для разбора файлов конфигурации IOS

Мне удалось написать сценарий Python, который анализирует файлы конфигурации IOS, но я получаю сообщение об ошибке.

Ниже приведен скрипт:

import glob, os
from ciscoconfparse import CiscoConfParse
os.chdir("T:/")
for cfgfile in glob.glob("*-confg"):
    parse = CiscoConfParse("T:/" + cfgfile, factory=True, syntax='ios')
    host = parse.find_objects_dna(r'Hostname') 
    interfaces_with_helpers = parse.find_parents_w_child( "^interf", "ip helper-address 10.194.35.201")
    if interfaces_with_helpers:
        print (host[0].hostname)
    for interface in interfaces_with_helpers:
        print (interface)

Когда я запускаю сценарий, он, кажется, нормально работает, а затем выдает следующую ошибку:

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 186, in __init__ CiscoConfParse=self)
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2209, in __init__
self._list = self._bootstrap_obj_init(data)
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2433, in _bootstrap_obj_init
syntax='ios')
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\ciscoconfparse.py", line 2982, in ConfigLineFactory
comment_delimiter=comment_delimiter) # instance of the proper subclass
File "C:\Python34\lib\site-packages\ciscoconfparse-1.2.37-py3.4.egg\ciscoconfparse\models_cisco.py", line 1758, in __init__raise ValueError
ValueError
>>>

1 ответ

Похоже, неожиданный формат файла конфигурации для меня. Если вы посмотрите на источник, где ValueError выбрасывается в библиотеке CiscoConfParse:

    REGEX = r'^aaa\sgroup\sserver\s(?P<protocol>\S+)\s(?P<group>\S+)$'
    mm = re.search(REGEX, self.text)
    if not (mm is None):
        groups = mm.groupdict()
        self.protocol = groups.get('protocol', '')
        self.group = groups.get('group', '')
    else:
        raise ValueError

Похоже, что он наткнулся на файл конфигурации, где он ожидал, что строка удовлетворяет регулярное выражение ^aaa\sgroup\sserver\s(?P<protocol>\S+)\s(?P<group>\S+)$ и не удалось.

Пока вы перебираете результаты glob.glob("*-confg")Вам нужно будет распечатать имя файла, с которым вы сейчас работаете, чтобы увидеть, какой файл искажен. Затем либо исправьте этот файл конфигурации, либо сузьте, какие файлы конфигурации вы пытаетесь проанализировать.

Вы также можете просто проигнорировать ошибку следующим образом:

import glob, os
from ciscoconfparse import CiscoConfParse
os.chdir("T:/")
for cfgfile in glob.glob("*-confg"):
    try:
        parse = CiscoConfParse("T:/" + cfgfile, factory=True, syntax='ios')
    except ValueError:
        print "Malformed config file found. Skipping " + cfgfile
        continue
    host = parse.find_objects_dna(r'Hostname') 
    interfaces_with_helpers = parse.find_parents_w_child( "^interf", "ip helper-address 10.194.35.201")
    if interfaces_with_helpers:
        print (host[0].hostname)
    for interface in interfaces_with_helpers:
        print (interface)
Другие вопросы по тегам