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