Пример #1
0
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))
Пример #3
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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]
Пример #8
0
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')
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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))
Пример #15
0
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
Пример #16
0
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
Пример #17
0
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))
Пример #20
0
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')
Пример #21
0
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
Пример #22
0
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
Пример #23
0
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
Пример #24
0
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
Пример #25
0
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
Пример #26
0
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
Пример #27
0
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])
Пример #28
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
Пример #29
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
Пример #30
0
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