蓝鲸配置平台(bk-cmdb)批量更新被引用模型实例接口实战:batch_update_quoted_inst 全解析
后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载导读在蓝鲸智云配置平台BlueKing CMDB中模型引用Model Quote机制允许源模型通过表格类型属性引用一张派生子表例如主机模型通过disk属性引用磁盘表。当需要一次性修改多条被引用实例时可调用batch_update_quoted_inst接口v3.10.30 引入。本文以 docs/apidoc/apigw/open/zh/batch_update_quoted_inst.md 为主干结合仓库源码梳理该接口的请求参数、调用示例、响应结构以及底层的路由注册、参数校验、权限与审计实现帮助读者正确、安全地批量更新被引用模型实例。接口概述功能定位batch_update_quoted_inst用于批量更新被引用的模型的实例即批量修改源模型通过表格属性引用出的子模型中的多条实例记录。它需要以下前置条件版本要求v3.10.30 及以上版本权限要求调用者需要具备源模型实例的编辑权限。从源码结构看被引用模型的实例管理与普通模型实例走的是独立链路拓扑服务topo_server负责接入层鉴权与审计核心服务coreservice负责真正的数据读写二者通过ModelQuote()客户端桥接相关代码位于 src/scene_server/topo_server/service/quoted_instance.go 与 src/source_controller/coreservice/service/model_quote/quoted_inst.go。模型引用的数据模型被引用模型与源模型的关联关系记录在ModelQuoteRelation结构中见 src/common/metadata/model_quote.goDestModel派生出的子模型即被引用模型例如bk_host_diskSrcModel源模型例如主机模型hostPropertyID源模型上引用该子模型的属性 ID例如diskType引用类型如表格table。生成被引用模型对象 ID 的规则为bk_ 源模型 # 属性ID对应源码函数GenerateModelQuoteObjID(srcModel, propertyID)。这解释了为什么接口入参必须同时提供bk_obj_id与bk_property_id二者共同定位到唯一的被引用模型及其表。输入参数详解接口请求体为 JSON 对象各参数说明如下与原文档保持完全一致并补充源码校验细节参数名称参数类型必选描述bk_obj_idstring是源模型 IDbk_property_idstring是源模型引用该模型的属性 IDidsint64 array是需要更新的实例 ID 数组最多不能超过 500 个dataobject是需要更新的实例信息data 字段说明data为待更新的字段集合其字段由被引用模型的属性定义决定并非固定结构。原文档中的name、operator、description仅为示例字段参数名称参数类型必选描述namestringdata 中至少一个字段必填名称此处仅为示例实际字段由模型属性决定operatorstringdata 中至少一个字段必填维护人此处仅为示例实际字段由模型属性决定descriptionstringdata 中至少一个字段必填描述此处仅为示例实际字段由模型属性决定提示data中的多个字段是批量应用于ids指定的全部实例即这些实例会统一被设置为相同值。若需要对不同实例设置不同字段值应拆分为多次调用。源码层的参数校验逻辑服务端对入参的校验可在 src/common/metadata/model_quote.go 的BatchUpdateQuotedInstOption.Validate()中看到它与接口文档互为印证bk_obj_id为空 → 报参数缺失bk_property_id为空 → 报参数缺失ids为空数组 → 报参数缺失ids数量超过common.BKMaxWriteOpLimit200→ 报参数缺失错误此处注意文档上限 500 与常量定义存在差异源码中BKMaxWriteOpLimit 200见 src/common/definitions.go实际以服务端校验为准data为空对象 → 报参数缺失。此外拓扑服务层还会做二次校验src/scene_server/topo_server/service/quoted_instance.go通过ModelQuoteOperation().GetQuotedObjID根据bk_obj_idbk_property_id查询ModelQuoteRelation定位被引用模型对象 ID实现见 src/scene_server/topo_server/logics/model_quote/model_quote.go用filtertools.GenAtomFilter(common.BKFieldID, filter.In, opt.IDs)构造ID 属于 ids 集合的过滤条件先查出待更新实例的原始快照用于后续鉴权与审计。调用示例以下为原文档提供的完整调用示例{ bk_obj_id: host, bk_property_id: disk, ids: [ 1, 2 ], data: { name: test, operator: user, description: test instance } }该示例的含义将主机host模型通过disk属性引用的磁盘实例中 ID 为 1、2 的两条记录统一更新为nametest、operatoruser、descriptiontest instance。响应结构与示例响应示例{ result: true, code: 0, message: success, permission: null, data: null }响应参数说明参数名称参数类型描述resultbool请求成功与否。true请求成功false请求失败codeint错误编码。0 表示 success0 表示失败错误messagestring请求失败返回的错误信息permissionobject权限信息dataobject请求返回的数据更新成功时data返回null这一点与批量创建接口batch_create_quoted_inst不同——创建接口的data.ids会返回新实例 ID 数组可参见 docs/apidoc/apigw/open/zh/batch_create_quoted_inst.md而批量删除接口同样返回data: null见 docs/apidoc/apigw/open/zh/batch_delete_quoted_inst.md。底层调用链与实现原理路由注册该接口的 HTTP 路由在拓扑服务的initModelQuote中注册src/scene_server/topo_server/service/service_model_quote_initfunc.goutility.AddHandler(rest.Action{Verb: http.MethodPut, Path: /updatemany/quoted/instance, Handler: s.BatchUpdateQuotedInstance})即完整 API 路径为PUT /api/v3/updatemany/quoted/instance权限点在 src/ac/parser/model_quote.go 中登记为BatchUpdateQuotedInstance/ 更新引用模型实例。服务端处理流程拓扑服务层的BatchUpdateQuotedInstancesrc/scene_server/topo_server/service/quoted_instance.go执行步骤如下解析并校验请求体cts.DecodeInto(opt)反序列化为BatchUpdateQuotedInstOption并执行Validate()定位被引用模型调用GetQuotedObjID从关系表取出DestModel查询实例快照按ids构造filter.In条件查询现有实例limit 为BKMaxPageSize用于后续鉴权与审计日志生成鉴权通过authorizeQuotedInstance调用AuthManager.AuthorizeByInstanceID(..., meta.Update, objID, instIDs...)对被引用实例做更新授权源码注释表明当前复用了源模型实例的更新动作进行鉴权生成审计日志使用auditlog.NewQuotedInstAuditLog生成AuditUpdate类型的操作审计实现见 src/common/auditlog/quoted_inst.go记录变更前后的字段内容事务内更新在AutoRunTxn事务中调用CoreService().ModelQuote().BatchUpdateQuotedInstance真正写库并在同一事务内保存审计日志保证数据与审计的一致性响应成功则返回data: null。核心数据层实现核心服务层coreservice的BatchUpdateQuotedInstancesrc/source_controller/coreservice/service/model_quote/quoted_inst.go完成最终写库解析CommonUpdateOption包含过滤条件与data执行Validate()取路径参数bk_obj_id通过common.GetInstTableName(objID, supplierAccount)计算被引用模型的 MongoDB 表名调用validateUpdateQuotedInst逐字段校验细节见 src/source_controller/coreservice/service/model_quote/quoted_inst_validate.go过滤掉bk_inst_id、bk_field_id等主键/关联字段不允许通过该接口修改仅保留被引用模型属性表中真实存在且IsEditable为 true 的字段其余字段被静默删除对字符串值做TrimSpace去空格并调用属性的Validate做类型/枚举/必填等校验将过滤条件SetModOwner加上供应商账号多租户数据隔离并把last_time更新为当前时间执行mongodb.Client().Table(table).Update(ctx, filter, data)批量更新若命中唯一键冲突返回重复项错误否则返回RespEntity(nil)。客户端调用封装若通过 Go SDK 调用可使用 src/apimachinery/apiserver/model_quote/instance.go 中提供的封装err : quoteClient.BatchUpdateQuotedInstance(ctx, header, metadata.BatchUpdateQuotedInstOption{ ObjID: host, PropertyID: disk, IDs: []uint64{1, 2}, Data: mapstr.MapStr{name: test}, })客户端内部以PUT /updatemany/quoted/instance请求并统一解析BaseResp出错时返回errors.CCHttpError或业务错误码。测试用例佐证仓库集成测试 src/test/topo_server/model_quote_test.go 覆盖了更新场景正常更新构造BatchUpdateQuotedInstOption含ObjID、PropertyID、IDs、Data调用BatchUpdateQuotedInstance断言不报错异常场景PropertyID设置为不存在的prop_no_exist断言调用报错——对应源码中GetQuotedObjID查询关系表无结果时返回参数非法错误。这为接口行为提供了可复现的验证路径。使用注意事项权限前置接口要求源模型实例的编辑权限权限校验失败时响应中permission字段会携带所需权限信息数量上限ids数组不能超过文档所述 500 个且实际服务端校验以BKMaxWriteOpLimit源码中为 200为准批量过大时应分批调用字段白名单data中非被引用模型属性、或不可编辑IsEditablefalse的字段会被忽略bk_inst_id等关联字段不可通过本接口修改整体覆盖语义data中的所有字段会统一写入ids指定的所有实例请确认业务上允许这些实例拥有相同的更新值审计可追溯更新会写入操作审计QuotedInst 类型AuditUpdate动作变更记录可在平台审计中心查询原子性更新与审计日志在同一事务内提交任一环节失败都会整体回滚不会出现数据已改、审计缺失的不一致状态。关联文档如需了解被引用模型实例的完整操作闭环可配合阅读同一目录下的关联接口文档批量创建docs/apidoc/apigw/open/zh/batch_create_quoted_inst.md查询列表docs/apidoc/apigw/open/zh/list_quoted_inst.md批量删除docs/apidoc/apigw/open/zh/batch_delete_quoted_inst.md结合这三篇文档与上文源码分析即可完整掌握被引用模型实例从创建、查询、批量更新到删除的整个 API 使用链路。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸 CMDB 批量更新引用模型实例batch_update_quoted_inst接口实战详解蓝鲸 CMDB 批量更新引用模型实例batch_update_quoted_inst接口实战详解 本文以仓库文档 docs/apidoc/apigw/ope后端企业应用运维蓝鲸配置平台 bk-cmdb 开放接口实战批量更新进程实例update_process_instance蓝鲸配置平台 bk cmdb 开放接口实战批量更新进程实例update_process_instance 本篇文章以 update_process_ins后端企业应用运维蓝鲸配置平台bk-cmdb批量更新 Kubernetes Workload 接口实战指南蓝鲸配置平台bk cmdb批量更新 Kubernetes Workload 接口实战指南 导读 本文围绕 bk cmdb蓝鲸智云配置平台API 网关提供后端企业应用运维上一篇终极指南3步让你的老款Mac焕发新生免费安装最新macOS系统下一篇深度解析如何用mootdx构建高效通达信金融数据处理系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI编程教程从零到两万星:如何让内容被AI助手推荐

AI编程教程从零到两万星:如何让内容被AI助手推荐

1. 从两万星标说起:一个AI编程教程的意外出圈路径 做技术内容这些年,我写过不少东西,但真正让我觉得"这事儿有点意思"的时刻并不多。其中一个,就是某天打开后台,发现自己在代码托管平台上维护的那个AI编程教…

2026/10/13 8:32:44 阅读更多 →
免费可商用的人脸识别开发包:授权边界与生产化落地指南

免费可商用的人脸识别开发包:授权边界与生产化落地指南

简介:免费可商用的人脸识别开发包,提供完整项目实例源码,适合需要快速集成人脸检测、特征提取与匹配能力的移动端、桌面端或服务端开发者,也适合初学者通过演示与源码对照入门。压缩包共213个文件、约2.7MB,以SDK为核心…

2026/10/13 8:32:44 阅读更多 →
智能体失控的工程真相:从边界越界到分层兜底架构设计

智能体失控的工程真相:从边界越界到分层兜底架构设计

1. 从“智能体失控”这个说法说起:它到底在指什么“智能体失控”这个词最近被讨论得很多,但大多数讨论都停留在科幻层面,把它想象成电影里机器人觉醒、反过来对抗人类的桥段。我在实际做智能体系统开发和调试的过程中发现,真正值得…

2026/10/13 8:32:44 阅读更多 →

最新新闻

Python大数据分析实验通关指南:从数据清洗到可视化全流程

Python大数据分析实验通关指南:从数据清洗到可视化全流程

1. 从lab7这个编号说起:为什么Python课设总在第七周卡住 如果你正在翻这门课的实验安排,看到lab7这个编号,大概率已经过了前六周的语法基础、循环判断、函数封装,开始进入真正要“处理数据”的阶段了。这门课的名字叫《Python程序…

2026/10/13 9:22:51 阅读更多 →
RAG系统实战:从知识库构建到检索生成的全链路设计与调优

RAG系统实战:从知识库构建到检索生成的全链路设计与调优

1. RAG系统到底在解决什么问题第一次接触RAG这个概念是在一个内部知识库项目里。当时团队想把一堆产品文档、会议纪要、客服记录做成一个能问答的系统,第一反应是直接丢给大模型。结果很快就撞墙了:模型对内部信息一无所知,问它某个产品的具体…

2026/10/13 9:22:51 阅读更多 →
AI写的PowerShell脚本一跑就崩?根因分析与实用提示词模板

AI写的PowerShell脚本一跑就崩?根因分析与实用提示词模板

前几天帮朋友排查一个调度任务,卡在一个PowerShell脚本上,AI一口气生成了四十多行“看起来很完整”的代码,结果跑起来第一行就报“术语无法识别”,后面全部白给。这不是我第一次见到AI写的PowerShell翻车了。它给出的命令确实存在…

2026/10/13 9:22:51 阅读更多 →
基于OpenCV的单目与双目相机测距:标定、视差与精度实践

基于OpenCV的单目与双目相机测距:标定、视差与精度实践

简介:一套基于Python和OpenCV的普通相机图像测距系统资料包,面向计算机视觉与立体成像方向的开发者和学习者,解决通过普通相机拍摄图像实现精确距离测量的问题。系统涵盖单目相机标定校正、双目相机空间位置关系标定、左右视图视差计算与深度…

2026/10/13 9:22:51 阅读更多 →
dplyr 值映射重编码:深入解析 `recode_values()` 与 `replace_values()` 的语义、类型安全与防御性编程

dplyr 值映射重编码:深入解析 `recode_values()` 与 `replace_values()` 的语义、类型安全与防御性编程

数据分析 【免费下载链接】dplyr dplyr: A grammar of data manipulation 项目地址: https://gitcode.com/gh_mirrors/dp/dplyr 点击查看 免费下载 recode_values() 与 replace_values() 是 dplyr 1.2.x 引入的"按值匹配"重编码函数族:前者用…

2026/10/13 9:22:51 阅读更多 →
互联网大厂职场生存指南:高薪背后的健康与职业危机

互联网大厂职场生存指南:高薪背后的健康与职业危机

1. 职场生存现状:光鲜背后的残酷现实那天晚上十点半,我正收拾东西准备离开办公室,突然听到隔壁工位传来一阵骚动。老张,那个连续加班三个月的技术总监,突然倒在了键盘上。救护车来得很快,但已经来不及了。一…

2026/10/13 9:21:48 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →