Documentation
¶
Overview ¶
Package cmdb provides cmdb service.
Package cmdb provides cmdb client.
Index ¶
- Constants
- func CheckAndMarkHostAliasConflicts(kit *kit.Kit, dao dao.Set, tx *gen.QueryTx, bizID uint32) error
- func DeleteInstanceStoppedUnmanaged(kit *kit.Kit, dao dao.Set, tx *gen.QueryTx, bizID uint32, processIDs []uint32) error
- func NewSyncCMDBService(tenantID string, bizID int, svc bkcmdb.Service, dao dao.Set) *syncCMDBService
- func PageFetcher[T any](fetch func(page *bkcmdb.PageParam) ([]T, int, error)) ([]T, error)
- type ApplicationXML
- type BizGlobalVariables
- type Bizs
- type BuildInstancesParams
- type BuildProcessChangesParams
- type BuildProcessChangesResult
- type CCTopoXMLService
- func (s *CCTopoXMLService) GetBizGlobalVariables(ctx context.Context) (*BizGlobalVariables, error)
- func (s *CCTopoXMLService) GetBizGlobalVariablesMap(ctx context.Context) (map[string]interface{}, error)
- func (s *CCTopoXMLService) GetBizObjectAttributes(ctx context.Context) (map[string][]ObjectAttribute, error)
- func (s *CCTopoXMLService) GetTopoTreeXML(ctx context.Context, setEnv string) (string, error)
- type Host
- type HostInfo
- type HostProcessKey
- type HostXML
- type InstanceReconcileResult
- type Module
- type ModuleAliasKey
- type ModuleXML
- type ObjectAttribute
- type ProcInst
- type ProcessDiff
- type ProcessWithInstances
- type ReconcileInstancesParams
- type ReorderParams
- type Set
- type SetXML
- type SvcInst
- type SyncContext
- type SyncProcessResult
Constants ¶
const ( // BK_SET_OBJ_ID Set 对象ID BK_SET_OBJ_ID = "set" // BK_MODULE_OBJ_ID Module 对象ID BK_MODULE_OBJ_ID = "module" // BK_HOST_OBJ_ID Host 对象ID BK_HOST_OBJ_ID = "host" )
Variables ¶
This section is empty.
Functions ¶
func CheckAndMarkHostAliasConflicts ¶
CheckAndMarkHostAliasConflicts 检测同主机同别名冲突并标记状态
逻辑:
- 查询同 biz 下 (host_id, alias) 重复的进程 ID 列表
- 将冲突进程标记为 abnormal
- 将之前标记为 abnormal 但已不再冲突的进程恢复为 synced
func DeleteInstanceStoppedUnmanaged ¶
func DeleteInstanceStoppedUnmanaged(kit *kit.Kit, dao dao.Set, tx *gen.QueryTx, bizID uint32, processIDs []uint32) error
DeleteInstanceStoppedUnmanaged 删除进程状态是已停止或者是空 和 托管状态是未托管或者是空的实例数据
Types ¶
type ApplicationXML ¶
ApplicationXML 应用根节点(对应 Python 中的 Application) 参考 Python 代码中的 XML 结构:doc.createElement("Application")
type BizGlobalVariables ¶
type BizGlobalVariables struct {
// TopoVariables 拓扑变量字段列表
// 包含 Set、Module、Host 的所有字段列表,用于补充 XML 属性
// 参考 Python 代码:topo_variables 用于 fillMissingFields
TopoVariables struct {
SetFields []string `json:"set_fields"` // Set 字段列表
ModuleFields []string `json:"module_fields"` // Module 字段列表
HostFields []string `json:"host_fields"` // Host 字段列表
} `json:"topo_variables"`
}
BizGlobalVariables 业务全局变量结构 参考 Python 代码中的 biz_global_variables
type BuildInstancesParams ¶
type BuildInstancesParams struct {
BizID uint32
HostID uint32
ModuleID uint32
CcProcessID uint32
ProcNum int
ExistCount int
MaxModuleInstSeq int
MaxHostInstSeq int
Alias string
}
BuildInstancesParams buildInstances 函数的参数
type BuildProcessChangesParams ¶
BuildProcessChangesParams BuildProcessChanges 函数的参数
type BuildProcessChangesResult ¶
type BuildProcessChangesResult struct {
ToAddProcess *table.Process
ToUpdateProcess *table.Process
ToDeleteProcessID uint32
ToAddInstances []*table.ProcessInstance
ToDeleteInstanceIDs []uint32
// 需要重新编排的模块 (moduleID, alias)
ModuleToReorder *ModuleAliasKey
}
BuildProcessChangesResult 包含 BuildProcessChanges 的返回结果
func BuildProcessChanges ¶
func BuildProcessChanges(ctx *SyncContext, params *BuildProcessChangesParams) (*BuildProcessChangesResult, error)
BuildProcessChanges 根据 CMDB 新旧进程数据,计算进程及其实例的变更结果: - 是否需要新增进程 - 是否需要更新进程 - 是否需要删除旧进程 - 是否需要新增/删除/更新进程实例
nolint: funlen
type CCTopoXMLService ¶
type CCTopoXMLService struct {
// contains filtered or unexported fields
}
CCTopoXMLService 用于获取和构建 CC 拓扑 XML 的服务 参考 Python 代码中的 CMDBHandler.cache_topo_tree_attr 方法
func NewCCTopoXMLService ¶
func NewCCTopoXMLService(bizID int, svc bkcmdb.Service) *CCTopoXMLService
NewCCTopoXMLService 创建 CC 拓扑 XML 服务
func (*CCTopoXMLService) GetBizGlobalVariables ¶
func (s *CCTopoXMLService) GetBizGlobalVariables(ctx context.Context) (*BizGlobalVariables, error)
GetBizGlobalVariables 获取业务全局变量 参考 Python 代码中的 biz_global_variables 获取逻辑 返回包含 topo_variables 等全局变量的结构
func (*CCTopoXMLService) GetBizGlobalVariablesMap ¶
func (s *CCTopoXMLService) GetBizGlobalVariablesMap(ctx context.Context) (map[string]interface{}, error)
GetBizGlobalVariablesMap 获取业务全局变量(Map 格式,用于模板渲染) 返回 map[string]interface{} 格式,可以直接用于模板渲染上下文 参考 Python 代码:biz_global_variables 在模板渲染时会被合并到 context 中 Python 代码逻辑:
- biz_global_variables 的结构:{ "set": [...], "module": [...], "host": [...] }
- 每个对象类型对应一个变量列表,每个变量包含 bk_property_id
- 在模板渲染时,会从 this.cc_set.attrib、this.cc_module.attrib、this.cc_host.attrib 中提取属性值
- 补充内置字段:for bk_obj_id, bk_obj_variables in biz_global_variables.items(): for variable in bk_obj_variables: bk_property_id = variable["bk_property_id"] context[bk_property_id] = getattr(this_context, f"cc_{bk_obj_id}").attrib.get(bk_property_id)
注意:此方法复用 GetBizObjectAttributes 来获取属性信息,确保数据一致性
func (*CCTopoXMLService) GetBizObjectAttributes ¶
func (s *CCTopoXMLService) GetBizObjectAttributes(ctx context.Context) (map[string][]ObjectAttribute, error)
GetBizObjectAttributes 获取业务对象属性(完全对应 Python 的 biz_global_variables 方法) 返回 Set、Module、Host、Global 对象的属性列表 完全按照 Python 代码逻辑实现,包括: 1. 获取所有对象属性 2. 添加旧系统字段(append_legacy_global_variables) 3. 筛选业务自定义属性或系统常用属性 4. 按属性名称排序 5. 按对象ID分组
func (*CCTopoXMLService) GetTopoTreeXML ¶
GetTopoTreeXML 获取业务拓扑树的 XML 格式数据 参考 Python 代码中的 CMDBHandler.cache_topo_tree_attr(bk_set_env) 方法 参数 setEnv: 环境类型过滤(1-测试, 2-体验, 3-正式),如果为空则不过滤 返回包含所有 Set、Module、Host 及其属性的完整 XML 字符串 结构:Application -> Set -> Module -> Host
type Host ¶
type Host struct {
ID int
IP string
IPV6 string // 内网 IPv6,同步自 CC bk_host_innerip_v6
CloudId int
AgentID string
}
Host 主机
type HostProcessKey ¶
HostProcessKey 用于 HostCounter 的 key,表示 (ccProcessID, hostID) 组合
type HostXML ¶
type HostXML struct {
XMLName xml.Name `xml:"Host"`
// 所有属性通过 Attrs 动态添加(包括 InnerIP, CloudID, HostID, HostName 等,通过 buildAttrsFromStruct 统一处理)
Attrs []xml.Attr `xml:",any,attr"` // 动态属性
}
HostXML 主机节点(包含所有属性) 注意:所有属性都通过 Attrs 动态添加,与 Python 代码统一处理方式一致
type InstanceReconcileResult ¶
type InstanceReconcileResult struct {
ToAdd []*table.ProcessInstance
ToDelete []uint32
}
InstanceReconcileResult 扩缩容实例
type ModuleAliasKey ¶
ModuleAliasKey 用于 moduleCounter 的 key,表示 (moduleID, alias) 组合
type ModuleXML ¶
type ModuleXML struct {
XMLName xml.Name `xml:"Module"`
// 所有属性通过 Attrs 动态添加(包括 ModuleName, ModuleID 等,通过 buildAttrsFromStruct 统一处理)
Attrs []xml.Attr `xml:",any,attr"` // 动态属性
Hosts []HostXML `xml:"Host"`
}
ModuleXML 模块节点(包含所有属性) 注意:所有属性都通过 Attrs 动态添加,与 Python 代码统一处理方式一致
type ObjectAttribute ¶
type ObjectAttribute struct {
BkPropertyID string `json:"bk_property_id"` // 属性ID
BkPropertyName string `json:"bk_property_name"` // 属性名称
BkPropertyGroupName string `json:"bk_property_group_name"` // 属性分组名称(可选)
BkPropertyType string `json:"bk_property_type"` // 属性类型(可选)
BkObjID string `json:"bk_obj_id"` // 对象ID(set/module/host/global)
BkBizID int `json:"bk_biz_id,omitempty"` // 业务ID(可选,内置变量为0)
}
ObjectAttribute 对象属性信息(完全对应 Python 代码中的属性结构)
type ProcInst ¶
type ProcInst struct {
ID int
HostID int
ProcessTemplateID int
Name string
FuncName string
ProcNum int
table.ProcessInfo
}
ProcInst 进程实例
type ProcessDiff ¶
type ProcessDiff struct {
// 进程级
ToAddProcesses []*table.Process
ToUpdateProcesses []*table.Process
ToDeleteProcessIDs []uint32
// 实例级
ToAddInstances []*table.ProcessInstance
ToDeleteInstanceIDs []uint32
// 需要重新编排 ModuleInstSeq 的模块 (moduleID, alias) 集合
ModulesToReorder map[ModuleAliasKey]struct{}
// side effect
NeedSyncGSE bool
}
ProcessDiff 进程差异对比
type ProcessWithInstances ¶
type ProcessWithInstances struct {
Process *table.Process
Instances []*table.ProcessInstance
}
ProcessSyncItem 一次同步中单个进程的结果
type ReconcileInstancesParams ¶
type ReconcileInstancesParams struct {
BizID uint32
ProcessID uint32
HostID uint32
ModuleID uint32
CcProcessID uint32
Alias string
OldNum int
NewNum int
}
ReconcileInstancesParams reconcileProcessInstances 函数的参数
type ReorderParams ¶
ReorderParams reorderModuleInstSeq 函数的参数
type SetXML ¶
type SetXML struct {
XMLName xml.Name `xml:"Set"`
// 所有属性通过 Attrs 动态添加(包括 SetName, SetID 等,通过 buildAttrsFromStruct 统一处理)
Attrs []xml.Attr `xml:",any,attr"` // 动态属性
Modules []ModuleXML `xml:"Module"`
}
SetXML 集群节点(包含所有属性) 参考 Python 代码,确保属性名与 Python 输出一致 注意:所有属性都通过 Attrs 动态添加,与 Python 代码统一处理方式一致
type SyncContext ¶
type SyncContext struct {
Kit *kit.Kit
Dao dao.Set
Tx *gen.QueryTx
Now time.Time
HostCounter map[HostProcessKey]int // key: HostProcessKey{ccProcessID, hostID}
ModuleCounter map[ModuleAliasKey]int // key: ModuleAliasKey{moduleID, alias}
}
SyncContext 同步过程中的共享上下文
type SyncProcessResult ¶
type SyncProcessResult struct {
Items []*ProcessWithInstances
}
SyncProcessResult 表示一次进程同步任务的汇总结果
func SyncProcessData ¶
func SyncProcessData(kit *kit.Kit, dao dao.Set, tx *gen.QueryTx, bizID uint32, oldProcesses, newProcesses []*table.Process) (*SyncProcessResult, error)
SyncProcessData 对比并同步进程及进程实例数据
同步策略:
- 基于 oldProcesses / newProcesses 做差异计算
- 先删除实例(缩容)
- 再删除进程(包含兜底删除 stopped / unmanaged 实例)
- 新增进程
- 更新进程
- 回填 ProcessID 到新增实例
- 新增实例(扩容 / 新进程)
返回值:
- SyncProcessResult:本次新增/更新的进程及其新增实例
- error:任一阶段失败则直接返回
nolint:funlen