Exemple #1
0
def parse_config(host, addr):
    # search mgmt interface in .txt files
    # interface GigabitEthernet3 is MGMT interface
    txt_cfg = lab_folder + host + ".txt"
    mgmt_interface = "GigabitEthernet3"
    ip_param = "ip address " + addr + " 255.255.255.0"

    parse = CiscoConfParse(txt_cfg, factory=True)
    interface = parse.find_interface_objects(mgmt_interface)
    # add interface gig3

    if interface == []:
        print("creating mgmt interface")
        parse.insert_before('line con 0', 'interface GigabitEthernet3')
        parse.commit()

        for obj in parse.find_interface_objects(mgmt_interface):
            obj.append_to_family('!')
            obj.append_to_family(' no shutdown')
            obj.append_to_family(' ' + ip_param)
            obj.append_to_family(' description MGMT')

        parse.commit()
        parse.save_as(txt_cfg)
    else:
        print("Interface already configured")
        pass
    def testValues_IOSIntfLine_find_objects_factory_02(self):
        """test whether find_objects() returns correct IOSIntfLine objects and tests IOSIntfLine methods"""
        with patch('__main__.IOSIntfLine') as mock:
            # the mock pretends to be an IOSCfgLine so we can test against it
            result_correct01 = mock
            result_correct01.linenum = 12
            result_correct01.text = 'interface Serial 2/0'
            result_correct01.classname = 'IOSIntfLine'
            result_correct01.ipv4_addr_object = IPv4Network('1.1.1.1/30')

            result_correct02 = self.c01_insert_serial_replace

            cfg = CiscoConfParse(self.c01, factory=True)
            # Insert a line above the IOSIntfLine object
            cfg.insert_before('interface Serial 1/0', 'default interface Serial 1/0')
            # Replace text in the IOSIntfLine object
            cfg.replace_lines('interface Serial 1/0', 'interface Serial 2/0', exactmatch=False)

            test_result01 = cfg.find_objects('^interface Serial 2/0')[0]
            test_result02 = cfg.ioscfg

            # Check attributes of the IOSIntfLine object
            self.assertEqual(result_correct01.linenum,   test_result01.linenum)
            self.assertEqual(result_correct01.text,      test_result01.text)
            self.assertEqual(result_correct01.classname, test_result01.classname)
            self.assertEqual(result_correct01.ipv4_addr_object, 
                test_result01.ipv4_addr_object)

            # Ensure the text configs are exactly what we wanted
            self.assertEqual(result_correct02, test_result02)
 def testValues_renumbering_insert_before_atomic_01(self):
     """Ensure we renumber lines after insert_before(atomic=True)"""
     inputs = ['interface GigabitEthernet4/1',
         'interface GigabitEthernet4/2',
         'interface GigabitEthernet4/3',
         'interface GigabitEthernet4/4',
         'interface GigabitEthernet4/5',
         'interface GigabitEthernet4/6',
         'interface GigabitEthernet4/7',
         'interface GigabitEthernet4/8',
         ]
     cfg = CiscoConfParse(self.c01, factory=False)
     for idx, linespec in enumerate(inputs):
         cfg.insert_before(linespec, 'default '+linespec, 
             exactmatch=True, atomic=True)
     test_result = cfg.ioscfg
     result_correct = self.c01_default_gigabitethernets
     self.assertEqual(result_correct, test_result)
def replace_bgp_config(task):
    """
    Insert final bgp configurations into working checkpoint file

    Replaces the entire "router bgp" configurationin the previously captured checkpoint with the
    desired end state bgp configurations

    Args:
        task: nornir task object

    """
    proposed_checkpoint = task.host["proposed_checkpoint"]
    bgp_config = task.host["bgp_router_config"]
    conf = CiscoConfParse(proposed_checkpoint.splitlines())
    bgp = conf.find_objects(
        f"router bgp {task.host['bgp_config']['bgp_asn']}")[0]
    conf.insert_before(f"router bgp {task.host['bgp_config']['bgp_asn']}",
                       insertstr=bgp_config)
    bgp.delete()
    proposed_checkpoint = "\n".join(conf.ioscfg)
    task.host["proposed_checkpoint"] = proposed_checkpoint
 def testValues_insert_before_atomic_01(self):
     inputs = ['interface GigabitEthernet4/1',
         'interface GigabitEthernet4/2',
         'interface GigabitEthernet4/3',
         'interface GigabitEthernet4/4',
         'interface GigabitEthernet4/5',
         'interface GigabitEthernet4/6',
         'interface GigabitEthernet4/7',
         'interface GigabitEthernet4/8',
         ]
     cfg = CiscoConfParse(self.c01, factory=False)
     for idx, linespec in enumerate(inputs):
         test_result = cfg.insert_before(linespec, 'default '+linespec, 
             exactmatch=True, atomic=True)
         result_correct = [inputs[idx]]
         self.assertEqual(result_correct, test_result)