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)
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)
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')])
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)
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)
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)