From d64f7fde42cd99dddffda55ab70d464e4ad95c42 Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Wed, 18 Mar 2026 10:10:13 +0800 Subject: [PATCH] fix(baremetal-agent): bm register reuse baseprepare updateBmInfo (#24472) --- pkg/baremetal/tasks/baseprepare.go | 68 +++++++++++++++--------------- pkg/baremetal/tasks/bm_register.go | 35 +++------------ 2 files changed, 42 insertions(+), 61 deletions(-) diff --git a/pkg/baremetal/tasks/baseprepare.go b/pkg/baremetal/tasks/baseprepare.go index bf5f511e2d..0fe8abe26c 100644 --- a/pkg/baremetal/tasks/baseprepare.go +++ b/pkg/baremetal/tasks/baseprepare.go @@ -381,28 +381,18 @@ func (task *sBaremetalPrepareTask) findAdminNic(cli *ssh.Client, nicsInfo []*typ return -1, nil, errors.Error("admin nic not found???") } -func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo) error { - adminNic := task.baremetal.GetAdminNic() - if adminNic == nil || (adminNic != nil && !adminNic.LinkUp) { - adminIdx, adminNicDev, err := task.findAdminNic(cli, i.nicsInfo) - if err != nil { - return errors.Wrap(err, "task.findAdminNic") - } - accessIp := cli.GetConfig().Host - err = task.sendNicInfo(ctx, adminNicDev, adminIdx, api.NIC_TYPE_ADMIN, false, accessIp, true) - if err != nil { - return errors.Wrap(err, "send Admin Nic Info") - } - adminNic = task.baremetal.GetNicByMac(adminNicDev.Mac) - } - // collect params +func (task *sBaremetalPrepareTask) doUpdateBmInfo( + ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo, + bmName, accessIp, accessMac string, +) error { updateInfo := make(map[string]interface{}) - oname := fmt.Sprintf("BM%s", strings.Replace(adminNic.Mac, ":", "", -1)) - if task.baremetal.GetName() == oname { - updateInfo["name"] = fmt.Sprintf("BM-%s", strings.Replace(i.ipmiInfo.IpAddr, ".", "-", -1)) + if bmName != "" { + updateInfo["name"] = bmName + } + updateInfo["access_ip"] = accessIp + if accessMac != "" { + updateInfo["access_mac"] = accessMac } - updateInfo["access_ip"] = adminNic.IpAddr - updateInfo["access_mac"] = adminNic.Mac updateInfo["cpu_architecture"] = i.architecture updateInfo["cpu_count"] = i.cpuInfo.Count updateInfo["node_count"] = i.dmiCpuInfo.Nodes @@ -436,19 +426,6 @@ func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Cl return errors.Wrap(err, "send isolated devices info") } } - // XXX do not change nic order anymore - // for i := range nicsInfo { - // if nicsInfo[i].Mac.String() == adminNic.GetMac().String() { - // if i != 0 { - // nicsInfo = append(nicsInfo[i:], nicsInfo[0:i]...) - // } - // break - // } - // } - // err = task.removeAllNics() - // if err != nil { - // return err - // } removedMacs := task.removeObsoleteNics(i) for idx := range removedMacs { err = task.removeNicInfo(ctx, removedMacs[idx]) @@ -464,6 +441,31 @@ func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Cl return errors.Wrap(err, "task.sendNicInfo") } } + return nil +} + +func (task *sBaremetalPrepareTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo) error { + adminNic := task.baremetal.GetAdminNic() + if adminNic == nil || (adminNic != nil && !adminNic.LinkUp) { + adminIdx, adminNicDev, err := task.findAdminNic(cli, i.nicsInfo) + if err != nil { + return errors.Wrap(err, "task.findAdminNic") + } + accessIp := cli.GetConfig().Host + err = task.sendNicInfo(ctx, adminNicDev, adminIdx, api.NIC_TYPE_ADMIN, false, accessIp, true) + if err != nil { + return errors.Wrap(err, "send Admin Nic Info") + } + adminNic = task.baremetal.GetNicByMac(adminNicDev.Mac) + } + oname := fmt.Sprintf("BM%s", strings.Replace(adminNic.Mac, ":", "", -1)) + if task.baremetal.GetName() != oname { + oname = "" + } + err := task.doUpdateBmInfo(ctx, cli, i, oname, adminNic.IpAddr, adminNic.Mac) + if err != nil { + return err + } if o.Options.EnablePxeBoot && task.baremetal.EnablePxeBoot() { for _, nicInfo := range i.nicsInfo { if nicInfo.Mac.String() != adminNic.GetMac().String() && nicInfo.Up != nil && *nicInfo.Up { diff --git a/pkg/baremetal/tasks/bm_register.go b/pkg/baremetal/tasks/bm_register.go index 9b9c1c2712..aa4ecdc413 100644 --- a/pkg/baremetal/tasks/bm_register.go +++ b/pkg/baremetal/tasks/bm_register.go @@ -287,36 +287,15 @@ func (s *sBaremetalRegisterTask) updateIpmiInfo(ctx context.Context, cli *ssh.Cl } func (s *sBaremetalRegisterTask) updateBmInfo(ctx context.Context, cli *ssh.Client, i *baremetalPrepareInfo, registered bool) error { - updateInfo := make(map[string]interface{}) - updateInfo["access_ip"] = s.RemoteIp - updateInfo["cpu_count"] = i.cpuInfo.Count - updateInfo["node_count"] = i.dmiCpuInfo.Nodes - updateInfo["cpu_desc"] = i.cpuInfo.Model - updateInfo["cpu_mhz"] = i.cpuInfo.Freq - updateInfo["cpu_cache"] = i.cpuInfo.Cache - updateInfo["mem_size"] = i.memInfo.Total - updateInfo["storage_driver"] = i.storageDriver - updateInfo["storage_info"] = i.diskInfo - updateInfo["sys_info"] = i.sysInfo - updateInfo["sn"] = i.sysInfo.SN - size, diskType := s.collectDiskInfo(i.diskInfo) - updateInfo["storage_size"] = size - updateInfo["storage_type"] = diskType - updateData := jsonutils.Marshal(updateInfo) - updateData.(*jsonutils.JSONDict).Update(i.ipmiInfo.ToPrepareParams()) - _, err := modules.Hosts.Update(s.getClientSession(), s.baremetal.GetId(), updateData) + accessMac := "" + if s.accessNic != nil { + accessMac = s.accessNic.Mac.String() + } + err := s.doUpdateBmInfo(ctx, cli, i, "", s.RemoteIp, accessMac) if err != nil { - log.Errorf("Update baremetal info error: %v", err) - } - if err := s.sendStorageInfo(size); err != nil { - log.Errorf("sendStorageInfo error: %v", err) - } - for idx := range i.nicsInfo { - err = s.sendNicInfo(ctx, i.nicsInfo[idx], idx, "", false, "", false) - if err != nil { - log.Errorf("Send nicinfo idx: %d, %#v error: %v", idx, i.nicsInfo[idx], err) - } + log.Errorf("failed do update bminfo %s", err) } + if registered { return nil }