鯨智云配置平臺(tái)(bk-cmdb)API 實(shí)戰(zhàn):批量更新進(jìn)程信息(update_process_instance))
后端企業(yè)應(yīng)用運(yùn)維【免費(fèi)下載鏈接】bk-cmdb藍(lán)鯨智云配置平臺(tái)(BlueKing CMDB)項(xiàng)目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb點(diǎn)擊查看免費(fèi)下載本文介紹藍(lán)鯨智云配置平臺(tái)BlueKing CMDB簡(jiǎn)稱 bk-cmdb開放 API 中「批量更新進(jìn)程信息」接口的完整用法。該接口用于在業(yè)務(wù)下一次性批量修改多個(gè)進(jìn)程實(shí)例的啟動(dòng)命令、PID 文件、進(jìn)程別名、綁定端口等屬性是自動(dòng)化運(yùn)維平臺(tái)、CI/CD 系統(tǒng)與 CMDB 集成的常用能力。讀完本文你將掌握接口的權(quán)限要求、請(qǐng)求/響應(yīng)結(jié)構(gòu)、全部字段含義以及其背后「服務(wù)實(shí)例編輯權(quán)限」校驗(yàn)、模板字段約束與批量上限的底層實(shí)現(xiàn)。接口概述「批量更新進(jìn)程信息」接口對(duì)應(yīng)操作 IDupdate_process_instance其能力是在指定業(yè)務(wù)bk_biz_id下批量更新進(jìn)程實(shí)例的屬性調(diào)用者必須具備「服務(wù)實(shí)例編輯權(quán)限」。該接口在網(wǎng)關(guān)配置中位于 bk_apigw_resources_bk-cmdb.yaml/api/v3/update/proc/process_instance一節(jié)后端路由注冊(cè)于 service.go請(qǐng)求方法PUT后端路徑/api/v3/update/proc/process_instance網(wǎng)關(guān)映射路徑/update/proc/process_instance接口性質(zhì)非公開資源isPublic: false允許申請(qǐng)調(diào)用權(quán)限allowApplyPermission: true并配置了默認(rèn)限流每周期 100 個(gè)令牌在 service.go 中該路徑與POST /create/proc/process_instance創(chuàng)建進(jìn)程實(shí)例、DELETE /delete/proc/process_instance刪除進(jìn)程實(shí)例、POST /findmany/proc/process_instance查詢進(jìn)程實(shí)例一起構(gòu)成完整的進(jìn)程實(shí)例生命周期 API。權(quán)限說明從權(quán)限模型看該接口在 processinstance.go 中被定義為 IAM 資源ProcessInstanceIAMResourceType上的meta.Update動(dòng)作對(duì)應(yīng)配置如下配置項(xiàng)值權(quán)限名稱updateProcessInstances權(quán)限描述更新進(jìn)程實(shí)例HTTP 方法PUT資源類型ProcessInstanceIAMResourceType資源動(dòng)作update業(yè)務(wù)獲取方式DefaultBizIDGetter從請(qǐng)求體 bk_biz_id 解析調(diào)用前請(qǐng)確保調(diào)用方賬號(hào)在對(duì)應(yīng)業(yè)務(wù)下已獲得進(jìn)程實(shí)例的編輯update權(quán)限若無權(quán)限接口會(huì)返回 permission 相關(guān)的錯(cuò)誤信息。輸入?yún)?shù)頂層請(qǐng)求體包含兩個(gè)必選參數(shù)參數(shù)名稱參數(shù)類型必選描述processesarray是進(jìn)程信息最大值為 100bk_biz_idint是業(yè)務(wù) id其中processes最大數(shù)量為 100對(duì)應(yīng)后端常量BKMaxUpdateOrCreatePageSize 100定義于 definitions.go。超過上限時(shí)processinstance.go 中的UpdateProcessInstances處理器會(huì)返回「超出數(shù)量上限」的錯(cuò)誤CCErrCommXXExceedLimit。processes 字段說明processes數(shù)組中的每個(gè)元素為一條進(jìn)程更新數(shù)據(jù)其字段如下除bk_process_id外均為可選字段未傳的字段默認(rèn)不更新參數(shù)名稱參數(shù)類型必選描述process_template_idint否進(jìn)程模版 idauto_startbool否是否自動(dòng)拉起auto_time_gapint否拉起間隔bk_biz_idint否業(yè)務(wù) idbk_func_idstring否功能 IDbk_func_namestring否進(jìn)程名稱bk_process_idint否進(jìn)程 idbk_process_namestring否進(jìn)程別名bk_supplier_accountstring否開發(fā)商賬號(hào)face_stop_cmdstring否強(qiáng)制停止命令pid_filestring否PID 文件路徑priorityint否啟動(dòng)優(yōu)先級(jí)proc_numint否啟動(dòng)數(shù)量reload_cmdstring否進(jìn)程重載命令restart_cmdstring否重啟命令start_cmdstring否啟動(dòng)命令stop_cmdstring否停止命令timeoutint否操作超時(shí)時(shí)長(zhǎng)userstring否啟動(dòng)用戶work_pathstring否工作路徑process_infoobject否進(jìn)程信息這些字段與 process.go 中metadata.Process結(jié)構(gòu)體的 JSON tag 一一對(duì)應(yīng)例如bk_process_idProcessID、bk_func_nameFuncName、bk_process_nameProcessName、face_stop_cmdForceStopCmd、timeoutTimeoutSeconds、work_pathWorkPath等。bind_info 補(bǔ)充說明在調(diào)用示例中可以看到processes元素還支持bind_info進(jìn)程端口綁定信息數(shù)組其內(nèi)部字段為參數(shù)名稱參數(shù)類型描述enablebool是否啟用該綁定ipstring綁定 IP如127.0.0.1portstring綁定端口如100protocolstring協(xié)議類型如1template_row_idint模板行 id后端校驗(yàn)見 processinstance.go 的validateProcessInstance要求綁定信息的 IP 必須是合法 IPv4 地址端口與協(xié)議不能為空否則會(huì)返回參數(shù)校驗(yàn)錯(cuò)誤。調(diào)用示例{ 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 } ] } ] }請(qǐng)求使用PUT方法發(fā)送到/api/v3/update/proc/process_instance。示例中通過bk_process_id: 43精確定位待更新的進(jìn)程實(shí)例同時(shí)更新其進(jìn)程別名、進(jìn)程名稱、工作路徑、自動(dòng)拉起開關(guān)、超時(shí)時(shí)長(zhǎng)、拉起間隔、啟動(dòng)數(shù)量、啟動(dòng)優(yōu)先級(jí)等屬性并重新設(shè)置一條綁定信息。響應(yīng)示例{ result: true, code: 0, message: success, permission: null, data: [43] }響應(yīng)參數(shù)說明參數(shù)名稱參數(shù)類型描述resultbool請(qǐng)求成功與否。true: 請(qǐng)求成功false 請(qǐng)求失敗codeint錯(cuò)誤編碼。0 表示 success0 表示失敗錯(cuò)誤messagestring請(qǐng)求失敗返回的錯(cuò)誤信息permissionobject權(quán)限信息dataobject請(qǐng)求返回的數(shù)據(jù)其中data為本次成功更新的進(jìn)程實(shí)例 id 數(shù)組如[43]即processes中各個(gè)bk_process_id的集合。源碼級(jí)實(shí)現(xiàn)解析1. 請(qǐng)求鏈路從調(diào)用方視角看請(qǐng)求依次經(jīng)過網(wǎng)關(guān)/開放 API 層PUT /api/v3/update/proc/process_instance由 bk_apigw_resources_bk-cmdb.yaml 定義并在此完成鑒權(quán)與限流proc_server 路由層路由注冊(cè)于 service.go分發(fā)到ps.UpdateProcessInstances處理器見 processinstance.go邏輯層ps.updateProcessInstances逐進(jìn)程構(gòu)造更新數(shù)據(jù)并通過ps.Logic.UpdateProcessInstance下發(fā)到 coreservicecoreservice 實(shí)例層最終調(diào)用CoreService().Instance().UpdateInstance見 processinstance.go按bk_process_id條件更新proc對(duì)象下的實(shí)例數(shù)據(jù)。Go SDK 側(cè)的封裝位于 instance.go 的UpdateProcessInstance方法它內(nèi)部使用PUT方法請(qǐng)求子路徑/update/proc/process_instance。2. 模板實(shí)例與非模板實(shí)例的差異處理后端在更新時(shí)會(huì)先通過ListProcessInstanceRelation查詢進(jìn)程實(shí)例與服務(wù)實(shí)例的關(guān)系然后分兩種情況處理見 processinstance.go非模板創(chuàng)建ProcessTemplateID ServiceTemplateIDNotSet請(qǐng)求中的字段會(huì)整體映射為進(jìn)程數(shù)據(jù)直接更新bk_process_id、bk_supplier_account、last_time、create_time等系統(tǒng)字段會(huì)被剔除不可修改由服務(wù)模板/進(jìn)程模板創(chuàng)建調(diào)用ProcessTemplate.ExtractInstanceUpdateDataprocess.go僅提取模板中允許編輯的字段且再經(jīng)過GetEditableFields過濾。因此模板實(shí)例上被模板鎖定的字段如start_cmd、auto_start、work_path等即使傳入也不會(huì)被更新體現(xiàn)了「模板鎖定」的約束邏輯。從 process.go 的ExtractEditableFields實(shí)現(xiàn)可見模板實(shí)例可編輯字段為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且前提是模板中這些字段未被設(shè)置為「默認(rèn)值A(chǔ)sDefaultValue」。3. 字段置空與校驗(yàn)該接口支持將字段更新為 null 以清空原值處理器會(huì)遍歷processes元素中值為null的字段經(jīng)metadata.FilterValidFields過濾出合法字段后在更新數(shù)據(jù)中將其顯式置為nil。對(duì)于模板實(shí)例還會(huì)先經(jīng)過GetEditableFields過濾確保不會(huì)越權(quán)清空模板鎖定的字段。此外bk_process_id必須存在且不為 0后端會(huì)校驗(yàn)所有傳入的進(jìn)程 id 都能在業(yè)務(wù)下找到對(duì)應(yīng)的進(jìn)程實(shí)例關(guān)系否則返回參數(shù)無效錯(cuò)誤CCErrCommParamsInvalid未找到的進(jìn)程 id 會(huì)拼接到錯(cuò)誤信息中。4. 事務(wù)、審計(jì)與并發(fā)更新過程在AutoRunTxn事務(wù)中執(zhí)行更新前會(huì)先基于更新前的進(jìn)程數(shù)據(jù)與服務(wù)實(shí)例關(guān)系生成審計(jì)日志generateUpdateProcessAudit更新成功后統(tǒng)一落庫(kù)任一進(jìn)程更新失敗則整個(gè)事務(wù)回滾。具體更新時(shí)采用并發(fā)管道channel 容量為 10批量執(zhí)行UpdateProcessInstance以提升大批量更新效率同時(shí)通過waitgroup等待全部完成后統(tǒng)一返回更新成功的進(jìn)程 id 數(shù)組。5. 測(cè)試驗(yàn)證倉(cāng)庫(kù)的集成測(cè)試 no_service_template_test.go 完整覆蓋了該接口構(gòu)造包含bk_func_name、bk_process_name、bk_start_param_regex、bk_process_id與bind_info的請(qǐng)求調(diào)用processClient.UpdateProcessInstance后斷言result為 true并再次查詢進(jìn)程實(shí)例確認(rèn)字段已更新為p3覆蓋了「更新為與已有進(jìn)程同名」的場(chǎng)景斷言返回失敗說明同名進(jìn)程存在唯一性約束。使用建議與注意事項(xiàng)權(quán)限前置調(diào)用前確保調(diào)用方賬號(hào)已獲得對(duì)應(yīng)業(yè)務(wù)下進(jìn)程實(shí)例的編輯權(quán)限服務(wù)實(shí)例編輯權(quán)限否則請(qǐng)求會(huì)被 IAM 拒絕批量上限單次processes數(shù)組最多 100 條超限會(huì)返回錯(cuò)誤大規(guī)模更新請(qǐng)分批調(diào)用模板實(shí)例約束對(duì)由服務(wù)模板生成的進(jìn)程實(shí)例只能更新模板允許編輯的字段其余字段會(huì)被忽略避免與模板配置沖突精確定位每條更新數(shù)據(jù)必須攜帶bk_process_id否則后端無法定位進(jìn)程將返回參數(shù)錯(cuò)誤字段清空將某個(gè)字段設(shè)為null可清空原值但需注意只對(duì)合法字段生效模板實(shí)例還需該字段可編輯響應(yīng)判斷以result與code判斷整體成敗data返回成功更新的進(jìn)程 id 列表可據(jù)此做后續(xù)聯(lián)動(dòng)。相關(guān)文檔與源碼索引接口定義docs/apidoc/apigw/open/bk_apigw_resources_bk-cmdb.yaml路由注冊(cè)src/scene_server/proc_server/service/service.go處理器實(shí)現(xiàn)src/scene_server/proc_server/service/processinstance.go邏輯層封裝src/scene_server/proc_server/logics/processinstance.go數(shù)據(jù)結(jié)構(gòu)定義src/common/metadata/process.go批量上限常量src/common/definitions.go權(quán)限配置src/ac/parser/processinstance.go集成測(cè)試src/test/proc_server/no_service_template_test.go贊分享后端企業(yè)應(yīng)用運(yùn)維【免費(fèi)下載鏈接】bk-cmdb藍(lán)鯨智云配置平臺(tái)(BlueKing CMDB)項(xiàng)目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb點(diǎn)擊查看免費(fèi)下載相關(guān)推薦藍(lán)鯨配置平臺(tái) bk-cmdb 開放接口實(shí)戰(zhàn)批量更新進(jìn)程實(shí)例update_process_instance藍(lán)鯨配置平臺(tái) bk cmdb 開放接口實(shí)戰(zhàn)批量更新進(jìn)程實(shí)例update_process_instance 本篇文章以 update_process_ins后端企業(yè)應(yīng)用運(yùn)維藍(lán)鯨配置平臺(tái)bk-cmdb批量更新 Kubernetes Workload 接口實(shí)戰(zhàn)指南藍(lán)鯨配置平臺(tái)bk cmdb批量更新 Kubernetes Workload 接口實(shí)戰(zhàn)指南 導(dǎo)讀 本文圍繞 bk cmdb藍(lán)鯨智云配置平臺(tái)API 網(wǎng)關(guān)提供后端企業(yè)應(yīng)用運(yùn)維藍(lán)鯨配置平臺(tái)bk-cmdb批量更新項(xiàng)目接口 batch_update_project 實(shí)戰(zhàn)指南藍(lán)鯨配置平臺(tái)bk cmdb批量更新項(xiàng)目接口 batch_update_project 實(shí)戰(zhàn)指南 導(dǎo)讀 batch_update_project 是藍(lán)鯨配置平后端企業(yè)應(yīng)用運(yùn)維上一篇年入千萬的開源項(xiàng)目Directus如何用BSL協(xié)議實(shí)現(xiàn)商業(yè)閉環(huán)下一篇貓抓瀏覽器擴(kuò)展終極指南3步輕松下載網(wǎng)頁(yè)視頻音頻資源創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考