def get_router_hsrp( vpeosw_2_vpevce_map): parse = c.CiscoConfParse(VPE_CFG_TXT) testo = ['!','router hsrp'] vlan_tbm = get_vlan_to_be_migrated() #testo_temp1 = parse.find_blocks(r'^' + OLD_BE + '.+') #parse3 = c.CiscoConfParse(testo_temp1) testo_temp = parse.find_all_children(r'^router hsrp') parse2 = c.CiscoConfParse(testo_temp) #if_obj_list = parse2.find_objects('Ether') if_obj_list = parse2.find_objects(r'^ ' + OLD_BE + '.+') new_if_obj_list = [] for if_obj in if_obj_list: subif_tag = if_obj.text.split('.')[1] if subif_tag in vlan_tbm: old_if = if_obj.text old_if_lst = old_if.split() old_if_lst = old_if_lst[1].split('.') new_if = ' interface ' + vpeosw_2_vpevce_map[ old_if_lst[0] ] + '.' + old_if_lst[1] if_obj.re_sub(old_if,new_if) new_if_obj_list.append(if_obj) else: continue for if_obj in new_if_obj_list: testo += if_obj.ioscfg + ['!'] return testo
def test_clean_nat_pool_overload_basic_running_cfg(self): """ region 1 acls should be ignored """ cfg.CONF.set_override('enable_multi_region', True, 'multi_region') cfg.CONF.set_override('region_id', '0000002', 'multi_region') cfg.CONF.set_override('other_region_ids', ['0000001'], 'multi_region') router_id_dict = self.config_syncer.router_id_dict intf_segment_dict = self.config_syncer.intf_segment_dict segment_nat_dict = self.config_syncer.segment_nat_dict invalid_cfg = [] conn = self.driver._get_connection() asr_running_cfg = \ self._read_asr_running_cfg( 'asr_running_cfg.json') parsed_cfg = ciscoconfparse.CiscoConfParse(asr_running_cfg) invalid_cfg += self.config_syncer.clean_nat_pool_overload(conn, router_id_dict, intf_segment_dict, segment_nat_dict, parsed_cfg) self.assertEqual(0, len(invalid_cfg))
def test_interface_parsing_success(): raw_configs = fr.read_host_configs("test_topo", "Costa_Rica") confparser = ciscoconfparse.CiscoConfParse(raw_configs.splitlines()) res_ifaces = cp.parse_host_interfaces(confparser) expected_ifaces = [{ "name": "Fa0/0", "ip": "100.0.36.1/24", "cost": None, "area": None, "description": "To 100.0.36.0/24" }, { "name": "Fa1/1", "ip": "10.0.0.141/31", "cost": "1", "area": "0", "description": None }, { "name": "Fa0/1", "ip": "10.0.0.161/31", "area": "0", "cost": None, "description": "To Nicaragua" }, { "name": "Fa1/0", "ip": "10.0.0.117/31", "cost": "2", "area": "0", "description": "To NodeID9" }] assert (res_ifaces == expected_ifaces)
def create_sheet_for_vce_tag(ws, intf, dev_file): ''' Returns a list of dot1q tag taken on VCE from "intf" trunk''' myrow = 1 help_str = '' osw_vlan_set = set() parse = c.CiscoConfParse(dev_file) bepo_obj = parse.find_objects(r'^interface ' + intf) bepo_cfg = bepo_obj[0].ioscfg for line in bepo_cfg: s = line.split(' ') if len(s) >= 5: if s[3] == 'allowed' and s[5][0].isdigit(): help_str += s[5] + ',' elif s[3] == 'allowed' and s[5] == 'add': help_str += s[6] + ',' help_list = help_str[:-1].split(',') for elem in help_list: if elem.find('-') > 0: help_l = from_range_to_list(elem) for elemh in help_l: osw_vlan_set.add(int(elemh)) else: osw_vlan_set.add(int(elem)) result_l = list(osw_vlan_set) result_l.sort() for tag in result_l: ws.cell(row=myrow, column=1, value=int(tag)) myrow += 1
def get_po_vce_vsw1_301_and_1000(VSW_CFG_TXT_IN): vlan_final = [] parse1 = c.CiscoConfParse(VSW_CFG_TXT_IN) vlan1 = parse1.find_lines(r'^vlan') for v in vlan1: vlan_final.append(v.split()[1]) vlan_final.sort() vlan_final_s = ','.join(vlan_final) vlan_final = [] po_301_tot = [ '! Following PO301 has to be configured on VCE and on VSW', '!', 'interface port-channel301', ' service-policy type qos input VF-INGRESS', ' switchport trunk allowed vlan add ' + vlan_final_s ] po_1000_tot = [ 'interface port-channel1000', ' service-policy type qos input VF-INGRESS', ' switchport trunk allowed vlan add ' + vlan_final_s ] return po_301_tot, po_1000_tot
def get_net_in_area(OSW_CFG_TXT): ''' return a dict of kind: { area: [ipaddress('prefix/lenght'),] } ''' dict_net_in_area = dict() # { area: [ipaddress('prefix/lenght'),] } parse = c.CiscoConfParse(OSW_CFG_TXT) ospf_obj_list = parse.find_objects(r'^router ospf') for line in ospf_obj_list[0].ioscfg: hl = line.split() if hl[0] == 'network': net = hl[1] net_hostmask = hl[2] area = hl[4] if area not in dict_net_in_area: dict_net_in_area[area] = [ ipaddress.IPv4Network( net + '/' + net_hostmask)] else: dict_net_in_area[area].append( ipaddress.IPv4Network( net + '/' + net_hostmask)) for area in dict_net_in_area: dict_net_in_area[area] = list( ipaddress.collapse_addresses( dict_net_in_area[area])) return dict_net_in_area
def get_vlan_from_cfg(OSW_CFG_TXT): ''' from cfg get list of all L2 vlan ''' parse = c.CiscoConfParse(OSW_CFG_TXT) vlan_obj_list = parse.find_objects(r'^vlan \d+') return [obj.text.split(' ')[1] for obj in vlan_obj_list]
def get_cleaned_routes(OSW_CFG_TXT): # return a list of cleaned (with egress interfaces) routes ''' return a list with all OSW routes with the right egress interface ''' new_route_list = ['!', 'vrf context OPNET'] parse = c.CiscoConfParse(OSW_CFG_TXT) route_list = parse.find_lines(r'^ip route') parse.commit() l3_obj_list = parse.find_objects_w_child(r'^interface', r'^ ip address') for route in route_list: route_l = route.split() nh = route_l[4] if nh[0].isdigit( ): # interested in those routes that do not have exit interface in statement ip_nh = ipaddress.IPv4Address(nh) for l3_obj in l3_obj_list: if l3_obj.text != 'interface Loopback0': for elem in l3_obj.ioscfg: if elem[:11] == ' ip address': help_list = elem.split() ip_network = ipaddress.IPv4Network(help_list[2] + '/' + help_list[3], strict=False) if ip_nh in ip_network: nh_ifs = l3_obj.text[10:] route_l.insert(route_l.index(nh), nh_ifs) new_route = ' ' + ' '.join(route_l) else: new_route = ' ' + route new_route_list.append(new_route) return new_route_list + ['!']
def create_output_osw(self): ''' from <switches_>_command files creates output_commnad file with "<switch> command output" as lines ''' text_list = [] file_list = [ f for f in listdir(self.json_data[0]["base_dir"]) if isfile(join(self.json_data[0]["base_dir"], f)) and "OSW" in f ] for file in file_list: list_f = file.split('_') node = list_f[0] cfg = self.json_data[0]["base_dir"] + file parse = c.CiscoConfParse(cfg) obj_if_list = parse.find_objects_w_child('^interface .*Ethernet', 'service-policy') if len(obj_if_list) > 0: for obj_if in obj_if_list: line = node + " " + obj_if.text for obj_if_child in obj_if.all_children: if "service-policy" in obj_if_child.text: line = line + "\t" + obj_if_child.text text_list.append(line) text = '\n'.join(text_list) print(text) with open( self.json_data[0]["base_dir"] + self.json_data[0]["output_file_name"], 'a') as fout: fout.write(text) print('end writing')
def clean_hsrp_to_svi(cfg): ''' translate HSRP from IOS to NS-OX ''' config_svi_to_add = [] parse = c.CiscoConfParse(cfg) svi_hsrp_obj_list = parse.find_objects_wo_child(r'^interface Vlan', 'vrrp') svi_hsrp_list_h = [obj.ioscfg for obj in svi_hsrp_obj_list] svi_hsrp_list = list(itertools.chain.from_iterable(svi_hsrp_list_h)) for line in svi_hsrp_list: line_lst = line.lstrip().split() if line_lst[0] == 'standby': if len(line_lst) == 4: if line_lst[2] == 'ip': config_svi_to_add.append(' hsrp ' + line_lst[1]) config_svi_to_add.append(' ip ' + line_lst[3]) elif line_lst[2] == 'priority': config_svi_to_add.append(' priority ' + line_lst[3]) elif len(line_lst) == 3: if line_lst[2] == 'preempt': config_svi_to_add.append(' preempt') else: config_svi_to_add.append(' ERROR TO BE CHECKED ') elif line_lst[0] == 'interface': config_svi_to_add.append('!') config_svi_to_add.append(line) else: config_svi_to_add.append(line) return config_svi_to_add
def get_stp_conf(OSW_CFG_TXT, CMD_PATH, OSW_SWITCH, VCE_CFG_TXT_IN): map_mac_bridge = {} parse = c.CiscoConfParse(OSW_CFG_TXT) #stp_conf = parse.find_lines(r'^spanning-tree vlan|^no spanning-tree vlan' ) stp_conf = parse.find_lines(r'^no spanning-tree vlan') #comment this line stp_conf[0] = '!' + stp_conf[0] # insert vlan similar to 4093 without spanning-tree import json vlan_without_spt = [] with open(CMD_PATH + OSW_SWITCH + '_vlan_similar_to_4093.txt') as f: vlan_without_spt = json.load(f) if len(vlan_without_spt) > 0: stp_conf.append('no spanning-tree vlan {0}'.format( ','.join(vlan_without_spt))) stp_conf.append('!') mac_address = get_switch_mac_address(CMD_PATH, OSW_SWITCH) if mac_address is not None: map_mac_bridge[mac_address] = OSW_SWITCH #print mac_address map_vlan_macbridge = get_rb_per_vlan(CMD_PATH, OSW_SWITCH) for elem in map_vlan_macbridge: if map_vlan_macbridge[elem] == mac_address: map_vlan_macbridge[elem] = map_mac_bridge[mac_address] else: continue vlan_tbm_list = get_vlan_to_be_migrated(VCE_CFG_TXT_IN) migrating_vlan_lst = [ vlan for vlan in map_vlan_macbridge if vlan in vlan_tbm_list ] rb_vlan_lst = [ vlan for vlan in migrating_vlan_lst if map_vlan_macbridge[vlan] == OSW_SWITCH ] srb_vlan_lst = [ vlan for vlan in migrating_vlan_lst if map_vlan_macbridge[vlan] is not OSW_SWITCH ] rb_vlan_lst.sort(key=natural_keys) srb_vlan_lst.sort(key=natural_keys) # removes all vlans which do not require spanning tree rb_vlan_lst = [x for x in rb_vlan_lst if x not in vlan_without_spt] srb_vlan_lst = [x for x in srb_vlan_lst if x not in vlan_without_spt] line_rb = 'spanning-tree vlan {0} priority 24576'.format( ','.join(rb_vlan_lst)) line_srb = 'spanning-tree vlan {0} priority 28672'.format( ','.join(srb_vlan_lst)) stp_conf.append('!') stp_conf.append(line_rb) stp_conf.append(line_srb) #stp_conf.append('!') return stp_conf
def get_normalized_if_OSWVCEVSW_cfg(device, if_ntbm, mig_dict, qos_sp_def_dict, OSW_CFG_TXT,INPUT_XLS, SHEET): ''' return cfg as list of migrated and cleaned - fz clean_if_cfg - interfaces ''' intf_gr = get_if_xls_guardroot(INPUT_XLS, SHEET) intf_qos_dict = get_if_to_qos_xls_dict(device, INPUT_XLS, SHEET) parse = c.CiscoConfParse(OSW_CFG_TXT) intf_obj_list = parse.find_objects(r'^interface .*Ethernet') for intf_obj in intf_obj_list: if intf_obj.text in if_ntbm: intf_obj.delete() elif intf_obj.text in mig_dict: intf_obj.replace(intf_obj.text, mig_dict[intf_obj.text]) if intf_obj.text in intf_gr: intf_obj.append_to_family( 'spanning-tree guard root', auto_indent=True) if intf_obj.text in intf_qos_dict: intf_obj.append_to_family( qos_sp_def_dict[intf_qos_dict[intf_obj.text]], auto_indent=True) parse.commit() intf_obj_list = parse.find_objects(r'^interface .*Ethernet') cf_intf_list = [intf_obj.ioscfg + ['!'] for intf_obj in intf_obj_list] cf_intf_1 = list(itertools.chain.from_iterable(cf_intf_list)) cf_intf_2 = clean_if_cfg(cf_intf_1) cf_intf_3 = add_nonegotiationauto(cf_intf_2) cf_intf = add_shutdown(cf_intf_3, OSW_CFG_TXT) return cf_intf
def get_vlan_list_from_po(po, OSW_CFG_TXT): po_vlan1 = [] parse = c.CiscoConfParse(OSW_CFG_TXT) intf_obj = parse.find_objects(po) spur_list = [ re.findall( r'switchport trunk allowed vlan *[add]* ([\d+,-]*)', x) for x in intf_obj[0].ioscfg] spur_list0 = list(itertools.chain.from_iterable(spur_list)) spur_list1 = [x.split(',') for x in spur_list0] spur_list2 = list(itertools.chain.from_iterable(spur_list1)) for y in spur_list2: if '-' in y: m = from_range_to_list(y) for x in m: po_vlan1.append(x) else: po_vlan1.append(y) po_vlan_set = set(po_vlan1) po_vlan = list(po_vlan_set) po_vlan.sort(key=natural_keys) return po_vlan
def test_clean_interfaces_multi_region_disabled(self): """ In this test, we are simulating a cfg-sync, clean_interfaces for region 0000002 cfg-agent. Running-cfg only exists for region 0000001, but multi_region is disabled. At the end of test, we should expect zero entries in invalid_cfg. """ cfg.CONF.set_override('enable_multi_region', False, 'multi_region') intf_segment_dict = self.config_syncer.intf_segment_dict segment_nat_dict = self.config_syncer.segment_nat_dict invalid_cfg = [] conn = self.driver._get_connection() asr_running_cfg = self._read_asr_running_cfg( file_name='asr_running_cfg_no_R2.json') parsed_cfg = ciscoconfparse.CiscoConfParse(asr_running_cfg) invalid_cfg += self.config_syncer.clean_interfaces(conn, intf_segment_dict, segment_nat_dict, parsed_cfg) self.assertEqual(0, len(invalid_cfg))
def get_net_in_area(): ''' return a dict of kind: { area: [ipaddr('prefix/lenght'),] } ''' dict_net_in_area = dict() # { area: [ipaddr('prefix/lenght'),] } parse = c.CiscoConfParse(OSW_CFG_TXT) ospf_obj_list = parse.find_objects(r'^router ospf') #parse.commit() #L3intf_obj_list = parse.find_objects_with_child(r'^interface *.Ethernet', 'ip address') for line in ospf_obj_list[0].ioscfg: hl = line.split() if hl[0] == 'network': net = hl[1] net_hostmask = hl[2] area = hl[4] if area not in dict_net_in_area: dict_net_in_area[area] = [ ipaddr.IPNetwork(net + '/' + net_hostmask) ] else: dict_net_in_area[area].append( ipaddr.IPNetwork(net + '/' + net_hostmask)) for area in dict_net_in_area: dict_net_in_area[area] = ipaddr.collapse_address_list( dict_net_in_area[area]) return dict_net_in_area
def create_if_cfg_list(mig_map): ''' creates subif dest interfaces configuration ''' out_cfg_list = [] vlan_tbm = get_vlan_to_be_migrated() # vlan_tbm.append('801') # vlan_tbm.append('802') real_mig_map = {k:mig_map.get(k,None) for k in mig_map if k.split('.')[1] in vlan_tbm} parse = c.CiscoConfParse(VPE_CFG_TXT) int_obj_list = parse.find_objects(r'^interface') for int_obj in int_obj_list: int_obj.insert_after(' arp timeout 1500') int_obj.insert_after(' shutdown') parse.commit() int_obj_list = parse.find_objects(r'^interface') for int_obj in int_obj_list: if int_obj.text in real_mig_map: int_obj.replace(int_obj.text, real_mig_map[int_obj.text]) out_cfg_list.extend('!') out_cfg_list.extend(int_obj.ioscfg) elif int_obj.text not in real_mig_map: continue return out_cfg_list
def create_migartion_map(if_subif_m): ''' from VPE.cfg returns {interface_old.tag: interface_new.tag} ''' mig_map = {} parse = c.CiscoConfParse(VPE_CFG_TXT) int_obj_list = parse.find_objects(r'^interface') for int_obj in int_obj_list: if int_obj.text not in be2po_map: #int_obj.delete() continue elif int_obj.text in be2po_map: if int_obj.text in if_subif_m: for vtag in if_subif_m[int_obj.text]: srcvtag = vtag dstvtag = vtag if vtag == '801': srcvtag = '801' dstvtag = '1051' elif vtag == '802': srcvtag = '802' dstvtag = '1052' ifs_src = int_obj.text + '.' + srcvtag ifs_dst = NEW_BE + '.' + dstvtag mig_map[ifs_src] = ifs_dst return mig_map
def test_clean_interfaces_R2_run_cfg_present_multi_region_enabled(self): """ In this test, we are simulating a cfg-sync, clean_interfaces for region 0000002 cfg-agent. Existing running-cfg exists for region 0000001 and 0000002. At the end of test, we should expect zero entries in invalid_cfg. """ cfg.CONF.set_override('enable_multi_region', True, 'multi_region') cfg.CONF.set_override('region_id', '0000002', 'multi_region') cfg.CONF.set_override('other_region_ids', ['0000001'], 'multi_region') intf_segment_dict = self.config_syncer.intf_segment_dict segment_nat_dict = self.config_syncer.segment_nat_dict invalid_cfg = [] conn = self.driver._get_connection() asr_running_cfg = self._read_asr_running_cfg() # This will trigger gateway only testing # asr_running_cfg = \ # self._read_asr_running_cfg('asr_basic_running_cfg.json') parsed_cfg = ciscoconfparse.CiscoConfParse(asr_running_cfg) invalid_cfg += self.config_syncer.clean_interfaces(conn, intf_segment_dict, segment_nat_dict, parsed_cfg)
def test_clean_interfaces_R2_with_invalid_intfs(self): """ In this test, we are simulating a cfg-sync, clean_interfaces for region 0000002 cfg-agent. Existing running-cfg exists for region 0000001 and 0000002. At the end of test, we should expect two invalid intfs detected. invalid tenant router, int Po10.2536 (invalid segment-id) invalid ext-gw-port, int Po10.3000 (invalid HSRP VIP) """ cfg.CONF.set_override('enable_multi_region', True, 'multi_region') cfg.CONF.set_override('region_id', '0000002', 'multi_region') cfg.CONF.set_override('other_region_ids', ['0000001'], 'multi_region') intf_segment_dict = self.config_syncer.intf_segment_dict segment_nat_dict = self.config_syncer.segment_nat_dict invalid_cfg = [] conn = self.driver._get_connection() asr_running_cfg = \ self._read_asr_running_cfg( 'asr_running_cfg_with_invalid_intfs.json') parsed_cfg = ciscoconfparse.CiscoConfParse(asr_running_cfg) invalid_cfg += self.config_syncer.clean_interfaces(conn, intf_segment_dict, segment_nat_dict, parsed_cfg) # disabled for now self.assertEqual(2, len(invalid_cfg))
def further_interfaces(site_config, OSW_CFG_TXT, SHEET, OUTPUT_XLS): parse = c.CiscoConfParse(OSW_CFG_TXT) intf_obj_list = parse.find_objects( r'^interface .*Ethernet|^interface Port-channel.*') if_list_cfg = [intf.text for intf in intf_obj_list if len(intf.ioscfg) > 3] wb = load_workbook(OUTPUT_XLS) ws = wb[SHEET] MAX_ROW = ws.max_row START_ROW = MAX_ROW + 1 if_list_xls = get_col(ws, 1) len_if_list_xls = len(if_list_xls) len_if_list_cfg = len(if_list_cfg) if_set_xls = set(if_list_xls) if_set_cfg = set(if_list_cfg) if (len_if_list_cfg - len_if_list_xls) > 0: cfg_less_xls_list = list(if_set_cfg - if_set_xls) cfg_less_xls_list.sort(key=natural_keys) ws.cell( row=START_ROW, column=1 ).value = "Le seguenti interfaccie sono utilizzate nella cfg ma non compaiono nell' xlsx" for elem, line in zip( cfg_less_xls_list, range(START_ROW + 1, START_ROW + 1 + len(cfg_less_xls_list))): ws.cell(row=line, column=1).value = elem elif (len_if_list_cfg - len_if_list_xls) == 0: ws.cell(row=START_ROW, column=1).value = "Non Vi sono interfaccie aggiuntive" elif (len_if_list_cfg - len_if_list_xls) < 0: xls_less_cfg_list = list(if_set_xls - if_set_cfg) xls_less_cfg_list.sort(key=natural_keys) ws.cell( row=START_ROW, column=1 ).value = "Le seguenti interfaccie sono presenti nell XLSX ma non nella cfg--> VERIFICARE" for col in range(1, 16): ws.cell(row=START_ROW, column=col).fill = PatternFill(start_color='CCCCCC', end_color='CCCCCC', fill_type='solid') for elem, line in zip( xls_less_cfg_list, range(START_ROW + 1, START_ROW + 1 + len(xls_less_cfg_list))): ws.cell(row=line, column=1).value = elem wb.save(OUTPUT_XLS) dest_path = site_config.base_dir + site_config.site + "/DATA_SRC/XLS/OUTPUT_STAGE_1/" save_wb(wb, dest_path, site_config.switch + '_OUT_DB.xlsx')
def get_svi_from_cfg(): ''' from cfg get list of all svi interfaces ''' parse = c.CiscoConfParse(OSW_CFG_TXT) svi_obj_list = parse.find_objects(r'^interface Vlan') lst = [re.findall(r'^interface Vlan(\d+)',svi_obj.text)[0] for svi_obj in svi_obj_list] return lst
def parse_host(host_cisco_config: str) -> dict: confparser = ciscoconfparse.CiscoConfParse(host_cisco_config.splitlines()) parsed_configs = dict() parsed_configs["interfaces"] = parse_host_interfaces(confparser) # TODO: this just checks whether a router ospf section is present router: dict = parse_router(confparser) return parsed_configs
def get_if_from_cfg(OSW_CFG_TXT): ''' from cfg get list of all *Ethernet interface ''' parse = c.CiscoConfParse(OSW_CFG_TXT) intf_obj_list = parse.find_objects(r'^interface .*Ethernet') a = [obj.text for obj in intf_obj_list] a.sort(key=natural_keys) return a
def _get_ccp(config=None, config_path=None, saltenv="base"): """ """ if config_path: config = __salt__["cp.get_file_str"](config_path, saltenv=saltenv) if config is False: raise SaltException("{} is not available".format(config_path)) if isinstance(config, str): config = config.splitlines() ccp = ciscoconfparse.CiscoConfParse(config) return ccp
def get_details(SID): #TODO: get with open('/home/daniel/sgnog19/data/xrv.cfg') as current_config: conf = ciscoconfparse.CiscoConfParse(current_config, comment='!') iface_conf = conf.find_objects_w_child(r'interface', 'description {}'.format(SID))[0] for d in iface_conf.ioscfg: if 'interface' in d: iface = d.split(' ')[-1] if 'ipv4 address' in d: iface_ip = d.split(' ')[-2] netmask = d.split(' ')[-1] nbr_ip = find_nxthop(iface_ip, netmask.split('\n')[0]) bgpcfg = conf.find_objects(r'^router bgp')[0].ioscfg bgpcfg = ciscoconfparse.CiscoConfParse(bgpcfg) nbr = bgpcfg.find_objects("^ +neighbor {}".format(nbr_ip))[-1] # print(nbr) #nbr.ioscfg get route policy for i in nbr.ioscfg: if 'route-policy' and 'in' in i: rpl = i.split(" ")[-2] print(rpl) rpl_cfg = conf.find_objects(r"^route-policy {}".format(rpl))[-1] # print(rpl_cfg) for l in rpl_cfg.ioscfg: if "destination in" in l: tmp = l.split(")")[0] prefixset_name = tmp.split(" ")[-1] prx_set_cfg = conf.find_objects( "^prefix-set {}".format(prefixset_name))[-1] # prefixset = [i.lstrip(" ").strip(",") for i in prx_set_cfg.ioscfg[1:]] # prefixset_new = [] # for j in prefixset: # if ',\n' in j: # prefixset_new.append(j.split(',\n')[0]) # elif '\n' in j: # prefixset_new.append(j.split('\n')[0]) diff_libinput = ('').join(prx_set_cfg.ioscfg) + ' end set\n' return iface, iface_ip, nbr_ip, rpl, prefixset_name, diff_libinput
def get_vlan_to_be_migrated(): vlan_list = [] parse1 = c.CiscoConfParse(VCE_CFG_TXT_IN) vlan_rough = parse1.find_lines(r'^vlan') for v in vlan_rough: vlan_list.append(v.split()[1]) return vlan_list
def test_extract_ip_fail_no_ip(): with pytest.raises(ValueError, match="No ip address command at interface"): configs = [ "interface Fa1/0", " ip ospf 100 area 0", " ip ospf cost 1", " description \"To Roma\"", "!" ] confparser = ciscoconfparse.CiscoConfParse(configs) interface_cmds = confparser.find_objects(r"^interface ") cp.extract_ip_address(interface_cmds[0])
def _cfg_exists(self, cfg_str): """Check a partial config string exists in the running config. :param cfg_str: config string to check :return : True or False """ ioscfg = self._get_running_config() parse = ciscoconfparse.CiscoConfParse(ioscfg) cfg_raw = parse.find_lines("^" + cfg_str) LOG.debug("_cfg_exists(): Found lines %s", cfg_raw) return len(cfg_raw) > 0
def _get_interfaces(self): """Get a list of interfaces on this hosting device. :return: List of the interfaces """ ioscfg = self._get_running_config() parse = ciscoconfparse.CiscoConfParse(ioscfg) intfs_raw = parse.find_lines("^interface GigabitEthernet") intfs = [raw_if.strip().split(' ')[1] for raw_if in intfs_raw] LOG.info(_("Interfaces:%s"), intfs) return intfs
def add_nonegotiationauto(cfg): ''' add to if cfg (lst) with "no auto negotiation" command if speed is present ''' parse = c.CiscoConfParse(cfg) parse.insert_after_child( parentspec=r"^interface Ether", childspec=r"speed 100", insertstr=' no negotiate auto') parse.commit() return parse.ioscfg