def test_acl_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', \ product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi1 = PhysicalInterface('pi1-esi', parent_obj=pr) pi_id = self._vnc_lib.physical_interface_create(pi1) #create sg and associate egress rule and check acls sg1_obj = self.security_group_create( 'sg-1', ['default-domain', 'default-project']) self.wait_for_get_sg_id(sg1_obj.get_fq_name()) sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name()) rule1 = self.build_acl_rule(0, 65535, 'egress', 'icmp', 'IPv4') sg_rule1 = self._security_group_rule_build(rule1, sg1_obj.get_fq_name_str()) self._security_group_rule_append(sg1_obj, sg_rule1) self._vnc_lib.security_group_update(sg1_obj) sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name()) # associate li, vmi vn1_name = 'vn-acl-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2001) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-acl' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('li1.0', parent_obj=pi1) li1.set_logical_interface_vlan_tag(100) li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) filters = self.get_firewall_filters(sg1_obj) self.check_firewall_config(filters, False) self.check_acl_config('li1', filters, False) vmi1.add_security_group(sg1_obj) self._vnc_lib.virtual_machine_interface_update(vmi1) self.check_firewall_config(filters, True) self.check_acl_config('li1', filters, True) self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
def test_native_vlan_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi = PhysicalInterface('intf-native', parent_obj = pr) pi_id = self._vnc_lib.physical_interface_create(pi) # associate li, vmi vn1_name = 'vn-native-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-native-' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2003) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('intf-native.0', parent_obj = pi) li1.logical_interface_vlan_tag = 0 li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) self.check_l2_evpn_native_vlan_config(vn1_obj, 'l2', 'intf-native')
def test_native_vlan_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi = PhysicalInterface('intf-native', parent_obj = pr) pi_id = self._vnc_lib.physical_interface_create(pi) # associate li, vmi vn1_name = 'vn-native-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-native-' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2003) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('intf-native.0', parent_obj = pi) li1.logical_interface_vlan_tag = 0 li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) self.check_l2_evpn_native_vlan_config(vn1_obj, 'l2', 'intf-native')
def test_acl_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', \ product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi1 = PhysicalInterface('pi1-esi', parent_obj = pr) pi_id = self._vnc_lib.physical_interface_create(pi1) #create sg and associate egress rule and check acls sg1_obj = self.security_group_create('sg-1', ['default-domain', 'default-project']) self.wait_for_get_sg_id(sg1_obj.get_fq_name()) sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name()) rule1 = self.build_acl_rule(0, 65535, 'egress', 'icmp', 'IPv4') sg_rule1 = self._security_group_rule_build(rule1, sg1_obj.get_fq_name_str()) self._security_group_rule_append(sg1_obj, sg_rule1) self._vnc_lib.security_group_update(sg1_obj) sg1_obj = self._vnc_lib.security_group_read(sg1_obj.get_fq_name()) # associate li, vmi vn1_name = 'vn-acl-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2001) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-acl' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('li1.0', parent_obj = pi1) li1.set_logical_interface_vlan_tag(100) li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) filters = self.get_firewall_filters(sg1_obj) self.check_firewall_config(filters, False) self.check_acl_config('li1', filters, False) vmi1.add_security_group(sg1_obj) self._vnc_lib.virtual_machine_interface_update(vmi1) self.check_firewall_config(filters, True) self.check_acl_config('li1', filters, True) self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name())
def setUp(self, extra_config_knobs=None): super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs) flexmock(manager, connect=fake_netconf_connect) setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf) FakeNetconfManager.set_model(self.product) return
def setUp(self, extra_config_knobs=None): super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs) flexmock(manager, connect=fake_netconf_connect) setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf) FakeNetconfManager.set_model(self.product) return
def setUp(self, extra_config_knobs=None): super(DMTestCase, self).setUp(extra_config_knobs=extra_config_knobs) flexmock(manager, connect=fake_netconf_connect) setattr(device_manager.mx_conf.MxConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_5k.Qfx5kConf, 'device_send', fake_send_netconf) setattr(device_manager.qfx_10k.Qfx10kConf, 'device_send', fake_send_netconf) setattr(device_manager.overlay_conf.OverlayConf, 'device_send', fake_job_handler_push) setattr(device_manager.pnf_conf.PnfConf, 'device_send', fake_job_handler_push) if hasattr(self, 'product'): FakeNetconfManager.set_model(self.product) return
def test_esi_config(self): FakeNetconfManager.set_model('qfx5110') bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx5110") pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi = PhysicalInterface('pi1', parent_obj = pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi) self.check_esi_config('pi1', esi_value) pi.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi) self.check_esi_config('pi1', esi_value, False)
def test_esi_config(self): FakeNetconfManager.set_model('qfx5110') bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx5110") pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi = PhysicalInterface('pi1', parent_obj=pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi) self.check_esi_config('pi1', esi_value) pi.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi) self.check_esi_config('pi1', esi_value, False)
def test_dm_plugins(self): # check basic valid vendor, product plugin bgp_router, pr = self.create_router('router100' + self.id(), '1.1.1.1', product=self.product) self.check_dm_plugin() pr_config = FakeDeviceConnect.params.get("pr_config") # update valid another vendor, product; another plugin should be found FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() # check invalid vendor, product; no plugin FakeDeviceConnect.reset() FakeNetconfManager.set_model('cix') pr.physical_router_vendor_name = "cix" pr.physical_router_product_name = "cix100" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin(is_valid=False) # update valid vendor, product; plugin should be found, config should be pushed FakeDeviceConnect.reset() FakeNetconfManager.set_model('mx80') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "mx" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() # device connection is down, config should not be pushed pr_config = FakeDeviceConnect.params.get("pr_config") pr_config._nc_manager.connected = False self.assertFalse(pr_config.is_connected()) FakeDeviceConnect.reset() self.set_hold_time(bgp_router, 100) self._vnc_lib.bgp_router_update(bgp_router) self.check_dm_plugin(False) # device connection is up, config should be auto pushed pr_config._nc_manager.connected = True self.check_dm_plugin() # unset vnc-managed, should generate delete groups config pr.physical_router_vnc_managed = False self._vnc_lib.physical_router_update(pr) self.check_dm_delete_groups() # set vnc-managed, should generate groups config again pr.physical_router_vnc_managed = True self._vnc_lib.physical_router_update(pr) self.check_if_xml_is_generated() bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq)
def test_esi_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi1 = PhysicalInterface('pi1-esi', parent_obj = pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi1.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi1) # associate li, vmi vn1_name = 'vn-esi-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2002) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('li1.0', parent_obj = pi1) li1.set_logical_interface_vlan_tag(100) li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi1-esi', esi_value, False) pi2 = PhysicalInterface('pi2-esi', parent_obj = pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi2.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi2) li2 = LogicalInterface('li2.0', parent_obj = pi2) li2.set_logical_interface_vlan_tag(100) li2.set_virtual_machine_interface(vmi1) li2_id = self._vnc_lib.logical_interface_create(li2) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi2-esi', esi_value, False) self.check_chassis_config() self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"]) self.check_l2_evpn_config("ae127", 100) pi3 = PhysicalInterface('pi3-esi', parent_obj = pr) esi_value = "44:44:44:44:44:44:44:44:44:44" pi3.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi3) fq_name = ['default-domain', 'default-project', 'vmi3-esi' + self.id()] vmi3 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi3.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi3) li3 = LogicalInterface('li3.0', parent_obj = pi3) li3.logical_interface_vlan_tag = 200 li3.set_virtual_machine_interface(vmi3) li3_id = self._vnc_lib.logical_interface_create(li3) self.check_esi_config('ae126', esi_value) self.check_esi_config('pi3-esi', esi_value, False) self.check_chassis_config() self.check_lacp_config("ae126", esi_value, ["pi3-esi"]) self.check_l2_evpn_config("ae126", 200) # check again ae127 state, should not be changed esi_value = "33:33:33:33:33:33:33:33:33:33" self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"]) self.check_l2_evpn_config("ae127", 100) ''' # changing esi value on one interface is not allowed by api-server # need to disable interface, if we want to change esi. # DM/api server support will be implemented. # We should re-write this piece of validation code # unset esi value on one interface, ae config should still be generated pi1.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi1) self.check_esi_config('ae127', esi_value, True) # unset esi value on both interfaces, ae config should not be generated pi2.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi2) self.check_esi_config('ae127', esi_value, False) # set esi value back, run delete tests pi1.set_ethernet_segment_identifier(esi_value) self._vnc_lib.physical_interface_update(pi1) pi2.set_ethernet_segment_identifier(esi_value) self._vnc_lib.physical_interface_update(pi2) self.check_esi_config('ae127', esi_value, True) ''' self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name()) self._vnc_lib.logical_interface_delete(fq_name=li2.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi2.get_fq_name()) self.check_esi_config('ae127', esi_value, False)
def verify_dm_qfx_switch_options(self, product): # check basic valid vendor, product plugin FakeNetconfManager.set_model(product) # create global vrouter config object self.create_global_vrouter_config() bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product) # enable vxlan routing on project proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"]) proj.set_vxlan_routing(True) self._vnc_lib.project_update(proj) # create customer network, logical router and link to logical router vn1_name = 'vn1' + self.id() + "-" + product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2000) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product] lr = LogicalRouter(fq_name=fq_name, parent_type = 'project') lr.set_physical_router(pr) lr.add_virtual_machine_interface(vmi1) lr_uuid = self._vnc_lib.logical_router_create(lr) # make sure internal is created int_vn = self.check_lr_internal_vn_state(lr) # verify generated switch options config self.check_switch_options_config(vn1_obj, "l2") # verify internal vn's config if 'qfx5' not in self.product: self.check_switch_options_config(int_vn, "l3") # check vlans config self.check_vlans_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l2') if 'qfx10' in self.product: self.check_ri_vlans_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l3') # cleanup pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name()) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr.del_physical_router(pr) self._vnc_lib.logical_router_update(lr) bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq)
def verify_dm_qfx_switch_options(self, product, role=None): # check basic valid vendor, product plugin FakeNetconfManager.set_model(product) # create global vrouter config object gv = self.create_global_vrouter_config() bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product, role=role) # enable vxlan routing on project proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"]) proj.set_vxlan_routing(True) self._vnc_lib.project_update(proj) # create customer network, logical router and link to logical router vn1_name = 'vn1' + self.id() + "-" + product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2005) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product] lr = LogicalRouter(fq_name=fq_name, parent_type = 'project', vxlan_network_identifier='1111') lr.set_physical_router(pr) lr.add_virtual_machine_interface(vmi1) lr_uuid = self._vnc_lib.logical_router_create(lr) # make sure internal is created int_vn = self.check_lr_internal_vn_state(lr) # verify generated switch options config self.check_switch_options_config(vn1_obj, "l2", role) if role == 'spine': self.check_ri_config(vn1_obj, 'l2', False) self.check_ri_config(int_vn, 'l3', True) # check spine internal vn config self.check_spine_irb_config(int_vn, vn1_obj) # check bogus lo0 config self.check_spine_bogus_lo0_ip(int_vn) # check evpn type config self.check_spine_evpn_type5_config(int_vn, lr) else: self.check_ri_config(vn1_obj, 'l2', False) self.check_ri_config(vn1_obj, 'l3', False) # verify l2 evpns targets if 'qfx5' in product: ri = self._vnc_lib.routing_instance_read(fq_name=vn1_obj.get_fq_name() + [vn1_obj.name]) self.check_l2_evpn_vrf_targets(ri.get_route_target_refs()[0]['to'][0]) # verify internal vn's config if 'qfx5' not in product: self.check_switch_options_config(int_vn, "l3", role) # check vlans config if 'qfx5' in product: self.check_vlans_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l2') if 'qfx10' in product: self.check_ri_vlans_config(int_vn, vn1_obj_properties.get_vxlan_network_identifier(), 'l3', False) # check l2 evpn qfx5k leaf config if 'qfx5' in product: gv.set_vxlan_network_identifier_mode('configured') self._vnc_lib.global_vrouter_config_update(gv) self.check_l2_evpn_proto_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier()) # check global export policy if 'qfx5' in product: self.check_switch_options_export_policy_config(True) else: self.check_switch_options_export_policy_config(False) # check policy options if 'qfx5' in product: self.check_policy_options_config(True) else: self.check_policy_options_config(False) # cleanup pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name()) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr.del_physical_router(pr) self._vnc_lib.logical_router_update(lr) bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq) self._vnc_lib.logical_router_delete(id=lr_uuid) vmi1.del_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_update(vmi1) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi1.uuid)
def verify_dm_qfx_switch_options(self, product, role=None): # check basic valid vendor, product plugin FakeNetconfManager.set_model(product) # create global vrouter config object gv = self.create_global_vrouter_config() bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=product, role=role) # enable vxlan routing on project proj = self._vnc_lib.project_read(fq_name=["default-domain", "default-project"]) proj.set_vxlan_routing(True) self._vnc_lib.project_update(proj) # create customer network, logical router and link to logical router vn1_name = 'vn1' + self.id() + "-" + product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam1' + self.id() + "-" + product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2005) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1' + self.id() + "-" + product] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) fq_name = ['default-domain', 'default-project', 'lr1' + self.id() + "-" + product] lr = LogicalRouter(fq_name=fq_name, parent_type = 'project', vxlan_network_identifier='1111') lr.set_physical_router(pr) lr.add_virtual_machine_interface(vmi1) lr_uuid = self._vnc_lib.logical_router_create(lr) # make sure internal is created int_vn = self.check_lr_internal_vn_state(lr) # verify generated switch options config self.check_switch_options_config(vn1_obj, "l2", role) if role == 'spine': self.check_ri_config(vn1_obj, 'l2', False) self.check_ri_config(int_vn, 'l3', True) # check spine internal vn config self.check_spine_irb_config(int_vn, vn1_obj) # check bogus lo0 config self.check_spine_bogus_lo0_ip(int_vn) # check evpn type config self.check_spine_evpn_type5_config(int_vn, lr) else: self.check_ri_config(vn1_obj, 'l2', False) self.check_ri_config(vn1_obj, 'l3', False) # verify l2 evpns targets if 'qfx5' in product: ri = self._vnc_lib.routing_instance_read(fq_name=vn1_obj.get_fq_name() + [vn1_obj.name]) self.check_l2_evpn_vrf_targets(ri.get_route_target_refs()[0]['to'][0]) # verify internal vn's config if 'qfx5' not in product: self.check_switch_options_config(int_vn, "l3", role) # check vlans config if 'qfx5' in product: self.check_vlans_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l2') if 'qfx10' in product: self.check_ri_vlans_config(int_vn, vn1_obj_properties.get_vxlan_network_identifier(), 'l3', False) # check l2 evpn qfx5k leaf config if 'qfx5' in product: gv.set_vxlan_network_identifier_mode('configured') self._vnc_lib.global_vrouter_config_update(gv) self.check_l2_evpn_proto_config(vn1_obj, vn1_obj_properties.get_vxlan_network_identifier()) # check global export policy if 'qfx5' in product: self.check_switch_options_export_policy_config(True) else: self.check_switch_options_export_policy_config(False) # check policy options if 'qfx5' in product: self.check_policy_options_config(True) else: self.check_policy_options_config(False) # cleanup pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name()) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr.del_physical_router(pr) self._vnc_lib.logical_router_update(lr) bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq) self._vnc_lib.logical_router_delete(id=lr_uuid) vmi1.del_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_update(vmi1) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi1.uuid)
def test_esi_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product, role='leaf') pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi1 = PhysicalInterface('pi1-esi', parent_obj = pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi1.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi1) # associate li, vmi vn1_name = 'vn-esi-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2002) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('li1.0', parent_obj = pi1) li1.set_logical_interface_vlan_tag(100) li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi1-esi', esi_value, False) pi2 = PhysicalInterface('pi2-esi', parent_obj = pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi2.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi2) li2 = LogicalInterface('li2.0', parent_obj = pi2) li2.set_logical_interface_vlan_tag(100) li2.set_virtual_machine_interface(vmi1) li2_id = self._vnc_lib.logical_interface_create(li2) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi2-esi', esi_value, False) self.check_chassis_config() self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"]) self.check_l2_evpn_config("ae127", 100) pi3 = PhysicalInterface('pi3-esi', parent_obj = pr) esi_value = "44:44:44:44:44:44:44:44:44:44" pi3.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi3) fq_name = ['default-domain', 'default-project', 'vmi3-esi' + self.id()] vmi3 = VirtualMachineInterface(fq_name=fq_name, parent_type = 'project') vmi3.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi3) li3 = LogicalInterface('li3.0', parent_obj = pi3) li3.logical_interface_vlan_tag = 200 li3.set_virtual_machine_interface(vmi3) li3_id = self._vnc_lib.logical_interface_create(li3) self.check_esi_config('ae126', esi_value) self.check_esi_config('pi3-esi', esi_value, False) self.check_chassis_config() self.check_lacp_config("ae126", esi_value, ["pi3-esi"]) self.check_l2_evpn_config("ae126", 200) # check again ae127 state, should not be changed esi_value = "33:33:33:33:33:33:33:33:33:33" self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"]) self.check_l2_evpn_config("ae127", 100) ''' # changing esi value on one interface is not allowed by api-server # need to disable interface, if we want to change esi. # DM/api server support will be implemented. # We should re-write this piece of validation code # unset esi value on one interface, ae config should still be generated pi1.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi1) self.check_esi_config('ae127', esi_value, True) # unset esi value on both interfaces, ae config should not be generated pi2.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi2) self.check_esi_config('ae127', esi_value, False) # set esi value back, run delete tests pi1.set_ethernet_segment_identifier(esi_value) self._vnc_lib.physical_interface_update(pi1) pi2.set_ethernet_segment_identifier(esi_value) self._vnc_lib.physical_interface_update(pi2) self.check_esi_config('ae127', esi_value, True) ''' self._vnc_lib.logical_interface_delete(fq_name=li1.get_fq_name()) self._vnc_lib.logical_interface_delete(fq_name=li2.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi1.get_fq_name()) self._vnc_lib.physical_interface_delete(fq_name=pi2.get_fq_name()) self.check_esi_config('ae127', esi_value, False)
def test_dm_qfx_switch_options(self): # check basic valid vendor, product plugin FakeNetconfManager.set_model('qfx5110') # create global vrouter config object self.create_global_vrouter_config() bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx5110") # enable vxlan routing on project proj = self._vnc_lib.project_read( fq_name=["default-domain", "default-project"]) proj.set_vxlan_routing(True) self._vnc_lib.project_update(proj) # create customer network, logical router and link to logical router vn1_name = 'vn1' + self.id() vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam1' + self.id()) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2000) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) fq_name = ['default-domain', 'default-project', 'lr1' + self.id()] lr = LogicalRouter(fq_name=fq_name, parent_type='project') lr.set_physical_router(pr) lr.add_virtual_machine_interface(vmi1) lr_uuid = self._vnc_lib.logical_router_create(lr) # make sure internal is created int_vn = self.check_lr_internal_vn_state(lr) # verify generated switch options config self.check_switch_options_config(vn1_obj, "l2") # verify internal vn's config self.check_switch_options_config(int_vn, "l3") # check vlans config self.check_vlans_config( vn1_obj, vn1_obj_properties.get_vxlan_network_identifier(), 'l2') # cleanup pr = self._vnc_lib.physical_router_read(fq_name=pr.get_fq_name()) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr.del_physical_router(pr) self._vnc_lib.logical_router_update(lr) bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq)
def test_dci_api(self): FakeNetconfManager.set_model('qfx10000') gs = GlobalSystemConfig(fq_name=["default-global-system-config"]) subnets = SubnetListType([SubnetType("10.0.0.0", 24), SubnetType("20.0.0.0", 16)]) gs.set_data_center_interconnect_loopback_namespace(subnets) self._vnc_lib.global_system_config_update(gs) self.check_dci_ipam() self.check_dci_lo_network(["10.0.0.0", 24]) self.check_dci_lo_network(["20.0.0.0", 16]) subnets = SubnetListType([SubnetType("30.0.0.0", 24)]) gs.set_data_center_interconnect_loopback_namespace(subnets) self._vnc_lib.global_system_config_update(gs) self.check_dci_lo_network(["10.0.0.0", 24], False) self.check_dci_lo_network(["30.0.0.0", 24], True) gs.set_data_center_interconnect_loopback_namespace(None) self._vnc_lib.global_system_config_update(gs) self.check_dci_lo_network(["30.0.0.0", 24], False) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product="qfx10000", role="spine") fab1 = self._vnc_lib.fabric_create(Fabric('fab1')) fab1 = self._vnc_lib.fabric_read(id=fab1) pr.set_fabric(fab1) self._vnc_lib.physical_router_update(pr) lr = LogicalRouter("lr1") lr.set_physical_router(pr) lr_uuid = self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr_uuid) dci = DataCenterInterconnect("test-dci") dci.add_logical_router(lr) self._vnc_lib.data_center_interconnect_create(dci) # test lr connected two dcis dci2 = DataCenterInterconnect("test-dci-2") dci2.add_logical_router(lr) try: self._vnc_lib.data_center_interconnect_create(dci2) raise Exception("dci is not allowed to create with lr, which is part of another dci") except cfgm_common.exceptions.BadRequest as e: # lr can not be associated more than one dci pass # test lr connected to different fabric pr's, this lr can't be part of dci bgp_router2, pr2 = self.create_router('router-2' + self.id(), '2.1.1.1', product="qfx10000", role="spine") fab2 = self._vnc_lib.fabric_create(Fabric('fab2')) fab2 = self._vnc_lib.fabric_read(id=fab2) pr2.set_fabric(fab2) self._vnc_lib.physical_router_update(pr2) lr2 = LogicalRouter("lr2") lr2.add_physical_router(pr) lr2.add_physical_router(pr2) lr_uuid = self._vnc_lib.logical_router_create(lr2) lr = self._vnc_lib.logical_router_read(id=lr_uuid) dci2 = DataCenterInterconnect("test-dci-2") dci2.add_logical_router(lr) try: self._vnc_lib.data_center_interconnect_create(dci2) raise Exception("dci is not allowed to create with lr, lr has prs part of different fabrics") except cfgm_common.exceptions.BadRequest as e: # can't create dci with lr connected to two different fabrics pass self._vnc_lib.data_center_interconnect_delete(fq_name=dci.fq_name)
def test_dm_plugins(self): # check basic valid vendor, product plugin bgp_router, pr = self.create_router('router100' + self.id(), '1.1.1.1', product=self.product) self.check_dm_plugin() pr_config = FakeDeviceConnect.params.get("pr_config") # update valid another vendor, product; another plugin should be found FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx5110') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx5110" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx5100') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx5100" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx5200') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx5200" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx5300') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx5300" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin(is_valid=False) FakeDeviceConnect.reset() FakeNetconfManager.set_model('qfx10000') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "qfx10000" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() # check invalid vendor, product; no plugin FakeDeviceConnect.reset() FakeNetconfManager.set_model('cix') pr.physical_router_vendor_name = "cix" pr.physical_router_product_name = "cix100" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin(is_valid=False) # update valid vendor, product; plugin should be found, config should be pushed FakeDeviceConnect.reset() FakeNetconfManager.set_model('mx80') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "mx" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() FakeDeviceConnect.reset() FakeNetconfManager.set_model('mx480') pr.physical_router_vendor_name = "juniper" pr.physical_router_product_name = "mx480" self._vnc_lib.physical_router_update(pr) self.check_dm_plugin() # device connection is down, config should not be pushed pr_config = FakeDeviceConnect.params.get("pr_config") pr_config._nc_manager.connected = False self.assertFalse(pr_config.is_connected()) FakeDeviceConnect.reset() self.set_hold_time(bgp_router, 100) self._vnc_lib.bgp_router_update(bgp_router) self.check_dm_plugin(False) # device connection is up, config should be auto pushed pr_config._nc_manager.connected = True self.check_dm_plugin() # unset vnc-managed, should generate delete groups config pr.physical_router_vnc_managed = False self._vnc_lib.physical_router_update(pr) self.check_dm_delete_groups() # set vnc-managed, should generate groups config again pr.physical_router_vnc_managed = True self._vnc_lib.physical_router_update(pr) self.check_if_xml_is_generated() bgp_router_fq = bgp_router.get_fq_name() pr_fq = pr.get_fq_name() self.delete_routers(bgp_router, pr) self.wait_for_routers_delete(bgp_router_fq, pr_fq)
def test_esi_config(self): self.product = 'qfx5110' FakeNetconfManager.set_model(self.product) bgp_router, pr = self.create_router('router' + self.id(), '1.1.1.1', product=self.product) pr.set_physical_router_role("leaf") self._vnc_lib.physical_router_update(pr) pi = PhysicalInterface('pi1-esi', parent_obj=pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi) # associate li, vmi vn1_name = 'vn-esi-' + self.id() + "-" + self.product vn1_obj = VirtualNetwork(vn1_name) ipam_obj = NetworkIpam('ipam-esi' + self.id() + "-" + self.product) self._vnc_lib.network_ipam_create(ipam_obj) vn1_obj.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) vn1_obj_properties = VirtualNetworkType() vn1_obj_properties.set_vxlan_network_identifier(2000) vn1_obj_properties.set_forwarding_mode('l2_l3') vn1_obj.set_virtual_network_properties(vn1_obj_properties) vn1_uuid = self._vnc_lib.virtual_network_create(vn1_obj) vn1_obj = self._vnc_lib.virtual_network_read(id=vn1_uuid) fq_name = ['default-domain', 'default-project', 'vmi1-esi' + self.id()] vmi1 = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi1.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi1) li1 = LogicalInterface('li1.0', parent_obj=pi) li1.set_virtual_machine_interface(vmi1) li1_id = self._vnc_lib.logical_interface_create(li1) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi1-esi', esi_value, False) pi = PhysicalInterface('pi2-esi', parent_obj=pr) esi_value = "33:33:33:33:33:33:33:33:33:33" pi.set_ethernet_segment_identifier(esi_value) pi_id = self._vnc_lib.physical_interface_create(pi) fq_name = ['default-domain', 'default-project', 'vmi2-esi' + self.id()] vmi2 = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi2.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi2) li2 = LogicalInterface('li2.0', parent_obj=pi) li2.set_virtual_machine_interface(vmi2) li2_id = self._vnc_lib.logical_interface_create(li2) self.check_esi_config('ae127', esi_value) self.check_esi_config('pi2-esi', esi_value, False) self.check_chassis_config() self.check_lacp_config("ae127", esi_value, ["pi1-esi", "pi2-esi"]) self.check_l2_evpn_config("ae127") pi.set_ethernet_segment_identifier(None) self._vnc_lib.physical_interface_update(pi) self.check_esi_config('ae127', esi_value, False)