예제 #1
0
    def test_vxlan_update_for_lr(self):
        project = self._vnc_lib.project_read(
            fq_name=['default-domain', 'default-project'])
        project.set_vxlan_routing(True)
        self._vnc_lib.project_update(project)
        mock_zk = self._api_server._db_conn._zk_db

        # Create Logical Router
        lr = LogicalRouter('router-test-v4-%s' % self.id(), project)
        lr.set_vxlan_network_identifier('5001')
        lr.set_logical_router_type('vxlan-routing')
        lr_uuid = self._vnc_lib.logical_router_create(lr)
        lr_read = self._vnc_lib.logical_router_read(id=lr_uuid)
        vxlan_id = lr_read.get_vxlan_network_identifier()
        self.assertEqual(vxlan_id, '5001')

        lr.set_vxlan_network_identifier('5002')
        self._vnc_lib.logical_router_update(lr)
        lr_read = self._vnc_lib.logical_router_read(id=lr_uuid)
        vxlan_id = lr_read.get_vxlan_network_identifier()
        self.assertEqual(vxlan_id, '5002')

        int_vn_name = get_lr_internal_vn_name(lr_uuid)
        int_vn_fqname = ['default-domain', 'default-project', int_vn_name]

        self.assertEqual(':'.join(int_vn_fqname) + "_vxlan",
                         mock_zk.get_vn_from_id(int(vxlan_id)))

        self._vnc_lib.logical_router_delete(id=lr_uuid)
    def test_delete_lr_missing_vn_refs(self):
        # Get Project Ref
        project = self._vnc_lib.project_read(
            fq_name=['default-domain', 'default-project'])
        lr = LogicalRouter('router-test-missing_vn_refs-%s' % (self.id()),
                           project)

        lr.set_logical_router_type('vxlan-routing')
        lr_uuid = self._vnc_lib.logical_router_create(lr)
        lr = self._vnc_lib.logical_router_read(id=lr_uuid)
        logger.debug('Created Logical Router ')

        # Create a VN Object
        vn = VirtualNetwork('%s-vn' % self.id(), project)
        self._vnc_lib.virtual_network_create(vn)
        # Create a Virtual Machine Interface that does not have VN Ref
        id_perms = IdPermsType(enable=True)
        vmi_no_vn_ref = VirtualMachineInterface(str(uuid.uuid4()),
                                                parent_obj=project,
                                                id_perms=id_perms)

        vmi_no_vn_ref.set_virtual_network(vn)
        vmi_uuid = self._vnc_lib.virtual_machine_interface_create(
            vmi_no_vn_ref)
        # Do not associate VN Ref to VMI and create
        lr.add_virtual_machine_interface(vmi_no_vn_ref)
        self._vnc_lib.logical_router_update(lr)
        vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_uuid)
        vn_refs = vmi_obj.get_virtual_network_refs()
        vn_uuid = vn_refs[0]['uuid']
        self._vnc_lib.ref_update('virtual_machine_interface', vmi_uuid,
                                 'virtual_network', vn_uuid, None, 'DELETE')
        vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_uuid)
        vn_refs = vmi_obj.get_virtual_network_refs()
        self.assertIsNone(vn_refs)

        # Create a VN Object
        vn2 = VirtualNetwork('%s-vn2' % self.id(), project)
        self._vnc_lib.virtual_network_create(vn2)
        # Create a Virtual Machine Interface that does not have VN Ref
        vmi_no_vn_ref_2 = VirtualMachineInterface(str(uuid.uuid4()),
                                                  parent_obj=project,
                                                  id_perms=id_perms)

        vmi_no_vn_ref_2.set_virtual_network(vn2)
        self._vnc_lib.virtual_machine_interface_create(vmi_no_vn_ref_2)
        # Do not associate VN Ref to VMI and create
        lr.add_virtual_machine_interface(vmi_no_vn_ref_2)
        self._vnc_lib.logical_router_update(lr)
        # Deleting directly from api-server as api server
        # will not allow deletion
        self._vnc_lib.logical_router_delete(id=lr.uuid)
예제 #3
0
    def test_same_network_not_attached_to_lr(self):
        project = self._vnc_lib.project_read(
            ['default-domain', 'default-project'])
        ipam = self._vnc_lib.network_ipam_read(
            ['default-domain', 'default-project', 'default-network-ipam'])

        # Create subnets
        ipam_sn_v4_vn = IpamSubnetType(subnet=SubnetType('11.1.1.0', 24))

        # Create VN my-vn
        vn = VirtualNetwork('%s-vn' % self.id(), project)
        vn.add_network_ipam(ipam, VnSubnetsType([ipam_sn_v4_vn]))
        self._vnc_lib.virtual_network_create(vn)
        net_obj = self._vnc_lib.virtual_network_read(id=vn.uuid)

        # Create v4 Ip object
        ip_obj = InstanceIp(name=str(uuid.uuid4()), instance_ip_family='v4')
        ip_obj.uuid = ip_obj.name

        # Create Port
        port_obj = self.create_port(project, net_obj)

        # Create Logical Router
        lr = LogicalRouter('router-test-v4-%s' % self.id(), project)
        lr.set_logical_router_type('snat-routing')
        self._vnc_lib.logical_router_create(lr)

        # Add Router Interface
        lr.add_virtual_machine_interface(port_obj)
        self._vnc_lib.logical_router_update(lr)

        # set router_external
        net_obj.set_router_external(True)
        self._vnc_lib.virtual_network_update(net_obj)

        with ExpectedException(BadRequest):
            lr.add_virtual_network(net_obj)
            self._vnc_lib.logical_router_update(lr)
        lr.del_virtual_network(net_obj)

        lr.del_virtual_machine_interface(port_obj)
        self._vnc_lib.logical_router_update(lr)
        lr.add_virtual_network(net_obj)
        self._vnc_lib.logical_router_update(lr)

        # Create Port
        port_obj = self.create_port(project, net_obj)
        with ExpectedException(BadRequest):
            lr.add_virtual_machine_interface(port_obj)
            self._vnc_lib.logical_router_update(lr)
        self._vnc_lib.logical_router_delete(id=lr.uuid)
예제 #4
0
    def test_change_from_snat_to_vxlan(self):
        project = self._vnc_lib.project_read(
            fq_name=['default-domain', 'default-project'])
        # Create Logical Router enabled for SNAT.
        lr = LogicalRouter('router-test-snat-to-vxlan-%s' % (self.id()),
                           project)

        lr.set_logical_router_type('snat-routing')
        lr_uuid = self._vnc_lib.logical_router_create(lr)
        lr = self._vnc_lib.logical_router_read(id=lr_uuid)
        logger.debug('Created Logical Router ')

        lr.set_logical_router_type('vxlan-routing')
        with ExpectedException(BadRequest):
            self._vnc_lib.logical_router_update(lr)

        logger.debug('PASS: Could not update LR from SNAT to VXLAN')
예제 #5
0
    def test_vxlan_update_failure_for_lr(self):
        project = self._vnc_lib.project_read(
            fq_name=['default-domain', 'default-project'])
        project.set_vxlan_routing(True)
        self._vnc_lib.project_update(project)
        mock_zk = self._api_server._db_conn._zk_db

        # Create Logical Router
        lr1 = LogicalRouter('router-test-v4-%s' % self.id(), project)
        lr1.set_vxlan_network_identifier('5003')
        lr1.set_logical_router_type('vxlan-routing')
        lr1_uuid = self._vnc_lib.logical_router_create(lr1)
        lr1_read = self._vnc_lib.logical_router_read(id=lr1_uuid)
        vxlan_id1 = lr1_read.get_vxlan_network_identifier()
        self.assertEqual(vxlan_id1, '5003')

        lr2 = LogicalRouter('router-test-v4-%s-2' % self.id(), project)
        lr2.set_vxlan_network_identifier('5004')
        lr2.set_logical_router_type('vxlan-routing')
        lr2_uuid = self._vnc_lib.logical_router_create(lr2)
        lr2_read = self._vnc_lib.logical_router_read(id=lr2_uuid)
        vxlan_id2 = lr2_read.get_vxlan_network_identifier()
        self.assertEqual(vxlan_id2, '5004')

        lr2.set_vxlan_network_identifier('5003')

        with ExpectedException(BadRequest):
            self._vnc_lib.logical_router_update(lr2)

        lr_read = self._vnc_lib.logical_router_read(id=lr2_uuid)
        vxlan_id = lr_read.get_vxlan_network_identifier()
        self.assertEqual(vxlan_id, '5004')

        int_vn_name = get_lr_internal_vn_name(lr2_uuid)
        int_vn_fqname = ['default-domain', 'default-project', int_vn_name]

        self.assertEqual(':'.join(int_vn_fqname) + "_vxlan",
                         mock_zk.get_vn_from_id(int(vxlan_id)))

        self._vnc_lib.logical_router_delete(id=lr1_uuid)
        self._vnc_lib.logical_router_delete(id=lr2_uuid)
예제 #6
0
    def test_vxlan_routing_for_internal_vn(self):
        project = self._vnc_lib.project_read(
            fq_name=['default-domain', 'default-project'])
        project.set_vxlan_routing(True)
        self._vnc_lib.project_update(project)

        # Create Logical Router
        lr = LogicalRouter('router-test-v4-%s' % self.id(), project)
        lr.set_logical_router_type('vxlan-routing')
        lr_uuid = self._vnc_lib.logical_router_create(lr)
        lr = self._vnc_lib.logical_router_read(id=lr_uuid)

        # Check to see whether internal VN for VxLAN Routing is created.
        int_vn_name = get_lr_internal_vn_name(lr_uuid)
        int_vn_fqname = ['default-domain', 'default-project', int_vn_name]
        try:
            self._vnc_lib.virtual_network_read(fq_name=int_vn_fqname)
        except NoIdError as e:
            # Invisible objects do not come up in read
            # calls but throws up a exception saying the
            # object is invisible but cannot be read, confirming
            # the presence of the object. Hack!
            if "This object is not visible" not in str(e):
                assert (False)

        # Check to see if deleting the VN deletes the internal VN
        # that was created.
        self._vnc_lib.logical_router_delete(id=lr_uuid)
        try:
            self._vnc_lib.virtual_network_read(fq_name=int_vn_fqname)
            self.fail("Logical router internal virtual network was not "
                      "removed")
        except NoIdError:
            pass

        # Check to see if we are able to disable VxLAN Routing
        # after LR is deleted in the project.
        project.set_vxlan_routing(False)
        self._vnc_lib.project_update(project)