资讯详情

资讯详情

蓝鲸配置平台 bk-cmdb 通用实例删除接口 delete_inst 使用指南

后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载导读本文围绕蓝鲸智云配置平台BlueKing CMDBbk-cmdb开放 API 中的「删除实例」接口delete_inst展开讲解其请求参数、调用方式、响应结构以及接口背后在 topo_server、coreservice 中的完整实现链路。读完本文你将掌握如何安全、正确地删除自定义层级模型与通用模型的实例并理解为什么该接口不能删除业务、集群、模块、主机等内置模型实例以及权限中心IAM场景下的 metadata 传参注意事项。接口概述与适用范围delete_inst用于指定模型 IDbk_obj_id和实例 IDbk_inst_id删除指定模型下的对象实例调用该接口需要具备模型实例删除权限。根据接口文档的明确定义该接口存在严格的适用边界适用对象自定义层级模型custom hierarchy model实例、通用模型common model实例不适用对象业务biz、集群set、模块module、主机host等内置模型的实例。这一限制并非只是文档约定在源码中有直接对应实现。topo_server 的实例删除处理器会先调用common.IsInnerModel(objID)做拦截若目标模型为内置模型则直接返回错误码CCErrCommForbiddenOperateInnerModelInstanceWithCommonAPI值为 1199084拒绝继续执行相关实现见 src/common/mapping.go 与 src/scene_server/topo_server/service/inst.go。提示内置模型的实例删除应使用对应的专用接口如业务、集群、模块的删除接口而非本通用接口。接口地址与请求方法本接口作为蓝鲸 API 网关开放资源注册在网关资源定义文件中路径为HTTP 方法DELETE完整路径/api/v3/delete/instance/object/{bk_obj_id}/inst/{bk_inst_id}网关侧的资源配置operationId 为delete_inst后端透传方式为 HTTP DELETE并挂载了默认 100 tokens/秒 的限流插件可参见 docs/apidoc/apigw/open/bk_apigw_resources_bk-cmdb.yaml。topo_server 内部路由的注册位置与其完全对应utility.AddHandler(rest.Action{Verb: http.MethodDelete, Path: /delete/instance/object/{bk_obj_id}/inst/{inst_id}, Handler: s.DeleteInst})见 src/scene_server/topo_server/service/service_business_initfunc.go。补充说明若将 URL 中的{inst_id}写为batch请求会走同名的批量删除逻辑DeleteInsts对应网关资源batch_delete_inst/api/v3/deletemany/instance/object/{bk_obj_id}。单实例与批量删除共用同一处理器路径判断见 src/scene_server/topo_server/service/inst.go。输入参数说明请求体JSON参数如下参数名称参数类型必选描述bk_obj_idstring是模型 IDbk_inst_idint是实例 IDbk_biz_idint否业务 ID当删除的是自定义主线层级模型实例时则必传三个参数的使用要点bk_obj_id目标模型的唯一标识例如自定义模型test、bk_switchbk_inst_id要删除的具体实例 ID必须是整数bk_biz_id仅在目标为自定义主线层级模型custom mainline model实例时必传。主线层级模型与业务存在归属关系服务端需要据此确定实例所属业务上下文。权限中心IAM场景下的 metadata 传参注意事项文档特别强调了一个容易被忽略的兼容性问题当操作的是自定义主线层级模型实例时如果部署环境使用了权限中心IAM对于CMDB 小于 3.9 的版本还需要额外传递包含实例所在业务 ID 的metadata参数否则会导致权限中心鉴权失败。metadata的格式如下metadata: { label: { bk_biz_id: 64 } }说明bk_biz_id的取值应为字符串形式的业务 ID示例中为64且必须与bk_biz_id参数指向的业务一致该问题的成因是旧版本3.9 之前CMDB 的权限中心鉴权流程需要从请求 metadata 中解析业务维度信息3.9 及以上版本已改为从请求本身提取不再依赖该参数若当前 CMDB 版本低于 3.9 且未配置权限中心则无需携带该字段。调用示例删除模型test下 ID 为44的实例{ bk_obj_id: test, bk_inst_id: 44 }若删除的是自定义主线层级模型实例请求体中还需补充业务维度信息例如{ bk_obj_id: rack, bk_inst_id: 12, bk_biz_id: 64, metadata: { label: { bk_biz_id: 64 } } }响应示例{ result: true, code: 0, message: success, permission: null, data: null }响应参数说明参数名称参数类型描述resultbool请求成功与否。true请求成功false请求失败codeint错误编码。0 表示 success0 表示失败错误码messagestring请求失败时返回的错误信息permissionobject权限信息dataobject请求返回的数据删除成功后为 null服务端实现链路删除一个实例发生了什么掌握接口背后完整的调用链有助于在排查删除失败问题时快速定位。从源码结构看delete_inst的完整链路如下API 网关 → topo_server 路由层网关将 DELETE 请求透传到 topo_server 的DeleteInst处理器处理器从 URL 路径参数中取出bk_obj_id与inst_id并将inst_id解析为 int64解析失败返回参数类型错误错误码为CCErrCommParamsNeedInt。见 src/scene_server/topo_server/service/inst.go。内置模型拦截与主线模型判定处理器首先调用IsInnerModel(objID)拒绝内置模型随后调用IsMainlineObject判定目标是否为主线模型为自定义主线模型删除预留校验位。见 src/common/mapping.go。事务包裹的核心删除逻辑处理器将删除动作放入AutoRunTxn事务中执行保证删除过程中任意一步失败可整体回滚。见 src/scene_server/topo_server/service/inst.go。逻辑层 DeleteInst / DeleteInstByInstID事务内调用InstOperation().DeleteInstByInstID。该函数根据实例 ID 数组构造查询条件通用模型还会追加bk_obj_id条件再委托给DeleteInst。见 src/scene_server/topo_server/logics/inst/inst.go。删除前的安全检查逻辑层DeleteInst按顺序执行先按条件查询待删实例limit 设为BKNoLimit即全量匹配检查实例下是否挂有主机hasHost若存在主机则返回错误码CCErrTopoHasHostCheckFailed1101030终止删除检查实例是否被其他实例通过关联关系引用CheckAssociations被关联绑定的实例不允许删除生成审计日志AuditDelete类型并保存。完整实现见 src/scene_server/topo_server/logics/inst/inst.go。coreservice 落库逻辑层通过CoreService().Instance().DeleteInstance将构造好的DeleteOption下发给 coreservice最终从存储层删除记录。对应接口定义见 src/apimachinery/coreservice/instance/instance.go。SDK 客户端封装若你在 Go 服务内直接调用 topo_server 而非走 API 网关可使用 apimachinery 提供的客户端方法DeleteInst(ctx, objID, instID, header)其内部以 DELETE 方式请求/delete/instance/object/{bk_obj_id}/inst/{inst_id}子路径。见 src/apimachinery/toposerver/inst/inst.go。测试用例佐证仓库的集成测试对删除接口做了完整覆盖例如 src/test/topo_server/inst_test.go 中对bk_switch模型调用instClient.DeleteInst删除已创建的实例断言rsp.Result为 true使用与实例不匹配的模型cc_test删除时接口依然返回成功resulttrue说明按bk_obj_id 实例ID定位不到数据时删除幂等返回不会报错。该测试同样验证了接口对通用模型bk_switch的适用性与文档限定范围一致。使用建议与注意事项确认模型类型删除前先确认目标模型是自定义/通用模型业务、集群、模块、主机等内置模型请使用各自专用删除接口否则会命中1199084错误自定义主线模型务必传业务上下文除bk_biz_id参数外CMDB 3.9 权限中心环境下必须携带metadata.label.bk_biz_id否则鉴权失败删除是有副作用的不可逆操作服务端会在事务中先做主机归属与关联引用检查被主机或关联关系引用的实例无法直接删除审计日志会记录每次删除行为删除幂等按不存在的实例 ID 删除时接口返回成功resulttrue不会抛错方便在重试场景使用批量删除场景若需按条件批量删除实例可使用同一处理器支持的批量接口batch_delete_inst/api/v3/deletemany/instance/object/{bk_obj_id}传入delete.inst_ids列表即可。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台bk-cmdb删除模型实例接口delete_inst实战指南蓝鲸配置平台bk cmdb删除模型实例接口delete_inst实战指南 本文面向蓝鲸智云配置平台BlueKing CMDB下称 bk cmdb的后端企业应用运维蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维蓝鲸配置平台 bk-cmdb 模型分类删除接口 delete_classification 实战指南蓝鲸配置平台 bk cmdb 模型分类删除接口 delete_classification 实战指南 导读 delete_classification 是蓝鲸配后端企业应用运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →