Python ciscoconfparse для поиска конфигурации PE (VRF, INTERFACE, настройка BGP) ⇐ Python
Python ciscoconfparse для поиска конфигурации PE (VRF, INTERFACE, настройка BGP)
Я пытаюсь использовать CiscoConfParse в конфигурации Cisco IOS для анализа полных конфигураций PE.
Цель состоит в том, чтобы собрать всю необходимую информацию из конфигурации PE (VRF, ИНТЕРФЕЙС, настройка BGP).
Я нашел эту библиотеку ciscoconfparse (https://pypi.python.org/pypi/ciscoconfparse).
Код работает только частично, и регулярное выражение соответствует только первому совпадению (см. также выходные данные ниже).
Код:
импортировать ciscoconfparse защита parse_config(файл_конфигурации): # Создайте объект CiscoConfParse из файла конфигурации config = ciscoconfparse.CiscoConfParse(config_file) # Разбор конфигураций VRF vrf_configs = [] для vrf_obj в config.find_objects(r'^vrf определение (\S+)'): vrf_config = { 'имя': vrf_obj.re_match(определение r'vrf (\S+)'), 'rd': vrf_obj.re_match(r'rd (\S+)'), 'export_rt': vrf_obj.re_match(r'route-target Export (\S+)'), 'import_rt': vrf_obj.re_match(r'route-target import (\S+)'), } vrf_configs.append(vrf_config) # Конфигурации интерфейса анализа интерфейс_конфигурации = [] для intf_obj в config.find_objects(r'^interface'): интерфейс_конфигурация = { 'имя': intf_obj.re_match(r'interface (\S+)'), 'описание': intf_obj.re_match(r'description (.+)'), 'vrf': intf_obj.re_match(r'vrf пересылка (\S+)'), 'interface_ip': intf_obj.re_match(r'ip адрес (\S+) (\S+)'), 'interface_dot1q': intf_obj.re_match(r'инкапсуляция dot1q (\S+)'), } интерфейс_configs.append(interface_config) # Анализ конфигураций BGP bgp_configs = [] для bgp_obj в config.find_objects(r'^router bgp (\S+)'): bgp_config = { 'as_number PE': bgp_obj.re_match(r'router bgp (\d+)'), 'bgp_address-family': bgp_obj.re_match(r'address-family ipv4 vrf (\S+)'), 'bgp_neighbor_ip': bgp_obj.re_match(r'neighbor (\S+) удаленный-как (\d+)'), 'bgp_neighbor_as': bgp_obj.re_match(r'remote-as (\d+)'), } bgp_configs.append(bgp_config) вернуть vrf_configs, Interface_configs, bgp_configs # Разбираем конфигурацию PE-маршрутизатора vrf_configs,interface_configs, bgp_configs = parse_config('pe_config.txt') # Распечатать проанализированные данные print("Проанализированные конфигурации VRF из конфигурации PE:") для vrf в vrf_configs: печать (ВРФ) print("\nРазобранные конфигурации интерфейса из конфигурации PE:") для intf в интерфейсе_configs: печать (интервал) print("\nРазобраны конфигурации BGP из конфигурации PE:") для bgp в bgp_configs: печать (bgp) Выход:
Проанализированные конфигурации VRF из конфигурации PE: {'name': 'BLUE', 'rd': '', 'export_rt': '', 'import_rt': ''} {'name': 'RED', 'rd': '', 'export_rt': '', 'import_rt': ''} Разобранные конфигурации интерфейса из конфигурации PE: {'name': 'FastEthernet2/0.2', 'description': '', 'vrf': '', 'interface_ip': '', 'interface_dot1q': ''} {'name': 'FastEthernet3/0.3', 'description': '', 'vrf': '', 'interface_ip': '', 'interface_dot1q': ''} Разобранные конфигурации BGP из конфигурации PE: {'as_number PE': '100', 'bgp_address-family': '', 'bgp_neighbor_ip': '', 'bgp_neighbor_as': ''} Конфигурация PE (pe_config.txt):
!-- БАЗОВАЯ конфигурация PE ------------ определение vrf СИНИЙ ряд 108:108 экспорт маршрута-цели 108:108 импорт маршрута-цели 108:108 ! семейство адресов ipv4 семья адресов выхода ! определение vrf КРАСНЫЙ ряд 79:79 экспорт маршрута-цели 79:79 импорт маршрута-цели 79:79 ! семейство адресов ipv4 семья адресов выхода ! интерфейс FastEthernet2/0.2 описание Клиент RED инкапсуляция dot1q 2 переадресация vrf КРАСНЫЙ IP-адрес 10.57.1.5 255.255.255.0 ! интерфейс FastEthernet3/0.3 описание Клиент СИНИЙ инкапсуляция dot1q 3 переадресация vrf СИНИЙ IP-адрес 10.58.1.5 255.255.255.0 ! маршрутизатор bgp 100 bgp журнал изменений соседей нет bgp по умолчанию, ipv4-unicast сосед 6.6.6.6 удаленный-как 100 сосед 6.6.6.6 источник обновления Loopback0 ! семейство адресов ipv4 семья адресов выхода ! семейство адресов vpnv4 сосед 6.6.6.6 активировать сосед 6.6.6.6 расширенное сообщество отправки семья адресов выхода ! семейство адресов ipv4 vrf RED сосед 10.57.1.7 удаленный-как 79 сосед 10.57.1.7 активировать семья адресов выхода ! семейство адресов ipv4 vrf СИНИЙ сосед 10.58.1.8 удаленный-как 8 сосед 10.58.1.8 активировать семья адресов выхода ! !-- EOF ------------------------------- Может быть у кого-то есть хорошая идея?
Спасибо за ваш вклад.
Я ожидаю, что вся информация о VRF, интерфейсах и конфигурации BGP будет указана.
Проанализированные конфигурации VRF из конфигурации PE: {'name': 'VRF xx', 'rd': 'xx:xx', 'export_rt': 'xx:xx', 'import_rt': 'xx:xx'} Разобранные конфигурации интерфейса из конфигурации PE: {'name': 'FastEthernet2/0.2', 'description': 'xxx', 'vrf': 'VRF xx', 'interface_ip': 'ABCD 255.255.255.252', 'interface_dot1q': 'x'} Разобранные конфигурации BGP из конфигурации PE: {'as_number PE': '100', 'bgp_address-family': 'VRF xx', 'bgp_neighbor_ip': 'A.B.C.D', 'bgp_neighbor_as': 'xx'}
Я пытаюсь использовать CiscoConfParse в конфигурации Cisco IOS для анализа полных конфигураций PE.
Цель состоит в том, чтобы собрать всю необходимую информацию из конфигурации PE (VRF, ИНТЕРФЕЙС, настройка BGP).
Я нашел эту библиотеку ciscoconfparse (https://pypi.python.org/pypi/ciscoconfparse).
Код работает только частично, и регулярное выражение соответствует только первому совпадению (см. также выходные данные ниже).
Код:
импортировать ciscoconfparse защита parse_config(файл_конфигурации): # Создайте объект CiscoConfParse из файла конфигурации config = ciscoconfparse.CiscoConfParse(config_file) # Разбор конфигураций VRF vrf_configs = [] для vrf_obj в config.find_objects(r'^vrf определение (\S+)'): vrf_config = { 'имя': vrf_obj.re_match(определение r'vrf (\S+)'), 'rd': vrf_obj.re_match(r'rd (\S+)'), 'export_rt': vrf_obj.re_match(r'route-target Export (\S+)'), 'import_rt': vrf_obj.re_match(r'route-target import (\S+)'), } vrf_configs.append(vrf_config) # Конфигурации интерфейса анализа интерфейс_конфигурации = [] для intf_obj в config.find_objects(r'^interface'): интерфейс_конфигурация = { 'имя': intf_obj.re_match(r'interface (\S+)'), 'описание': intf_obj.re_match(r'description (.+)'), 'vrf': intf_obj.re_match(r'vrf пересылка (\S+)'), 'interface_ip': intf_obj.re_match(r'ip адрес (\S+) (\S+)'), 'interface_dot1q': intf_obj.re_match(r'инкапсуляция dot1q (\S+)'), } интерфейс_configs.append(interface_config) # Анализ конфигураций BGP bgp_configs = [] для bgp_obj в config.find_objects(r'^router bgp (\S+)'): bgp_config = { 'as_number PE': bgp_obj.re_match(r'router bgp (\d+)'), 'bgp_address-family': bgp_obj.re_match(r'address-family ipv4 vrf (\S+)'), 'bgp_neighbor_ip': bgp_obj.re_match(r'neighbor (\S+) удаленный-как (\d+)'), 'bgp_neighbor_as': bgp_obj.re_match(r'remote-as (\d+)'), } bgp_configs.append(bgp_config) вернуть vrf_configs, Interface_configs, bgp_configs # Разбираем конфигурацию PE-маршрутизатора vrf_configs,interface_configs, bgp_configs = parse_config('pe_config.txt') # Распечатать проанализированные данные print("Проанализированные конфигурации VRF из конфигурации PE:") для vrf в vrf_configs: печать (ВРФ) print("\nРазобранные конфигурации интерфейса из конфигурации PE:") для intf в интерфейсе_configs: печать (интервал) print("\nРазобраны конфигурации BGP из конфигурации PE:") для bgp в bgp_configs: печать (bgp) Выход:
Проанализированные конфигурации VRF из конфигурации PE: {'name': 'BLUE', 'rd': '', 'export_rt': '', 'import_rt': ''} {'name': 'RED', 'rd': '', 'export_rt': '', 'import_rt': ''} Разобранные конфигурации интерфейса из конфигурации PE: {'name': 'FastEthernet2/0.2', 'description': '', 'vrf': '', 'interface_ip': '', 'interface_dot1q': ''} {'name': 'FastEthernet3/0.3', 'description': '', 'vrf': '', 'interface_ip': '', 'interface_dot1q': ''} Разобранные конфигурации BGP из конфигурации PE: {'as_number PE': '100', 'bgp_address-family': '', 'bgp_neighbor_ip': '', 'bgp_neighbor_as': ''} Конфигурация PE (pe_config.txt):
!-- БАЗОВАЯ конфигурация PE ------------ определение vrf СИНИЙ ряд 108:108 экспорт маршрута-цели 108:108 импорт маршрута-цели 108:108 ! семейство адресов ipv4 семья адресов выхода ! определение vrf КРАСНЫЙ ряд 79:79 экспорт маршрута-цели 79:79 импорт маршрута-цели 79:79 ! семейство адресов ipv4 семья адресов выхода ! интерфейс FastEthernet2/0.2 описание Клиент RED инкапсуляция dot1q 2 переадресация vrf КРАСНЫЙ IP-адрес 10.57.1.5 255.255.255.0 ! интерфейс FastEthernet3/0.3 описание Клиент СИНИЙ инкапсуляция dot1q 3 переадресация vrf СИНИЙ IP-адрес 10.58.1.5 255.255.255.0 ! маршрутизатор bgp 100 bgp журнал изменений соседей нет bgp по умолчанию, ipv4-unicast сосед 6.6.6.6 удаленный-как 100 сосед 6.6.6.6 источник обновления Loopback0 ! семейство адресов ipv4 семья адресов выхода ! семейство адресов vpnv4 сосед 6.6.6.6 активировать сосед 6.6.6.6 расширенное сообщество отправки семья адресов выхода ! семейство адресов ipv4 vrf RED сосед 10.57.1.7 удаленный-как 79 сосед 10.57.1.7 активировать семья адресов выхода ! семейство адресов ipv4 vrf СИНИЙ сосед 10.58.1.8 удаленный-как 8 сосед 10.58.1.8 активировать семья адресов выхода ! !-- EOF ------------------------------- Может быть у кого-то есть хорошая идея?
Спасибо за ваш вклад.
Я ожидаю, что вся информация о VRF, интерфейсах и конфигурации BGP будет указана.
Проанализированные конфигурации VRF из конфигурации PE: {'name': 'VRF xx', 'rd': 'xx:xx', 'export_rt': 'xx:xx', 'import_rt': 'xx:xx'} Разобранные конфигурации интерфейса из конфигурации PE: {'name': 'FastEthernet2/0.2', 'description': 'xxx', 'vrf': 'VRF xx', 'interface_ip': 'ABCD 255.255.255.252', 'interface_dot1q': 'x'} Разобранные конфигурации BGP из конфигурации PE: {'as_number PE': '100', 'bgp_address-family': 'VRF xx', 'bgp_neighbor_ip': 'A.B.C.D', 'bgp_neighbor_as': 'xx'}
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python Ciscoconfparse. Как получить полный блок по команде в середине?
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-