コード例 #1
0
    def test_vip_get(self):
        def get_vip(*args, **kwargs):
            return self.loadbalancer.get_vip(*args, **kwargs)

        self.plugin.return_value.get_vip.side_effect = get_vip

        vip_id = _uuid()

        id_perms = IdPermsType(uuid=vip_id, enable=True)
        props = self._virtual_ip_properties_build()
        vip = VirtualIp(virtual_ip_properties=props,
                        id_perms=id_perms,
                        display_name='vip1')
        vip.parent_uuid = _uuid()
        vip.uuid = vip_id

        instance = self.api_server
        instance.virtual_ip_read.return_value = vip

        return_value = {
            'name': 'vip1',
            'admin_state_up': True,
            'tenant_id': vip.parent_uuid,
            'status': "ACTIVE",
            'id': vip_id
        }

        res = self.api.get(_get_path('lb/vips', id=vip_id, fmt=self.fmt))

        self.assertEqual(res.status_int, exc.HTTPOk.code)
        res = self.deserialize(res)
        self.assertIn('vip', res)
        self.assertDictContainsSubset(return_value, res['vip'])
コード例 #2
0
    def test_vip_get(self):
        def get_vip(*args, **kwargs):
            return self.loadbalancer.get_vip(*args, **kwargs)

        self.plugin.return_value.get_vip.side_effect = get_vip

        vip_id = _uuid()

        id_perms = IdPermsType(uuid=vip_id, enable=True)
        props = self._virtual_ip_properties_build()
        vip = VirtualIp(virtual_ip_properties=props, id_perms=id_perms,
                        display_name='vip1')
        vip.parent_uuid = _uuid()
        vip.uuid = vip_id

        instance = self.api_server
        instance.virtual_ip_read.return_value = vip

        return_value = {'name': 'vip1',
                        'admin_state_up': True,
                        'tenant_id': vip.parent_uuid,
                        'status': "ACTIVE",
                        'id': vip_id}

        res = self.api.get(_get_path('lb/vips', id=vip_id, fmt=self.fmt))

        self.assertEqual(res.status_int, exc.HTTPOk.code)
        res = self.deserialize(res)
        self.assertIn('vip', res)
        self.assertDictContainsSubset(return_value, res['vip'])
コード例 #3
0
 def virtual_ip_read(*args, **kwargs):
     name = None
     props = VirtualIpType()
     props.address = '127.0.0.1'
     if kwargs['id'] == vip1_id:
         name = 'vip1'
         props.protocol = 'HTTP'
     elif kwargs['id'] == vip2_id:
         name = 'vip2'
         props.protocol = 'HTTPS'
     props.protocol_port = 80
     props.connection_limit = 100
     props.subnet_id = _uuid()
     props.admin_state = True
     vip = VirtualIp(virtual_ip_properties=props, display_name=name)
     vip.uuid = kwargs['id']
     vip.parent_uuid = _uuid()
     return vip
コード例 #4
0
 def virtual_ip_read(*args, **kwargs):
     name = None
     props = VirtualIpType()
     props.address = '127.0.0.1'
     if kwargs['id'] == vip1_id:
         name = 'vip1'
         props.protocol = 'HTTP'
     elif kwargs['id'] == vip2_id:
         name = 'vip2'
         props.protocol = 'HTTPS'
     props.protocol_port = 80
     props.connection_limit = 100
     props.subnet_id = _uuid()
     props.admin_state = True
     vip = VirtualIp(virtual_ip_properties=props, display_name=name)
     vip.uuid = kwargs['id']
     vip.parent_uuid = _uuid()
     return vip
コード例 #5
0
    def test_create_pool(self):
        tenant_id = _uuid()
        pool_id = _uuid()
        vip_id = _uuid()
        subnet_id = _uuid()

        api = self.api_server

        project = Project(name='test')
        project.uuid = tenant_id
        template = ServiceTemplate('lb-test', project)
        template.uuid = _uuid()

        pool_attrs = LoadbalancerPoolType()
        pool_attrs.subnet_id = subnet_id
        pool = LoadbalancerPool(
            pool_id, project, loadbalancer_pool_properties=pool_attrs)
        pool.uuid = pool_id

        vip_attrs = VirtualIpType()
        vip_attrs.subnet_id = subnet_id
        vip_attrs.address = '127.0.0.1'
        vip = VirtualIp(vip_id, project, virtual_ip_properties=vip_attrs)
        vip.uuid = vip_id
        vip.set_loadbalancer_pool(pool)

        vnet = VirtualNetwork('test', project)
        vnet.uuid = _uuid()

        vmi = VirtualMachineInterface(vip_id, project)
        vmi.uuid = _uuid()
        vmi.set_virtual_network(vnet)
        iip = InstanceIp(vip_id, instance_ip_address='127.0.0.1')
        iip.uuid = _uuid()
        iip.set_virtual_machine_interface(vmi)

        iip_refs = [
            {'to': iip.get_fq_name(), 'uuid': iip.uuid}
        ]
        vmi.get_instance_ip_back_refs = mock.Mock()
        vmi.get_instance_ip_back_refs.return_value = iip_refs

        vip.set_virtual_machine_interface(vmi)

        api.virtual_service_template_read = template
        api.loadbalancer_pool_read.return_value = pool
        api.virtual_ip_read.return_value = vip
        api.kv_retrieve.return_value = '%s %s' % (vnet.uuid, subnet_id)
        api.virtual_machine_interface_read.return_value = vmi
        api.instance_ip_read.return_value = iip
        api.service_instance_read.side_effect = NoIdError('404')

        context = {}
        pool_data = {
            'id': pool_id,
            'vip_id': vip_id
        }
        self.driver.create_pool(context, pool_data)
        api.service_instance_create.assert_called_with(mock.ANY)
コード例 #6
0
    def create(self, context, vip):
        """
        Create a VIP.
        """
        v = vip['vip']
        tenant_id = self._get_tenant_id_for_create(context, v)

        project = self._project_read(project_id=tenant_id)

        if v['pool_id']:
            try:
                pool = self._api.loadbalancer_pool_read(id=v['pool_id'])
            except NoIdError:
                raise loadbalancer.PoolNotFound(pool_id=v['pool_id'])
            project_id = pool.parent_uuid
            if str(uuid.UUID(tenant_id)) != project_id:
                raise n_exc.NotAuthorized()
            protocol = pool.get_loadbalancer_pool_properties().get_protocol()
            if protocol != v['protocol']:
                raise loadbalancer.ProtocolMismatch(vip_proto=v['protocol'],
                                                    pool_proto=protocol)
            if pool.get_virtual_ip_back_refs():
                raise loadbalancer.VipExists(pool_id=v['pool_id'])
        else:
            pool = None

        obj_uuid = uuidutils.generate_uuid()
        name = self._get_resource_name('virtual-ip', project, v['name'],
                                       obj_uuid)
        id_perms = IdPermsType(enable=True, description=v['description'])
        vip = VirtualIp(name,
                        project,
                        id_perms=id_perms,
                        display_name=v['name'])
        vip.uuid = obj_uuid

        if pool:
            vip.set_loadbalancer_pool(pool)

        vmi, vip_address = self._create_virtual_interface(
            project, obj_uuid, v['subnet_id'], v.get('address'))
        vip.set_virtual_machine_interface(vmi)

        props = self.make_properties(v)
        props.set_address(vip_address)
        vip.set_virtual_ip_properties(props)

        self._api.virtual_ip_create(vip)
        return self.make_dict(vip)
コード例 #7
0
    def test_create_pool(self):
        tenant_id = _uuid()
        pool_id = _uuid()
        vip_id = _uuid()
        subnet_id = _uuid()

        api = self.api_server

        project = Project(name='test')
        project.uuid = tenant_id
        template = ServiceTemplate('lb-test', project)
        template.uuid = _uuid()

        pool_attrs = LoadbalancerPoolType()
        pool_attrs.subnet_id = subnet_id
        pool = LoadbalancerPool(
            pool_id, project, loadbalancer_pool_properties=pool_attrs)
        pool.uuid = pool_id

        vip_attrs = VirtualIpType()
        vip_attrs.subnet_id = subnet_id
        vip_attrs.address = '127.0.0.1'
        vip = VirtualIp(vip_id, project, virtual_ip_properties=vip_attrs)
        vip.uuid = vip_id
        vip.set_loadbalancer_pool(pool)

        vnet = VirtualNetwork('test', project)
        vnet.uuid = _uuid()

        vmi = VirtualMachineInterface(vip_id, project)
        vmi.uuid = _uuid()
        vmi.set_virtual_network(vnet)
        iip = InstanceIp(vip_id, instance_ip_address='127.0.0.1')
        iip.uuid = _uuid()
        iip.set_virtual_machine_interface(vmi)

        iip_refs = [
            {'to': iip.get_fq_name(), 'uuid': iip.uuid}
        ]
        vmi.get_instance_ip_back_refs = mock.Mock()
        vmi.get_instance_ip_back_refs.return_value = iip_refs

        vip.set_virtual_machine_interface(vmi)

        api.virtual_service_template_read = template
        api.loadbalancer_pool_read.return_value = pool
        api.virtual_ip_read.return_value = vip
        api.kv_retrieve.return_value = '%s %s' % (vnet.uuid, subnet_id)
        api.virtual_machine_interface_read.return_value = vmi
        api.instance_ip_read.return_value = iip
        api.service_instance_read.side_effect = NoIdError('404')

        context = {}
        pool_data = {
            'id': pool_id,
            'vip_id': vip_id
        }
        self.driver.create_pool(context, pool_data)
        api.service_instance_create.assert_called_with(mock.ANY)
コード例 #8
0
    def create(self, context, vip):
        """
        Create a VIP.
        """
        v = vip['vip']
        tenant_id = self._get_tenant_id_for_create(context, v)

        project = self._project_read(project_id=tenant_id)

        if v['pool_id']:
            try:
                pool = self._api.loadbalancer_pool_read(id=v['pool_id'])
            except NoIdError:
                raise loadbalancer.PoolNotFound(pool_id=v['pool_id'])
            project_id = pool.parent_uuid
            if str(uuid.UUID(tenant_id)) != project_id:
                raise n_exc.NotAuthorized()
            protocol = pool.get_loadbalancer_pool_properties().get_protocol()
            if protocol != v['protocol']:
                raise loadbalancer.ProtocolMismatch(
                    vip_proto=v['protocol'], pool_proto=protocol)
            if pool.get_virtual_ip_back_refs():
                raise loadbalancer.VipExists(pool_id=v['pool_id'])
        else:
            pool = None

        obj_uuid = uuidutils.generate_uuid()
        name = self._get_resource_name('virtual-ip', project, v['name'], obj_uuid)
        id_perms = IdPermsType(enable=True,
                               description=v['description'])
        vip = VirtualIp(name, project, id_perms=id_perms,
                        display_name=v['name'])
        vip.uuid = obj_uuid

        if pool:
            vip.set_loadbalancer_pool(pool)

        vmi, vip_address = self._create_virtual_interface(project,
            obj_uuid, v['subnet_id'], v.get('address'))
        vip.set_virtual_machine_interface(vmi)

        props = self.make_properties(v)
        props.set_address(vip_address)
        vip.set_virtual_ip_properties(props)

        self._api.virtual_ip_create(vip)
        return self.make_dict(vip)
コード例 #9
0
    def create(self, context, vip):
        """
        Create a VIP.
        """
        v = vip['vip']
        tenant_id = self._get_tenant_id_for_create(context, v)

        project = self._project_read(project_id=tenant_id)

        if v['pool_id']:
            try:
                pool = self._api.loadbalancer_pool_read(id=v['pool_id'])
            except NoIdError:
                raise loadbalancer.PoolNotFound(pool_id=v['pool_id'])
            project_id = pool.parent_uuid
            if tenant_id != project_id:
                raise n_exc.NotAuthorized()
            # TODO: check that the pool has no vip configured
            # if pool.protocol != v['protocol']:
            #     raise loadbalancer.ProtocolMismatch(
            #         vip_proto=v['protocol'], pool_proto=pool.protocol)
        else:
            pool = None

        uuid = uuidutils.generate_uuid()
        name = self._get_resource_name('virtual-ip', project, v['name'], uuid)
        props = self.make_properties(v)
        id_perms = IdPermsType(uuid=uuid,
                               enable=True,
                               description=v['description'])
        vip = VirtualIp(name,
                        project,
                        virtual_ip_properties=props,
                        id_perms=id_perms,
                        display_name=v['name'])
        vip.uuid = uuid

        if pool:
            vip.set_loadbalancer_pool(pool)

        vmi = self._create_virtual_interface(project, uuid, v['subnet_id'],
                                             v.get('address'))
        vip.set_virtual_machine_interface(vmi)

        self._api.virtual_ip_create(vip)
        return self.make_dict(vip)
コード例 #10
0
    def create(self, context, vip):
        """
        Create a VIP.
        """
        v = vip['vip']
        tenant_id = self._get_tenant_id_for_create(context, v)

        project = self._project_read(project_id=tenant_id)

        if v['pool_id']:
            try:
                pool = self._api.loadbalancer_pool_read(id=v['pool_id'])
            except NoIdError:
                raise loadbalancer.PoolNotFound(pool_id=v['pool_id'])
            project_id = pool.parent_uuid
            if tenant_id != project_id:
                raise n_exc.NotAuthorized()
            # TODO: check that the pool has no vip configured
            # if pool.protocol != v['protocol']:
            #     raise loadbalancer.ProtocolMismatch(
            #         vip_proto=v['protocol'], pool_proto=pool.protocol)
        else:
            pool = None

        uuid = uuidutils.generate_uuid()
        name = self._get_resource_name('virtual-ip', project, v['name'], uuid)
        props = self.make_properties(v)
        id_perms = IdPermsType(uuid=uuid, enable=True,
                               description=v['description'])
        vip = VirtualIp(name, project, virtual_ip_properties=props,
                        id_perms=id_perms, display_name=v['name'])
        vip.uuid = uuid

        if pool:
            vip.set_loadbalancer_pool(pool)

        vmi = self._create_virtual_interface(project, uuid, v['subnet_id'],
                                             v.get('address'))
        vip.set_virtual_machine_interface(vmi)

        self._api.virtual_ip_create(vip)
        return self.make_dict(vip)
コード例 #11
0
 def virtual_ip_read(*args, **kwargs):
     props = self._virtual_ip_properties_build()
     vip = VirtualIp(virtual_ip_properties=props)
     vip.uuid = kwargs['id']
     vip.parent_uuid = _uuid()
     return vip
コード例 #12
0
 def virtual_ip_read(*args, **kwargs):
     props = self._virtual_ip_properties_build()
     vip = VirtualIp(virtual_ip_properties=props)
     vip.uuid = kwargs['id']
     vip.parent_uuid = _uuid()
     return vip