def _get_api_client(self, username, password, project_name, role_name,
                        create_project=True):
        project = self.keystone.tenants.get(name=project_name)
        if not project:
            project = self.keystone.tenants.create(project_name)
        user = self.keystone.users.get(username) or self.keystone.users.create(
            username, password, '', project.id)
        role = self.keystone.roles.get(role_name)
        if not role:
            role = self.keystone.roles.create(role_name)
        self.keystone.roles.add_user_role(user, role, project)

        if create_project:
            p = Project(project.name)
            p.uuid = project.id
            self.admin_api.project_create(p)

        return MyVncApi(
            username=username,
            password=password,
            project_name=project.name,
            project_id=project.id,
            user_role=role_name,
            api_server_host=self._api_server_ip,
            api_server_port=self._api_server_port)
 def _project_read(self, *args, **kwargs):
     """ Return a mock project with the expected values """
     project = Project()
     project.uuid = kwargs['id']
     project.fq_name = ['default-domain', 'test']
     self._project = project
     return project
 def _project_read(self, *args, **kwargs):
     """ Return a mock project with the expected values """
     project = Project()
     project.uuid = kwargs['id']
     project.fq_name = ['default-domain', 'test']
     self._project = project
     return project
    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)
示例#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 test_parallel_project_cassandra_create_read(self):
        project = Project('project-%s' % self.id())
        project.uuid = str(uuid.uuid4())
        default_aps_name = 'default-%s' % ApplicationPolicySet.resource_type
        aps_fq_name = project.fq_name + [default_aps_name]
        original_fq_name_to_uuid = self._api_server._db_conn.fq_name_to_uuid
        inoked = []

        def mock_fq_name_to_uuid(obj_type, fq_name):
            if not inoked and obj_type == 'application_policy_set'\
                    and fq_name == aps_fq_name:
                inoked.append(True)
                raise NoIdError('')
            return original_fq_name_to_uuid(obj_type, fq_name)

        self.api.project_create(project)
        with mock.patch.object(self._api_server._db_conn,
                               'fq_name_to_uuid',
                               side_effect=mock_fq_name_to_uuid):
            self.api.project_read(id=project.uuid)
示例#7
0
    def setUp(self):
        super(TestVncCfgApiServerWithRbac, self).setUp()
        self.keystone = kclient(username='******',
                                password='******',
                                tenant_name='admin',
                                auth_url='http://127.0.0.1:5000/v2.0')

        self.admin_api = self._get_api_client('admin-%s' % self.id(),
                                              'password',
                                              'admin-project-%s' % self.id(),
                                              'cloud-admin',
                                              create_project=False)
        p = Project(self.admin_api.project_name)
        p.uuid = self.admin_api.project_id
        self.admin_api.project_create(p)

        global_aal = self.admin_api.api_access_list_read(
            ['default-global-system-config', 'default-api-access-list'])
        global_aal_entries = global_aal.get_api_access_list_entries()
        global_aal_entries.add_rbac_rule(build_rule('* member:CRUD'))
        global_aal.set_api_access_list_entries(global_aal_entries)
        self.admin_api.api_access_list_update(global_aal)
示例#8
0
    def test_parallel_project_zk_create_read(self):
        project = Project('project-%s' % self.id())
        project.uuid = str(uuid.uuid4())
        default_aps_name = 'default-%s' % ApplicationPolicySet.resource_type
        aps_fq_name = project.fq_name + [default_aps_name]
        original_fq_name_to_uuid = self._api_server._db_conn.fq_name_to_uuid
        invoked = []

        def mock_fq_name_to_uuid(obj_type, fq_name):
            #  fq_name_to_uuid will return NoIdError  from locate
            #  and post_common which results create_fq_name_to_uuid_mapping
            #  to be called for default aps again.

            if len(invoked) < 2 and obj_type == 'application_policy_set' \
                    and fq_name == aps_fq_name:
                invoked.append(True)
                raise NoIdError('')
            return original_fq_name_to_uuid(obj_type, fq_name)

        self.api.project_create(project)
        with mock.patch.object(self._api_server._db_conn,
                               'fq_name_to_uuid',
                               side_effect=mock_fq_name_to_uuid):
            self.api.project_read(id=project.uuid)