Feb-21-2019, 05:30 PM
Hi All,
I have three dict post parsing configuration,need to match values, please guide
'prefix_name': 'YOU-BROADBAND_1105047237 in first dict, get below values from second dict
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '103.246.212.0/22'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '123.201.0.0/16'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '175.100.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.88.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.109.64.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.187.192.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '219.91.128.0/17'}
and match 'ip_address': '111.93.125.86' from second dict finally match
{'as_peer': '111.93.125.86', 'as_num': '18207'} in third dict.
and print out as
{'as_peer': '111.93.125.86', 'as_num': '18207',{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '103.246.212.0/22'} 'bgp-subnet': '123.201.0.0/16','bgp-subnet': '175.100.128.0/19','bgp-subnet': '203.88.128.0/19','bgp-subnet': '203.109.64.0/18','bgp-subnet': '203.187.192.0/18','bgp-subnet': '219.91.128.0/17'}
I have three dict post parsing configuration,need to match values, please guide
from ciscoconfparse import CiscoConfParse
from ciscoconfparse.ccp_util import IPv4Obj
import os
import re
from netaddr import *
import pprint
from ipaddress import *
#hostname = "DEL-CON-NE40E-X8-IAG-A5"
if __name__ == "__main__":
next_hops = []
conf_files_list = [x for x in os.listdir('.') if x.endswith('.conf')]
for files in conf_files_list:
#conf_process(files)
confparse = CiscoConfParse(files)
system_regex_pattern = r"^sysname"
hostname = confparse.find_lines(system_regex_pattern)
for line in hostname:
sysname = line.strip().split(' ')[1]
#print(sysname)
ip_static_routes= confparse.find_blocks(r"^ip route-static ")
for lines in ip_static_routes:
#print(sysname,lines)
routes = re.findall( r'[0-9]+(?:\.[0-9]+){3}', lines )
#print(len(routes))
if (len(routes)) == 3:
route = (' '.join(routes))
lan_network = route.split(' ')
lan_ip_pool = lan_network[0]+"/"+lan_network[1]
ip = IPNetwork(lan_ip_pool)
ip = str(ip)
next_hop = lan_network[2]
next_hops.append(next_hop)
#bgp_peers = confparse.find_blocks " ip ip-prefix "
ip_prefix = confparse.find_blocks(r"ip ip-prefix")
bgp_prefix_dict = {}
#dict for BGP prefixes
for line in ip_prefix:
if 'ip ip-prefix' in line:
prefix_name = line.strip().split(' ')[2]
subnet = line.strip().split(' ')[6]+"/"+line.strip().split(' ')[7]
bgp_subnet = str(IPNetwork(subnet))
#update Dict
bgp_prefix_dict.update({'prefix-name':prefix_name,'bgp-subnet':bgp_subnet})
print(bgp_prefix_dict)
bgp_peers_dict = {}
#dict for BGP peers
bgp_peers = confparse.find_blocks(r" peer ")
for peer in bgp_peers:
if 'import' in peer:
ip_addr = peer.strip().split(' ')[1]
bgp_prefix_name = peer.strip().split(' ')[3]
bgp_peers_dict.update({'ip_address':ip_addr, 'prefix_name':bgp_prefix_name})
print(bgp_peers_dict)
bgp_as_ip = {}
bgp_as_name = confparse.find_blocks(r"bgp 65000")
for details in bgp_as_name:
if 'as-number' in details:
as_peer = details.strip().split(' ')[1]
as_number = details.strip().split(' ')[3]
bgp_as_ip.update({'as_peer':as_peer, 'as_num':as_number})
print(bgp_as_ip)Output:{'ip_address': '14.98.66.130', 'prefix_name': 'Uzaina'}
{'ip_address': '14.98.82.190', 'prefix_name': 'WI_LINK_12105830371'}
{'ip_address': '14.98.85.202', 'prefix_name': 'MORADABAD_INTERNET_59105832429'}
{'ip_address': '14.141.116.137', 'prefix_name': 'TCL-IN'}
{'ip_address': '49.249.232.238', 'prefix_name': 'SIMSYS/564205818072'}
{'ip_address': '49.249.232.254', 'prefix_name': 'BRAINPULSE_12005807126'}
{'ip_address': '49.249.236.22', 'prefix_name': 'GUAVUS_NETWORK'}
{'ip_address': '111.93.41.130', 'prefix_name': 'PROGRESSION_INFONET'}
{'ip_address': '111.93.52.54', 'prefix_name': 'LEADING_EDGE_COMMUICATIONS_1105066669'}
{'ip_address': '111.93.58.218', 'prefix_name': 'CHI_NETWORKS'}
{'ip_address': '111.93.121.102', 'prefix_name': 'DENY_PRIVATE_IP'}
{'ip_address': '111.93.125.86', 'prefix_name': 'YOU-BROADBAND_1105047237'}
{'ip_address': '111.93.184.102', 'prefix_name': 'Tata_Teleservices'}
{'ip_address': '111.93.184.122', 'prefix_name': 'CLICKSOFTWARE_012405300802'}
{'ip_address': '111.93.184.254', 'prefix_name': 'MGRM_DIGITAL_CLOUD'}
{'ip_address': '111.93.193.18', 'prefix_name': 'VERISIGN_SERVICES'}
{'ip_address': '111.93.195.90', 'prefix_name': 'TOLUNA_INDIA'}
{'ip_address': '111.93.249.190', 'prefix_name': 'BLUE_SKY_BROADBAND'}
{'prefix-name': 'Tata_Teleservices', 'bgp-subnet': '59.161.164.0/22'}
{'prefix-name': 'Tata_Teleservices', 'bgp-subnet': '115.114.244.128/25'}
{'prefix-name': 'CLICKSOFTWARE_012405300802', 'bgp-subnet': '103.26.168.0/24'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '103.246.212.0/22'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '123.201.0.0/16'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '175.100.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.88.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.109.64.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.187.192.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '219.91.128.0/17'}
{'prefix-name': 'RATEGAIN_TECHNOLOGIES_12005796261', 'bgp-subnet': '103.211.187.0/24'}
{'prefix-name': 'RATEGAIN_TECHNOLOGIES_12005796261', 'bgp-subnet': '103.211.186.0/24'}
{'prefix-name': 'RATEGAIN_TECHNOLOGIES_12005796261', 'bgp-subnet': '103.242.87.0/24'}
{'as_peer': '14.98.66.130', 'as_num': '138287'}
{'as_peer': '14.98.82.190', 'as_num': '135778'}
{'as_peer': '14.98.85.202', 'as_num': '135182'}
{'as_peer': '14.141.116.137', 'as_num': '4755'}
{'as_peer': '49.249.232.238', 'as_num': '135797'}
{'as_peer': '49.249.232.254', 'as_num': '55711'}
{'as_peer': '49.249.236.22', 'as_num': '132282'}
{'as_peer': '111.93.41.130', 'as_num': '132760'}
{'as_peer': '111.93.52.54', 'as_num': '64522'}
{'as_peer': '111.93.58.218', 'as_num': '132542'}
{'as_peer': '111.93.121.102', 'as_num': '64543'}
{'as_peer': '111.93.125.86', 'as_num': '18207'}
{'as_peer': '111.93.184.102', 'as_num': '65384'}
{'as_peer': '111.93.184.122', 'as_num': '132871'}
{'as_peer': '111.93.184.254', 'as_num': '131256'}
{'as_peer': '111.93.193.18', 'as_num': '16838'}
{'as_peer': '111.93.195.90', 'as_num': '24103'}
{'as_peer': '111.93.249.190', 'as_num': '134945'}
{'as_peer': '182.156.72.98', 'as_num': '45820'}
{'as_peer': '182.156.197.254', 'as_num': '55441'}
{'as_peer': '182.156.211.142', 'as_num': '134975'}
{'as_peer': '2403:0:400::271', 'as_num': '4755'}wants to find and match values like'prefix_name': 'YOU-BROADBAND_1105047237 in first dict, get below values from second dict
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '103.246.212.0/22'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '123.201.0.0/16'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '175.100.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.88.128.0/19'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.109.64.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '203.187.192.0/18'}
{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '219.91.128.0/17'}
and match 'ip_address': '111.93.125.86' from second dict finally match
{'as_peer': '111.93.125.86', 'as_num': '18207'} in third dict.
and print out as
{'as_peer': '111.93.125.86', 'as_num': '18207',{'prefix-name': 'YOU-BROADBAND_1105047237', 'bgp-subnet': '103.246.212.0/22'} 'bgp-subnet': '123.201.0.0/16','bgp-subnet': '175.100.128.0/19','bgp-subnet': '203.88.128.0/19','bgp-subnet': '203.109.64.0/18','bgp-subnet': '203.187.192.0/18','bgp-subnet': '219.91.128.0/17'}
