def test_enabled_switchport_enabled(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') # Defining attributes section intf1.switchport_enable = True intf1.enabled = True # Check config cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no shutdown', ' switchport', ' exit', ])) # Check unconfig uncfg = intf1.build_unconfig(apply=False, attributes={ "switchport_enable": True, "enabled": True }) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' shutdown', ' no switchport', ' exit', ])) # Defining attributes section intf1.switchport_enable = False intf1.enabled = False # Check config cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' shutdown', ' no switchport', ' exit', ])) # Check unconfig uncfg = intf1.build_unconfig(apply=False, attributes={ "switchport_enable": True, "enabled": True }) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no shutdown', ' switchport', ' exit', ]))
def config_interface_subinterface_and_secondary_addresses( device, interface, sub_interface_num, ip_address, prefix, encap_type, start, end, ): """ Configure sub-interface and secondary addresses on device Args: device (`obj`): Device object interface (`str`): Interface name sub_interface_num (`int`): Subinterface to be added to interface name ip_address(`str`): IP addressed to be configured on interface prefix(`str`): prefix to be used in configuration encap_type (`str`): Encapsulation type start (`int`): start number on ip end (`int`): end number on ip Returns: None Raises: SubCommandFailure """ # interface {interface}.999 # encapsulation dot1Q 999 # ip address 10.4.0.1 255.255.255.0 # ip address 1.1.x.1 255.255.255.0 secondary (x -> 1 to 15) name = interface + "." + str(sub_interface_num) sub_intf = Interface(device=device, name=name) sub_intf.eth_encap_type1 = encap_type sub_intf.eth_encap_val1 = sub_interface_num ipv4a = IPv4Addr(device=device) ipv4a.ipv4 = IPv4Address(ip_address.format(x=start)) ipv4a.prefix_length = prefix sub_intf.add_ipv4addr(ipv4a) for x in range(end - start): ipv4b = IPv4Addr(device=device) ipv4b.ipv4 = IPv4Address(ip_address.format(x=x + 1)) ipv4b.prefix_length = prefix ipv4b.ipv4_secondary = True sub_intf.add_ipv4addr(ipv4b) try: config = str(sub_intf.build_config(apply=False)) sub_intf.build_config() except Exception as e: log.error(str(e)) raise Exception("Failed to config \n {}".format(config)) return config
def test_TunnelTeInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') lo0 = Interface(device=dev1, name='Loopback0') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/2') intf1.ipv4 = '1.2.3.4/32' tun3 = Interface(device=dev1, name='Tunnel101', tunnel_mode='mpls traffic-eng') # tun3 = TunnelTeInterface(device=dev1, name='Tunnel101') self.assertTrue(isinstance(tun3, TunnelTeInterface)) self.assertEqual(tun3.interface_number, 101) tun3.destination = intf1.ipv4.ip tun3.autoroute_announce = True tun3.ipv4_unnumbered_interface = dev1.interfaces['Loopback0'] tun3.add_path_option(1) tun3.path_option_attr[1].dynamic = True tun3.add_path_option(2) tun3.path_option_attr[2].explicit_name = "exp_PE2_P1_PE1" cfg = tun3.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Tunnel101', ' tunnel mode mpls traffic-eng', ' ip unnumbered Loopback0', ' tunnel destination 1.2.3.4', ' tunnel mpls traffic-eng autoroute announce', ' tunnel mpls traffic-eng path-option 1 dynamic', ' tunnel mpls traffic-eng path-option 2 explicit name exp_PE2_P1_PE1', ' exit', ])) uncfg = tun3.build_unconfig(apply=False) self.assertMultiLineEqual(str(uncfg), '\n'.join([ 'no interface Tunnel101', ])) partial_uncfg = tun3.build_unconfig(apply=False, attributes='autoroute_announce') self.assertMultiLineEqual( str(partial_uncfg), '\n'.join([ 'interface Tunnel101', ' no tunnel mpls traffic-eng autoroute announce', ' exit', ])) partial_cfg1 = tun3.build_config(apply=False, attributes='path_option_attr__2') self.assertMultiLineEqual( str(partial_cfg1), '\n'.join([ 'interface Tunnel101', ' tunnel mpls traffic-eng path-option 2 explicit name exp_PE2_P1_PE1', ' exit', ]))
def test_EthernetInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') intf1.ipv4 = '1.2.3.4/32' intf1.auto_negotiation = True cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' ip address 1.2.3.4 255.255.255.255', ' negotiation auto', ' exit', ])) uncfg = intf1.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'default interface GigabitEthernet0/0/1', 'interface GigabitEthernet0/0/1', 'shutdown', ])) partial_uncfg1 = intf1.build_unconfig(apply=False, attributes="auto_negotiation") self.assertMultiLineEqual( str(partial_uncfg1), '\n'.join([ 'interface GigabitEthernet0/0/1', ' default negotiation auto', ' exit', ])) partial_uncfg2 = intf1.build_unconfig(apply=False, attributes="ipv4") self.assertMultiLineEqual( str(partial_uncfg2), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no ip address 1.2.3.4 255.255.255.255', ' exit', ])) # FiftyGig interface intf2 = Interface(device=dev1, name='FiftyGigE6/0/1') intf2.ipv4 = '10.20.30.40/24' intf2.shutdown = False cfg = intf2.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface FiftyGigE6/0/1', ' ip address 10.20.30.40 255.255.255.0', ' no shutdown', ' exit' ])) uncfg = intf2.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'default interface FiftyGigE6/0/1', 'interface FiftyGigE6/0/1', 'shutdown' ]))
def test_uncfg_interface(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet3/7', device=dev1) intf2 = Interface(name='Vlan100', device=dev1) # vrf = Vrf(name='test', testbed=testbed) # dev1.add_feature(vrf) # make intf2 as L2 interface intf2.mtu = 500 intf1.mtu = 500 # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet3/7', ' mtu 500', ' exit' ])) cfgs = intf2.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Vlan100', ' mtu 500', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'default interface Ethernet3/7', ])) uncfgs = intf2.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'no interface Vlan100', ]))
def test_BundleEtherInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxr') lo0 = Interface(device=dev1, name='Loopback0') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') bundle = Interface(device=dev1, name='Bundle-Ether1') self.assertEqual(bundle.interface_number, 1) bundle.ipv4 = '14.14.14.14/24' bundle.ipv6 = '14:14:14::4/64' bundle.lag_bfd_v4_destination = '5.0.0.97' bundle.lag_bfd_v4_fast_detect = True bundle.lag_bfd_v4_min_interval = 100 bundle.lag_bfd_v6_destination = '6.0.0.98' bundle.lag_bfd_v6_fast_detect = True bundle.lag_bfd_v6_min_interval = 200 intf1.bundle = bundle intf1.bundle_mode = 'active' intf2.bundle = bundle cfg = bundle.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Bundle-Ether1', ' ipv4 address 14.14.14.14/24', ' ipv6 address 14:14:14::4/64', ' bfd address-family ipv4 destination 5.0.0.97', ' bfd address-family ipv4 fast-detect', ' bfd address-family ipv4 minimum-interval 100', ' bfd address-family ipv6 destination 6.0.0.98', ' bfd address-family ipv6 fast-detect', ' bfd address-family ipv6 minimum-interval 200', ' exit', ])) cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/0/1', ' bundle id 1 mode active', ' exit', ])) cfg = intf2.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/0/2', ' bundle id 1', ' exit', ]))
def test_ipv4_multiple_lines_confg(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet3/7', device=dev1, \ aliases=['PE1_1']) vrf = Vrf(name='test', testbed=testbed) dev1.add_feature(vrf) # Apply configuration intf1.description = 'multiple lines config' ipv4a = IPv4Addr(device=dev1) ipv4a.ipv4 = IPv4Address('192.168.1.1') ipv4a.prefix_length = '24' intf1.add_ipv4addr(ipv4a) ipv4b = IPv4Addr(device=dev1) ipv4b.ipv4 = IPv4Address('192.168.1.2') ipv4b.prefix_length = '24' ipv4b.ipv4_secondary = True intf1.add_ipv4addr(ipv4b) intf1.shutdown = False # make intf2 as L3 interface intf1.switchport_enable = False # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet3/7', ' description multiple lines config', ' no shutdown', ' no switchport', ' ip address 192.168.1.1/24', ' ip address 192.168.1.2/24 secondary', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False, attributes={'switchport_enable': True, 'description': True, 'shutdown': True}) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface Ethernet3/7', ' no description', ' shutdown', ' switchport', ' exit' ]))
def test_tunnelencryption_interface(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='nxos') intf1 = Interface(name='Ethernet0/0/1', device=dev1) # Defining attributes section intf1.evpn_multisite_dci_tracking = True intf1.tunnel_encryption = True cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Ethernet0/0/1', ' evpn multisite dci-tracking', ' tunnel-encryption', ' exit', ])) partial_uncfg = intf1.build_unconfig(apply=False, attributes={ "tunnel_encryption": True, "evpn_multisite_dci_tracking": True, }) self.assertMultiLineEqual( str(partial_uncfg), '\n'.join([ 'interface Ethernet0/0/1', ' no evpn multisite dci-tracking', ' no tunnel-encryption', ' exit', ]))
def test_dot1q_tunnel_interface(self): # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='BL1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet2/22', device=dev1, description='dot1q tunnel testing', enabled=True, switchport_mode='dot1q-tunnel', dot1q_access_vlan='1301', switchport_enable=True) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet2/22', ' description dot1q tunnel testing', ' no shutdown', ' switchport', ' switchport mode dot1q-tunnel', ' switchport access vlan 1301', ' exit' ]))
def test_ethernet(self): testbed = Testbed() Genie.testbed = Testbed() dev1 = Device(name='PE1', os='ios') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') # Defining attributes section intf1.description = 'test desc' intf1.enabled = True # Check config cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' description test desc', ' no shutdown', ' exit', ])) # Check unconfig without attribtues uncfg = intf1.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'default interface GigabitEthernet0/0/1', ]))
def test_nve_interface_simple(self): # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='BL1', testbed=testbed, os='nxos') intf1 = Interface(name='nve1', device=dev1) # Apply configuration intf1.enabled = False # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join(['interface nve1', ' shutdown', ' exit'])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False, attributes={'enabled': { False: None }}) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join(['interface nve1', ' no shutdown', ' exit']))
def test_TunnelTeInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxr') lo0 = Interface(device=dev1, name='Loopback0') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') intf1.ipv4 = '1.2.3.4/32' tun3 = Interface(device=dev1, name='tunnel-te101') self.assertEqual(tun3.interface_number, 101) tun3.destination = intf1.ipv4.ip tun3.autoroute_announce = True tun3.ipv4_unnumbered_interface = dev1.interfaces['Loopback0'] tun3.auto_bw_adj_threshold_pct = 1 tun3.add_path_option(1) tun3.path_option_attr[1].dynamic = True tun3.add_path_option(2) tun3.path_option_attr[2].explicit_name = "exp_PE2_P1_PE1" cfg = tun3.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface tunnel-te101', ' destination 1.2.3.4', ' autoroute announce', ' auto-bw adjustment-threshold 1', ' ipv4 unnumbered Loopback0', ' path-option 1 dynamic', ' path-option 2 explicit name exp_PE2_P1_PE1', ' exit', ]))
def test_switchport_enable_config(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet3/7', device=dev1, aliases=['PE1_1']) vrf = Vrf(name='test', testbed=testbed) dev1.add_feature(vrf) # make intf2 as L2 interface intf1.switchport_enable = True # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join(['interface Ethernet3/7', ' switchport', ' exit'])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'default interface Ethernet3/7', ]))
def test_vxlan_interface(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='nxos') intf1 = Interface(name='Ethernet0/0/1', device=dev1) # Defining attributes section intf1.evpn_multisite_fabric_tracking = True intf1.evpn_multisite_dci_tracking = True intf1.ip_forward = True cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Ethernet0/0/1', ' evpn multisite dci-tracking', ' evpn multisite fabric-tracking', ' ip forward', ' exit', ])) partial_uncfg = intf1.build_unconfig( apply=False, attributes={ "evpn_multisite_fabric_tracking": True, "evpn_multisite_dci_tracking": True, "ip_forward": True }) self.assertMultiLineEqual( str(partial_uncfg), '\n'.join([ 'interface Ethernet0/0/1', ' no evpn multisite dci-tracking', ' no evpn multisite fabric-tracking', ' no ip forward', ' exit', ]))
def test_NveInterface_L3vni(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') intf1 = Interface(name='nve1', device=dev1) # Defining attributes section intf1.nve_bgp_host_reachability = True intf1.nve_src_intf_loopback = 'Loopback0' intf1.nve_vni = '30000' intf1.nve_vni_vrf = 'red' # Build config cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface nve1', ' host-reachability protocol bgp', ' source-interface Loopback0', ' member vni 30000 vrf red', ' exit' ])) # Build unconfig uncfg = intf1.build_unconfig(apply=False, attributes={'nve_vni': '20000'}) # Check config build correctly self.assertMultiLineEqual( str(uncfg), '\n'.join(['interface nve1', ' no member vni 30000', ' exit']))
def test_VlanInterface(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') intf1 = Interface(name='Vlan100', device=dev1) # Defining attributes section intf1.mtu = 500 intf1.ipv4 = '201.0.12.1' intf1.ipv4.netmask = '255.255.255.0' intf1.ipv6 = '2001::12:1' cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Vlan100', ' ip address 201.0.12.1 255.255.255.0', ' ipv6 address 2001::12:1/128', ' mtu 500', ' exit', ])) uncfg = intf1.build_unconfig(apply=False) self.assertMultiLineEqual(str(uncfg), '\n'.join([ 'no interface Vlan100', ])) partial_uncfg = intf1.build_unconfig(apply=False, attributes="mtu") self.assertMultiLineEqual( str(partial_uncfg), '\n'.join([ 'interface Vlan100', ' no mtu 500', ' exit', ]))
def test_EthernetSubInterface(self): """Test subinterface support without usage of service_instance""" Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') sub_intf = Interface(device=dev1, name='GigabitEthernet0/0/1.20') sub_intf.ipv4 = '10.10.0.1/24' sub_intf.eth_encap_type1 = 'dot1q' sub_intf.eth_encap_val1 = 20 cfg = sub_intf.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1.20', ' encapsulation dot1q 20', ' ip address 10.10.0.1 255.255.255.0', ' exit', ])) uncfg = sub_intf.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'no interface GigabitEthernet0/0/1.20', ]))
def test_EFPInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/1') efp = Interface(device=dev1, name='GigabitEthernet0/0/1.20', service_instance=20) efp.eth_encap_val1 = 20 efp.rewrite_ingress = 'pop 1 symmetric' cfg = efp.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' service instance 20 ethernet', ' encapsulation dot1q 20', ' rewrite ingress tag pop 1 symmetric', ' exit', ' exit', ])) uncfg = efp.build_unconfig(apply=False) self.assertMultiLineEqual( str(uncfg), '\n'.join([ 'interface GigabitEthernet0/0/1', ' no service instance 20 ethernet', ' exit', ]))
def test_native_vlans(self): # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='BL1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet2/22', device=dev1, description='Native vlan testing', enabled=True, switchport_mode='trunk', trunk_vlans='101-120,131-140,151-170,200-209', native_vlan='1', switchport_enable=True) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet2/22', ' description Native vlan testing', ' no shutdown', ' switchport', ' switchport mode trunk', ' switchport trunk allowed vlan 101-120,131-140,151-170,200-209', ' switchport trunk native vlan 1', ' exit' ]))
def test_nve_interface(self): # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='BL1', testbed=testbed, os='nxos') intf1 = Interface(name='nve1', device=dev1) # Apply configuration intf1.nve_host_reachability_protocol = NveInterface.HOST_REACHABILTY_PROTOCOL.bgp intf1.nve_adv_virtual_rmac = True intf1.nve_src_intf_loopback = 'loopback1' intf1.nve_multisite_bgw_intf = 'loopback100' intf1.nve_vni = 4096 intf1.nve_vni_associate_vrf = True intf1.nve_vni_suppress_arp = True intf1.nve_vni_multisite_ingress_replication = True intf1.nve_vni_mcast_group = '233.1.1.1' # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface nve1', ' host-reachability protocol bgp', ' advertise virtual-rmac', ' source-interface loopback1', ' multisite border-gateway interface loopback100', ' member vni 4096 associate-vrf', ' suppress-arp', ' multisite ingress-replication', ' mcast-group 233.1.1.1', ' exit', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False, attributes={'nve_vni': '4096'}) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join(['interface nve1', ' no member vni 4096', ' exit'])) # Build unconfig uncfgs = intf1.build_unconfig( apply=False, attributes={ 'nve_host_reachability_protocol': NveInterface.HOST_REACHABILTY_PROTOCOL.bgp, 'nve_vni': '4096', 'nve_vni_suppress_arp': True }) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface nve1', ' no host-reachability protocol bgp', ' member vni 4096', ' no suppress-arp', ' exit', ' exit' ]))
def test_virtual(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxe') intf1 = Interface(device=dev1, name='Vlan100') intf2 = Interface(device=dev1, name='Loopback10') # Defining attributes section intf1.enabled = True intf2.enabled = False # Check config cfg1 = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg1), '\n'.join([ 'interface Vlan100', ' no shutdown', ' exit', ])) # Check unconfig uncfg1 = intf1.build_unconfig(apply=False) self.assertMultiLineEqual(str(uncfg1), '\n'.join([ 'no interface Vlan100', ])) # Check config cfg2 = intf2.build_config(apply=False) self.assertMultiLineEqual( str(cfg2), '\n'.join([ 'interface Loopback10', ' shutdown', ' exit', ])) # Check unconfig uncfg2 = intf2.build_unconfig(apply=False) self.assertMultiLineEqual(str(uncfg2), '\n'.join([ 'no interface Loopback10', ])) # Check unconfig with attributes uncfg2 = intf2.build_unconfig(apply=False, attributes="enabled") self.assertMultiLineEqual( str(uncfg2), '\n'.join([ 'interface Loopback10', ' no shutdown', ' exit', ]))
def test_single_line_config(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='iosxr') intf1 = Interface(name='GigabitEthernet0/0/0/0', device=dev1, aliases=['PE1_1']) subif1 = Interface(name='GigabitEthernet0/0/0/1.10', device=dev1, aliases=['PE1_1']) vrf = Vrf(name='test', testbed=testbed) dev1.add_feature(vrf) # Apply configuration intf1.description = 'test' intf1.enabled = True intf1.mtu = 1492 intf1.vrf = vrf intf1.mac_address = 'aabb.ccdd.eeff' intf1.bandwidth = 8192 intf1.load_interval = 33 intf1.unnumbered_intf_ref = 'GigabitEthernet0/0/0/1.10' intf1.ipv6_autoconf = True intf1.medium = 'p2p' # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface GigabitEthernet0/0/0/0', ' bandwidth 8192', ' description test', ' vrf test', ' ipv4 point-to-point', ' ipv4 unnumbered GigabitEthernet0/0/0/1.10', ' ipv6 address autoconfig', ' load-interval 33', ' mtu 1492', ' no shutdown', ' mac-address aabb.ccdd.eeff', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'no interface GigabitEthernet0/0/0/0', ]))
def test_BundleEtherInterface(self): Genie.testbed = Testbed() dev1 = Device(name='PE1', os='iosxr') lo0 = Interface(device=dev1, name='Loopback0') intf1 = Interface(device=dev1, name='GigabitEthernet0/0/0/1') intf2 = Interface(device=dev1, name='GigabitEthernet0/0/0/2') bundle = Interface(device=dev1, name='Bundle-Ether1') self.assertEqual(bundle.interface_number, 1) bundle.ipv4 = '14.14.14.14/24' bundle.ipv6 = '14:14:14::4/64' intf1.bundle = bundle intf1.bundle_mode = 'active' intf2.bundle = bundle cfg = bundle.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface Bundle-Ether1', ' ipv4 address 14.14.14.14/24', ' ipv6 address 14:14:14::4/64', ' exit', ])) cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/0/1', ' bundle id 1 mode active', ' exit', ])) cfg = intf2.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface GigabitEthernet0/0/0/2', ' bundle id 1', ' exit', ]))
def test_ipv6_multiple_lines_confg(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='iosxr') intf1 = Interface(name='GigabitEthernet0/0/0/0', device=dev1, \ aliases=['PE1_1']) vrf = Vrf(name='test', testbed=testbed) dev1.add_feature(vrf) # Apply configuration intf1.description = 'multiple lines config' intf1.enabled = False ipv6a = IPv6Addr(device=dev1) ipv6a.ipv6 = IPv6Address('2001:db1:1::1') ipv6a.ipv6_prefix_length = '64' intf1.add_ipv6addr(ipv6a) ipv6b = IPv6Addr(device=dev1) ipv6b.ipv6 = IPv6Address('2001:db1:2::2') ipv6b.ipv6_prefix_length = '64' intf1.add_ipv6addr(ipv6b) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface GigabitEthernet0/0/0/0', ' ipv6 address 2001:db1:1::1/64', ' ipv6 address 2001:db1:2::2/64', ' description multiple lines config', ' shutdown', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False, attributes={'ipv6addr':None}) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface GigabitEthernet0/0/0/0', ' no ipv6 address 2001:db1:1::1/64', ' no ipv6 address 2001:db1:2::2/64', ' exit' ]))
def test_ipv6_multiple_lines_confg(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='Ethernet3/7', device=dev1, \ aliases=['PE1_1']) vrf = Vrf(name='test', testbed=testbed) dev1.add_feature(vrf) # Apply configuration intf1.description = 'multiple lines config' ipv6a = IPv6Addr(device=dev1) ipv6a.ipv6 = IPv6Address('2001:db1:1::1') ipv6a.ipv6_prefix_length = '64' intf1.add_ipv6addr(ipv6a) ipv6b = IPv6Addr(device=dev1) ipv6b.ipv6 = IPv6Address('2001:db1:2::2') ipv6b.ipv6_prefix_length = '64' intf1.add_ipv6addr(ipv6b) intf1.shutdown = False # make intf2 as L3 interface intf1.switchport_enable = False # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet3/7', ' description multiple lines config', ' no shutdown', ' no switchport', ' ipv6 address 2001:db1:1::1/64', ' ipv6 address 2001:db1:2::2/64', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'default interface Ethernet3/7', ]))
def test_port_channel_interface(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='port-channel10', device=dev1) # Apply configuration intf1.channel_group_mode = 'on' intf1.switchport_enable = False intf1.ipv4 = '11.0.1.1/24' intf1.shutdown = False intf1.switchport_enable = False intf1.mtu = 9111 uut1_int3 = Interface(name='Ethernet0/0/1',device=dev1) intf1.add_member(uut1_int3) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet0/0/1', ' channel-group 10 mode on', ' exit', 'interface port-channel10', ' mtu 9111', ' no shutdown', ' no switchport', ' ip address 11.0.1.1 255.255.255.0', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface Ethernet0/0/1', ' no channel-group 10 mode on', ' exit', 'no interface port-channel10' ]))
def configure_l3_interface(dev, name, ip, mask, remove=False, apply=True): """ creates an l3 interface `name` on `dev` with ip `ip` and mask `mask` booleans can also be passed configure_l3_interface(... apply=True) (default) configure_l3_interface(... remove=True) """ from genie.conf.base import Interface if not dev.is_connected(): dev.connect() if name not in dev.interfaces: interface = Interface(device=dev, name=name) else: interface = dev.interfaces[intf] # this is a bug....shouldn't have to do this... # Add some configuration interface.switchport_enable = False interface.ipv4 = ip interface.ipv4.netmask = mask if apply and not remove: print("\n") print("******************************************************") print("Configuring interface {} on {} ".format( dev.name, interface.name)) print("******************************************************") interface.build_config(apply=apply) if remove: print("\n") print("******************************************************") print("Removing interface {} on {} ".format(dev.name, interface.name)) print("******************************************************") interface.build_unconfig(apply=apply) return interface
def test_vni_lines_confg(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='iosxr') intf1 = Interface(name='nve100', device=dev1, \ aliases=['PE1_1']) # Apply configuration intf1.source_interface = Interface(name='Loopback0', device=dev1) vni = Vni(100, device=dev1) vni.mcast_group = '225.1.1.1 0.0.0.0' intf1.add_vni(vni) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface nve100', ' member vni 100', ' mcast-group 225.1.1.1 0.0.0.0', ' exit', ' source-interface Loopback0', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False, attributes={'vnis':None}) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface nve100', ' no member vni 100', ' exit' ]))
def test_NveInterface_L2vni_mcast(self): testbed = Genie.testbed = Testbed() dev1 = Device(testbed=testbed, name='PE1', os='iosxe') intf1 = Interface(name='nve1', device=dev1) # Defining attributes section intf1.nve_bgp_host_reachability = True intf1.nve_src_intf_loopback = 'Loopback0' intf1.nve_vni = '20000' intf1.nve_vni_mcast_group = '239.1.1.2' intf1.nve_vni_local_routing = True # Build config cfg = intf1.build_config(apply=False) self.assertMultiLineEqual( str(cfg), '\n'.join([ 'interface nve1', ' host-reachability protocol bgp', ' source-interface Loopback0', ' member vni 20000', ' mcast-group 239.1.1.2 local-routing', ' exit', ' exit' ])) # Build unconfig partial_uncfg_1 = intf1.build_unconfig(apply=False, attributes={ 'nve_bgp_host_reachability': True, 'nve_vni': '20000' }) # Check config build correctly self.assertMultiLineEqual( str(partial_uncfg_1), '\n'.join([ 'interface nve1', ' no host-reachability protocol bgp', ' no member vni 20000', ' exit' ])) # Build unconfig partial_uncfg_2 = intf1.build_unconfig( apply=False, attributes={'nve_src_intf_loopback': 'Loopback0'}) # Check config build correctly self.assertMultiLineEqual( str(partial_uncfg_2), '\n'.join( ['interface nve1', ' no source-interface Loopback0', ' exit']))
def test_port_channel_interface_trunk_vlans(self): # For failures self.maxDiff = None # Set Genie Tb testbed = Testbed() Genie.testbed = testbed # Device dev1 = Device(name='PE1', testbed=testbed, os='nxos') intf1 = Interface(name='port-channel10', device=dev1) # Apply configuration intf1.channel_group_mode = 'active' intf1.enabled = True intf1.switchport_enable = True intf1.switchport_mode = 'trunk' intf1.trunk_vlans = "2-5,11-105,111-205" uut1_int3 = Interface(name='Ethernet0/0/1', device=dev1) intf1.add_member(uut1_int3) # Build config cfgs = intf1.build_config(apply=False) # Check config build correctly self.assertMultiLineEqual( str(cfgs), '\n'.join([ 'interface Ethernet0/0/1', ' channel-group 10 mode active', ' exit', 'interface port-channel10', ' no shutdown', ' switchport', ' switchport mode trunk', ' switchport trunk allowed vlan 2-5,11-105,111-205', ' exit' ])) # Build unconfig uncfgs = intf1.build_unconfig(apply=False) # Check config build correctly self.assertMultiLineEqual( str(uncfgs), '\n'.join([ 'interface Ethernet0/0/1', ' no channel-group 10 mode active', ' exit', 'no interface port-channel10' ]))