ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

蓝鲸智云配置平台(bk-cmdb)API 实战:批量更新进程信息(update_process_instance)

蓝鲸智云配置平台(bk-cmdb)API 实战:批量更新进程信息(update_process_instance) 后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文介绍蓝鲸智云配置平台BlueKing CMDB简称 bk-cmdb开放 API 中「批量更新进程信息」接口的完整用法。该接口用于在业务下一次性批量修改多个进程实例的启动命令、PID 文件、进程别名、绑定端口等属性是自动化运维平台、CI/CD 系统与 CMDB 集成的常用能力。读完本文你将掌握接口的权限要求、请求/响应结构、全部字段含义以及其背后「服务实例编辑权限」校验、模板字段约束与批量上限的底层实现。接口概述「批量更新进程信息」接口对应操作 IDupdate_process_instance其能力是在指定业务bk_biz_id下批量更新进程实例的属性调用者必须具备「服务实例编辑权限」。该接口在网关配置中位于 bk_apigw_resources_bk-cmdb.yaml/api/v3/update/proc/process_instance一节后端路由注册于 service.go请求方法PUT后端路径/api/v3/update/proc/process_instance网关映射路径/update/proc/process_instance接口性质非公开资源isPublic: false允许申请调用权限allowApplyPermission: true并配置了默认限流每周期 100 个令牌在 service.go 中该路径与POST /create/proc/process_instance创建进程实例、DELETE /delete/proc/process_instance删除进程实例、POST /findmany/proc/process_instance查询进程实例一起构成完整的进程实例生命周期 API。权限说明从权限模型看该接口在 processinstance.go 中被定义为 IAM 资源ProcessInstanceIAMResourceType上的meta.Update动作对应配置如下配置项值权限名称updateProcessInstances权限描述更新进程实例HTTP 方法PUT资源类型ProcessInstanceIAMResourceType资源动作update业务获取方式DefaultBizIDGetter从请求体 bk_biz_id 解析调用前请确保调用方账号在对应业务下已获得进程实例的编辑update权限若无权限接口会返回 permission 相关的错误信息。输入参数顶层请求体包含两个必选参数参数名称参数类型必选描述processesarray是进程信息最大值为 100bk_biz_idint是业务 id其中processes最大数量为 100对应后端常量BKMaxUpdateOrCreatePageSize 100定义于 definitions.go。超过上限时processinstance.go 中的UpdateProcessInstances处理器会返回「超出数量上限」的错误CCErrCommXXExceedLimit。processes 字段说明processes数组中的每个元素为一条进程更新数据其字段如下除bk_process_id外均为可选字段未传的字段默认不更新参数名称参数类型必选描述process_template_idint否进程模版 idauto_startbool否是否自动拉起auto_time_gapint否拉起间隔bk_biz_idint否业务 idbk_func_idstring否功能 IDbk_func_namestring否进程名称bk_process_idint否进程 idbk_process_namestring否进程别名bk_supplier_accountstring否开发商账号face_stop_cmdstring否强制停止命令pid_filestring否PID 文件路径priorityint否启动优先级proc_numint否启动数量reload_cmdstring否进程重载命令restart_cmdstring否重启命令start_cmdstring否启动命令stop_cmdstring否停止命令timeoutint否操作超时时长userstring否启动用户work_pathstring否工作路径process_infoobject否进程信息这些字段与 process.go 中metadata.Process结构体的 JSON tag 一一对应例如bk_process_idProcessID、bk_func_nameFuncName、bk_process_nameProcessName、face_stop_cmdForceStopCmd、timeoutTimeoutSeconds、work_pathWorkPath等。bind_info 补充说明在调用示例中可以看到processes元素还支持bind_info进程端口绑定信息数组其内部字段为参数名称参数类型描述enablebool是否启用该绑定ipstring绑定 IP如127.0.0.1portstring绑定端口如100protocolstring协议类型如1template_row_idint模板行 id后端校验见 processinstance.go 的validateProcessInstance要求绑定信息的 IP 必须是合法 IPv4 地址端口与协议不能为空否则会返回参数校验错误。调用示例{ bk_biz_id: 1, processes: [ { bk_process_id: 43, description: , start_cmd: , restart_cmd: , pid_file: , auto_start: false, timeout: 30, auto_time_gap: 60, reload_cmd: , bk_func_name: java, work_path: /data/bkee, stop_cmd: , face_stop_cmd: , bk_process_name: job_java, user: , proc_num: 1, priority: 1, bk_biz_id: 2, bk_func_id: , bind_info: [ { enable: false, ip: 127.0.0.1, port: 100, protocol: 1, template_row_id: 1 } ] } ] }请求使用PUT方法发送到/api/v3/update/proc/process_instance。示例中通过bk_process_id: 43精确定位待更新的进程实例同时更新其进程别名、进程名称、工作路径、自动拉起开关、超时时长、拉起间隔、启动数量、启动优先级等属性并重新设置一条绑定信息。响应示例{ result: true, code: 0, message: success, permission: null, data: [43] }响应参数说明参数名称参数类型描述resultbool请求成功与否。true: 请求成功false 请求失败codeint错误编码。0 表示 success0 表示失败错误messagestring请求失败返回的错误信息permissionobject权限信息dataobject请求返回的数据其中data为本次成功更新的进程实例 id 数组如[43]即processes中各个bk_process_id的集合。源码级实现解析1. 请求链路从调用方视角看请求依次经过网关/开放 API 层PUT /api/v3/update/proc/process_instance由 bk_apigw_resources_bk-cmdb.yaml 定义并在此完成鉴权与限流proc_server 路由层路由注册于 service.go分发到ps.UpdateProcessInstances处理器见 processinstance.go逻辑层ps.updateProcessInstances逐进程构造更新数据并通过ps.Logic.UpdateProcessInstance下发到 coreservicecoreservice 实例层最终调用CoreService().Instance().UpdateInstance见 processinstance.go按bk_process_id条件更新proc对象下的实例数据。Go SDK 侧的封装位于 instance.go 的UpdateProcessInstance方法它内部使用PUT方法请求子路径/update/proc/process_instance。2. 模板实例与非模板实例的差异处理后端在更新时会先通过ListProcessInstanceRelation查询进程实例与服务实例的关系然后分两种情况处理见 processinstance.go非模板创建ProcessTemplateID ServiceTemplateIDNotSet请求中的字段会整体映射为进程数据直接更新bk_process_id、bk_supplier_account、last_time、create_time等系统字段会被剔除不可修改由服务模板/进程模板创建调用ProcessTemplate.ExtractInstanceUpdateDataprocess.go仅提取模板中允许编辑的字段且再经过GetEditableFields过滤。因此模板实例上被模板锁定的字段如start_cmd、auto_start、work_path等即使传入也不会被更新体现了「模板锁定」的约束逻辑。从 process.go 的ExtractEditableFields实现可见模板实例可编辑字段为bk_func_name、bk_process_name、bk_start_param_regex、bk_start_check_secs、user、stop_cmd、proc_num、description、timeout、auto_start、pid_file、reload_cmd、restart_cmd、face_stop_cmd、work_path、priority、start_cmd以及bind_info且前提是模板中这些字段未被设置为「默认值AsDefaultValue」。3. 字段置空与校验该接口支持将字段更新为 null 以清空原值处理器会遍历processes元素中值为null的字段经metadata.FilterValidFields过滤出合法字段后在更新数据中将其显式置为nil。对于模板实例还会先经过GetEditableFields过滤确保不会越权清空模板锁定的字段。此外bk_process_id必须存在且不为 0后端会校验所有传入的进程 id 都能在业务下找到对应的进程实例关系否则返回参数无效错误CCErrCommParamsInvalid未找到的进程 id 会拼接到错误信息中。4. 事务、审计与并发更新过程在AutoRunTxn事务中执行更新前会先基于更新前的进程数据与服务实例关系生成审计日志generateUpdateProcessAudit更新成功后统一落库任一进程更新失败则整个事务回滚。具体更新时采用并发管道channel 容量为 10批量执行UpdateProcessInstance以提升大批量更新效率同时通过waitgroup等待全部完成后统一返回更新成功的进程 id 数组。5. 测试验证仓库的集成测试 no_service_template_test.go 完整覆盖了该接口构造包含bk_func_name、bk_process_name、bk_start_param_regex、bk_process_id与bind_info的请求调用processClient.UpdateProcessInstance后断言result为 true并再次查询进程实例确认字段已更新为p3覆盖了「更新为与已有进程同名」的场景断言返回失败说明同名进程存在唯一性约束。使用建议与注意事项权限前置调用前确保调用方账号已获得对应业务下进程实例的编辑权限服务实例编辑权限否则请求会被 IAM 拒绝批量上限单次processes数组最多 100 条超限会返回错误大规模更新请分批调用模板实例约束对由服务模板生成的进程实例只能更新模板允许编辑的字段其余字段会被忽略避免与模板配置冲突精确定位每条更新数据必须携带bk_process_id否则后端无法定位进程将返回参数错误字段清空将某个字段设为null可清空原值但需注意只对合法字段生效模板实例还需该字段可编辑响应判断以result与code判断整体成败data返回成功更新的进程 id 列表可据此做后续联动。相关文档与源码索引接口定义docs/apidoc/apigw/open/bk_apigw_resources_bk-cmdb.yaml路由注册src/scene_server/proc_server/service/service.go处理器实现src/scene_server/proc_server/service/processinstance.go逻辑层封装src/scene_server/proc_server/logics/processinstance.go数据结构定义src/common/metadata/process.go批量上限常量src/common/definitions.go权限配置src/ac/parser/processinstance.go集成测试src/test/proc_server/no_service_template_test.go赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台 bk-cmdb 开放接口实战批量更新进程实例update_process_instance蓝鲸配置平台 bk cmdb 开放接口实战批量更新进程实例update_process_instance 本篇文章以 update_process_ins后端企业应用运维蓝鲸配置平台bk-cmdb批量更新 Kubernetes Workload 接口实战指南蓝鲸配置平台bk cmdb批量更新 Kubernetes Workload 接口实战指南 导读 本文围绕 bk cmdb蓝鲸智云配置平台API 网关提供后端企业应用运维蓝鲸配置平台bk-cmdb批量更新项目接口 batch_update_project 实战指南蓝鲸配置平台bk cmdb批量更新项目接口 batch_update_project 实战指南 导读 batch_update_project 是蓝鲸配置平后端企业应用运维上一篇年入千万的开源项目Directus如何用BSL协议实现商业闭环下一篇猫抓浏览器扩展终极指南3步轻松下载网页视频音频资源创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表