Exemplo n.º 1
0
    def create(self):
        fields = self._get_changed_persistent_fields()
        with self.db_context_writer(self.obj_context):
            try:
                db_obj = obj_db_api.create_object(
                    self, self.obj_context, self.modify_fields_to_db(fields))
            except obj_exc.DBDuplicateEntry as db_exc:
                raise o_exc.NeutronDbObjectDuplicateEntry(
                    object_class=self.__class__, db_exception=db_exc)

            self.from_db_object(db_obj)
Exemplo n.º 2
0
    def create(self):
        fields = self._get_changed_persistent_fields()
        with db_api.autonested_transaction(self.obj_context.session):
            try:
                db_obj = obj_db_api.create_object(
                    self.obj_context, self.db_model,
                    self.modify_fields_to_db(fields))
            except obj_exc.DBDuplicateEntry as db_exc:
                raise o_exc.NeutronDbObjectDuplicateEntry(
                    object_class=self.__class__, db_exception=db_exc)

            self.from_db_object(db_obj)
Exemplo n.º 3
0
 def test__ensure_default_security_group_created_in_parallel(self):
     with mock.patch.object(
             self.mixin, '_get_default_sg_id') as get_default_sg_id,\
             mock.patch.object(
                     self.mixin, 'create_security_group') as create_sg:
         get_default_sg_id.side_effect = [None, 'default_sg_id']
         create_sg.side_effect = obj_exc.NeutronDbObjectDuplicateEntry(
             mock.Mock(), mock.Mock())
         self.mixin._ensure_default_security_group(self.ctx, 'tenant_1')
         create_sg.assert_called_once_with(
             self.ctx,
             {'security_group': {
                 'name': 'default',
                 'tenant_id': 'tenant_1',
                 'description': securitygroups_db.DEFAULT_SG_DESCRIPTION}},
             default_sg=True)
         get_default_sg_id.assert_has_calls([
             mock.call(self.ctx, 'tenant_1'),
             mock.call(self.ctx, 'tenant_1')])
Exemplo n.º 4
0
    def test_negative_create_floatingip_port_forwarding(
            self, mock_port_forwarding, mock_fip_get_object, mock_find_router,
            mock_check_router_match, mock_try_find_exist):
        pf_input = {
            'port_forwarding': {
                'internal_ip_address': '1.1.1.1',
                'floatingip_id': 'fip_id'
            }
        }
        pf_obj = mock.Mock()
        fip_obj = mock.Mock()
        mock_port_forwarding.return_value = pf_obj
        mock_fip_get_object.return_value = fip_obj

        pf_obj.create.side_effect = obj_exc.NeutronDbObjectDuplicateEntry(
            mock.Mock(), mock.Mock())
        mock_try_find_exist.return_value = ('pf_obj', 'conflict_param')
        self.assertRaises(lib_exc.BadRequest,
                          self.pf_plugin.create_floatingip_port_forwarding,
                          self.ctxt, 'fip_id', pf_input)
Exemplo n.º 5
0
 def test_negative_create_conntrack_helper(self, mock_conntrack_helper,
                                           mock_get_router,
                                           mock_find_existing):
     cth_input = {
         'conntrack_helper': {
             'protocol': 'udp',
             'port': '69',
             'helper': 'tftp'
         }
     }
     cth_obj = mock.Mock()
     router_obj = mock.Mock()
     router_obj.id = 'faker-router-id'
     mock_get_router.return_value = router_obj
     mock_conntrack_helper.return_value = cth_obj
     cth_obj.create.side_effect = obj_exc.NeutronDbObjectDuplicateEntry(
         mock.Mock(), mock.Mock())
     mock_find_existing.return_value = ('cth_obj', 'conflict_param')
     self.assertRaises(lib_exc.BadRequest,
                       self.cth_plugin.create_router_conntrack_helper,
                       self.ctxt, router_obj.id, cth_input)
Exemplo n.º 6
0
    def add(self, model_obj):
        if model_obj.__tablename__ not in self.resource_store.store_map:
            return
        model_dict = DotDict(model_obj._as_dict())
        if 'project_id' in model_dict:
            model_dict['tenant_id'] = model_dict['project_id']

        if model_obj.__tablename__ == 'networks':
            model_dict['subnets'] = []
        if model_obj.__tablename__ == 'ports':
            model_dict['dhcp_opts'] = []
            model_dict['security_groups'] = []
            model_dict['fixed_ips'] = []

        link_models(model_obj, model_dict, 'subnetpoolprefixes',
                    'subnetpool_id', 'subnetpools', 'id', 'prefixes')
        link_models(model_obj, model_dict, 'ipallocations', 'port_id', 'ports',
                    'id', 'fixed_ips')
        link_models(model_obj, model_dict, 'subnets', 'network_id', 'networks',
                    'id', 'subnets')
        link_models(model_obj, model_dict, 'securitygrouprules',
                    'security_group_id', 'securitygroups', 'id',
                    'security_group_rules')

        if model_obj.__tablename__ == 'routerports':
            for port in self.resource_store.TOP_PORTS:
                if port['id'] == model_dict['port_id']:
                    model_dict['port'] = port
                    port.update(model_dict)
                    break
        if model_obj.__tablename__ == 'externalnetworks':
            for net in self.resource_store.TOP_NETWORKS:
                if net['id'] == model_dict['network_id']:
                    net['external'] = True
                    net['router:external'] = True
                    break
        if model_obj.__tablename__ == 'networkrbacs':
            if (model_dict['action'] == 'access_as_shared'
                    and model_dict['target_tenant'] == '*'):
                for net in self.resource_store.TOP_NETWORKS:
                    if net['id'] == model_dict['object']:
                        net['shared'] = True
                        break

        link_models(model_obj, model_dict, 'routerports', 'router_id',
                    'routers', 'id', 'attached_ports')

        if model_obj.__tablename__ == 'subnetroutes':
            for subnet in self.resource_store.TOP_SUBNETS:
                if subnet['id'] != model_dict['subnet_id']:
                    continue
                host_route = {
                    'nexthop': model_dict['nexthop'],
                    'destination': model_dict['destination']
                }
                subnet['host_routes'].append(host_route)
                break

        if model_obj.__tablename__ == 'dnsnameservers':
            for subnet in self.resource_store.TOP_SUBNETS:
                if subnet['id'] != model_dict['subnet_id']:
                    continue
                dnsnameservers = model_dict['address']
                subnet['dns_nameservers'].append(dnsnameservers)
                break

        if model_obj.__tablename__ == 'ml2_flat_allocations':
            for alloc in self.resource_store.TOP_ML2_FLAT_ALLOCATIONS:
                if alloc['physical_network'] == model_dict['physical_network']:
                    raise q_obj_exceptions.NeutronDbObjectDuplicateEntry(
                        model_obj.__class__,
                        DotDict({
                            'columns': '',
                            'value': ''
                        }))

        self._extend_standard_attr(model_dict)

        self.add_hook(model_obj, model_dict)
        self.resource_store.store_map[model_obj.__tablename__].append(
            model_dict)