Skip to content

Commit

Permalink
Merge pull request #2 from ZQHcode/feature-agent-id
Browse files Browse the repository at this point in the history
解决hostserver导入主机冲突
  • Loading branch information
wcy00000000000000 committed Apr 27, 2023
2 parents 1c03f48 + 9b465b1 commit 791e4b2
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 78 deletions.
120 changes: 47 additions & 73 deletions src/scene_server/host_server/logics/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ func (lgc *Logics) AddHost(kit *rest.Kit, appID int64, moduleIDs []int64, ownerI
return hostIDs, successMsg, updateErrMsg, errMsg, nil
}

<<<<<<< HEAD
// getIpField get ipv4 and ipv6 address, ipv4 and ipv6 address cannot be null at the same time.
func getIpField(host map[string]interface{}) (string, string, string) {

Expand All @@ -201,10 +200,6 @@ func getIpField(host map[string]interface{}) (string, string, string) {
return "", innerIP, innerIPv6
}

// AddHostByExcel add host by import excel
func (lgc *Logics) AddHostByExcel(kit *rest.Kit, appID int64, moduleID int64,
hostInfos map[int64]map[string]interface{}) ([]string, []string, error) {
=======
// UpdateHostByExcel update host by excel
// NOCC:golint/fnsize(后续重构,和实例合在一起)
func (lgc *Logics) UpdateHostByExcel(kit *rest.Kit, hosts map[int64]map[string]interface{}, hostIDArr []int64,
Expand Down Expand Up @@ -310,18 +305,14 @@ func (lgc *Logics) UpdateHostByExcel(kit *rest.Kit, hosts map[int64]map[string]i
// NOCC:golint/fnsize(后续重构,和实例的合成一个函数)
func (lgc *Logics) AddHostByExcel(kit *rest.Kit, appID int64, moduleID int64, ownerID string,
hostInfos map[int64]map[string]interface{}) (hostIDs []int64, successMsg, errMsg []string, err error) {
>>>>>>> 8bb5f55387ca1dbc3ee904bb706a9d9f7ae68e56

_, toInternalModule, err := lgc.GetModuleIDAndIsInternal(kit, appID, moduleID)
if err != nil {
blog.Errorf("get module id and is internal failed, appID: %d, moduleID: %d, err: %v, rid: %s", appID,
moduleID, err, kit.Rid)
return nil, nil, err
blog.Errorf("AddHostByExcel failed, GetModuleIDAndIsInternal err:%s, appID:%d, moduleID:%d", err, appID,
moduleID)
return nil, nil, nil, err
}

<<<<<<< HEAD
instance := NewImportInstance(kit, kit.SupplierAccount, lgc)
=======
instance := NewImportInstance(kit, ownerID, lgc)

relRes, err := lgc.getHostRelationDestMsg(kit)
Expand All @@ -332,69 +323,61 @@ func (lgc *Logics) AddHostByExcel(kit *rest.Kit, appID int64, moduleID int64, ow

// for audit log
audit := auditlog.NewHostAudit(lgc.CoreAPI.CoreService())
>>>>>>> 8bb5f55387ca1dbc3ee904bb706a9d9f7ae68e56
ccLang := lgc.Engine.Language.CreateDefaultCCLanguageIf(util.GetLanguage(kit.Header))
errMsg := make([]string, 0)
successMsg := make([]string, 0)
hostInfoList := make([]mapstr.MapStr, 0)
txnErr := lgc.Engine.CoreAPI.CoreService().Txn().AutoRunTxn(kit.Ctx, kit.Header, func() error {
for _, index := range util.SortedMapInt64Keys(hostInfos) {
host := hostInfos[index]
if host == nil {
continue
}

errStr, innerIP, innerIPv6 := getIpField(host)
if errStr != "" {
errMsg = append(errMsg, ccLang.Languagef(errStr, index))
continue
}
// the bk_cloud_id is directly connected area
if _, exist := host[common.BKCloudIDField]; !exist {
errMsg = append(errMsg, ccLang.Languagef("import_host_not_provide_cloudID", index))
continue
}
for _, index := range util.SortedMapInt64Keys(hostInfos) {
host := hostInfos[index]
if host == nil {
continue
}

cloudID, err := util.GetInt64ByInterface(host[common.BKCloudIDField])
if err != nil {
errMsg = append(errMsg, ccLang.Languagef("import_host_cloudID_not_exist", index,
innerIP, innerIPv6, util.GetStrByInterface(host[common.BKCloudIDField])))
continue
}
errStr, innerIP, innerIPv6 := getIpField(host)
if errStr != "" {
errMsg = append(errMsg, ccLang.Languagef(errStr, index))
continue
}

// remove unchangeable fields
delete(host, common.BKHostIDField)
// the bk_cloud_id is directly connected area
if _, exist := host[common.BKCloudIDField]; !exist {
errMsg = append(errMsg, ccLang.Languagef("import_host_not_provide_cloudID", index))
continue
}

cloudID, err := util.GetInt64ByInterface(host[common.BKCloudIDField])
if err != nil {
errMsg = append(errMsg, ccLang.Languagef("import_host_cloudID_not_exist", index,
innerIP+"/"+innerIPv6, util.GetStrByInterface(host[common.BKCloudIDField])))
continue
}

// remove unchangeable fields
delete(host, common.BKHostIDField)

<<<<<<< HEAD
// use new transaction, need a new header
kit.Header = kit.NewHeader()
=======
_ = lgc.Engine.CoreAPI.CoreService().Txn().AutoRunTxn(kit.Ctx, kit.Header, func() error {
tableData, err := metadata.GetTableData(host, relRes)
if err != nil {
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP, err.Error()))
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP+"/"+innerIPv6,
err.Error()))
return err
}

>>>>>>> 8bb5f55387ca1dbc3ee904bb706a9d9f7ae68e56
intHostID, err := instance.addHostInstance(cloudID, index, appID, []int64{moduleID}, toInternalModule, host)
if err != nil {
blog.Errorf("add host instance failed, index: %d, bizID: %d, moduleID: %d, toInternalModule: %t, "+
"host: %+v, err: %v, rid: %s", index, appID, moduleID, toInternalModule, host, err, kit.Rid)
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP, innerIPv6,
blog.Errorf("add host instance failed, err: %v, index: %d, bizID: %d, moduleID: %d, "+
"toInternalModule: %t, host: %v, rid: %s", err, index, appID, moduleID, toInternalModule, host,
kit.Rid)
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP+"/"+innerIPv6,
err.Error()))
return err
}
host[common.BKHostIDField] = intHostID
<<<<<<< HEAD
hostInfoList = append(hostInfoList, host)
=======

// add host table field type data
if tableData != nil {
if err := lgc.addTableData(kit, tableData, intHostID); err != nil {
blog.ErrorJSON("add table data failed, data: %s, err: %s, rid: %s", host, err, kit.Rid)
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP, err.Error()))
errMsg = append(errMsg, ccLang.Languagef("host_import_add_fail", index, innerIP+"/"+innerIPv6,
err.Error()))
return err
}
}
Expand All @@ -408,31 +391,22 @@ func (lgc *Logics) AddHostByExcel(kit *rest.Kit, appID int64, moduleID int64, ow
errMsg = append(errMsg, err.Error())
return err
}
>>>>>>> 8bb5f55387ca1dbc3ee904bb706a9d9f7ae68e56

// add current host operate result to batch add result
successMsg = append(successMsg, strconv.FormatInt(index, 10))
}

// to generate audit log.
audit := auditlog.NewHostAudit(lgc.CoreAPI.CoreService())
generateAuditParameter := auditlog.NewGenerateAuditCommonParameter(kit, metadata.AuditCreate)
auditLog, err := audit.GenerateAuditLog(generateAuditParameter, appID, hostInfoList)
if err != nil {
blog.Errorf("generate host audit log failed, bizID: %d, err: %v, rid: %s", appID, err, kit.Rid)
return err
}

// add audit log
if err := audit.SaveAuditLog(kit, auditLog...); err != nil {
blog.Errorf("save host add audit log failed, err: %v, rid: %s", err, kit.Rid)
return err
}

return nil
})
// add audit log
if err := audit.SaveAuditLog(kit, auditLog...); err != nil {
blog.Errorf("save audit log failed, err: %v, rid: %s", err, kit.Rid)
errMsg = append(errMsg, kit.CCError.Error(common.CCErrAuditSaveLogFailed).Error())
return err
}
hostIDs = append(hostIDs, intHostID)
return nil
})
}

return successMsg, errMsg, txnErr
return hostIDs, successMsg, errMsg, nil
}

// getHostRelationDestMsg get host relation, it can only get bk_property_id and dest_model field
Expand Down
12 changes: 7 additions & 5 deletions src/scene_server/host_server/service/host.go
Original file line number Diff line number Diff line change
Expand Up @@ -398,12 +398,14 @@ func (s *Service) AddHostByExcel(ctx *rest.Contexts) {
}

retData := make(map[string]interface{})
success, errRow, err := s.Logic.AddHostByExcel(ctx.Kit, appID, moduleID, hostList.HostInfo)
_, success, errRow, err := s.Logic.AddHostByExcel(ctx.Kit, appID, moduleID, ctx.Kit.SupplierAccount,
hostList.HostInfo)
retData["success"] = success
retData["error"] = errRow
if err != nil {
blog.Errorf("add host by excel failed, err: %v, rid: %s", err, ctx.Kit.Rid)
retData["success"] = success
retData["error"] = errRow
ctx.RespEntityWithError(retData, err)
blog.Errorf("add host failed, success: %v, errRow: %v, err: %v, hostList: %#v, rid: %s", success, errRow, err,
hostList, ctx.Kit.Rid)
ctx.RespEntityWithError(retData, ctx.Kit.CCError.CCError(common.CCErrHostCreateFail))
return
}

Expand Down

0 comments on commit 791e4b2

Please sign in to comment.