From ab0d45a24f555103a281e00ccfe0324bb4e6e8d0 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Mon, 25 Mar 2019 16:02:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20baremetal=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=9A=84=E4=B8=80=E7=B3=BB=E5=88=97=E9=97=AE=E9=A2=98?= =?UTF-8?q?:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. dhcp 并发请求冲突 2. 调度 storage 不适配 3. 获取 login info 字段不正确 --- pkg/apis/compute/api.go | 8 + pkg/baremetal/agent.go | 7 +- pkg/baremetal/manager.go | 7 +- pkg/baremetal/pxe/dhcp.go | 146 +++++++++--------- pkg/baremetal/pxe/pxe.go | 8 +- pkg/baremetal/pxe/tftp.go | 1 + pkg/compute/guestdrivers/baremetals.go | 4 +- pkg/compute/models/hosts.go | 2 + .../predicates/baremetal/storage_predicate.go | 2 +- pkg/scheduler/algorithmprovider/baremetal.go | 1 + pkg/scheduler/cache/candidate/baremetals.go | 6 +- pkg/scheduler/cache/candidate/base.go | 11 +- pkg/scheduler/cache/candidate/hosts.go | 10 -- 13 files changed, 111 insertions(+), 102 deletions(-) diff --git a/pkg/apis/compute/api.go b/pkg/apis/compute/api.go index 18259c0f2f..2b085d705a 100644 --- a/pkg/apis/compute/api.go +++ b/pkg/apis/compute/api.go @@ -176,3 +176,11 @@ type ServerDeployInput struct { Password string `json:"password"` AutoStart *bool `json:"auto_start"` } + +type HostLoginInfo struct { + apis.Meta + + Username string `json:"username"` + Password string `json:"password"` + Ip string `json:"ip"` +} diff --git a/pkg/baremetal/agent.go b/pkg/baremetal/agent.go index 0042a2fe1a..ca30d8bcd3 100644 --- a/pkg/baremetal/agent.go +++ b/pkg/baremetal/agent.go @@ -134,18 +134,13 @@ func (agent *SBaremetalAgent) disableUDPOffloading() { } func (agent *SBaremetalAgent) startPXEServices(manager *SBaremetalManager) { - pxeListenIP, err := agent.GetListenIP() - if err != nil { - log.Fatalf("Get pxe listen ip address error: %v", err) - } dhcpListenIp, err := agent.GetDHCPServerListenIP() if err != nil { log.Fatalf("Get dhcp listen ip address error: %v", err) } agent.PXEServer = &pxe.Server{ TFTPRootDir: o.Options.TftpRoot, - Address: pxeListenIP.String(), - DHCPAddress: dhcpListenIp.String(), + Address: dhcpListenIp.String(), BaremetalManager: manager, } go func() { diff --git a/pkg/baremetal/manager.go b/pkg/baremetal/manager.go index 2ff179993f..fbb2806e2a 100644 --- a/pkg/baremetal/manager.go +++ b/pkg/baremetal/manager.go @@ -443,7 +443,12 @@ func (b *SBaremetalInstance) SyncSSHConfig(conf types.SSHConfig) error { if err != nil { return err } - data := jsonutils.Marshal(conf) + info := &api.HostLoginInfo{ + Username: conf.Username, + Password: conf.Password, + Ip: conf.RemoteIP, + } + data := info.JSON(info) _, err = modules.Hosts.SetMetadata(session, b.GetId(), data) return err } diff --git a/pkg/baremetal/pxe/dhcp.go b/pkg/baremetal/pxe/dhcp.go index 858de5359a..66c0be783d 100644 --- a/pkg/baremetal/pxe/dhcp.go +++ b/pkg/baremetal/pxe/dhcp.go @@ -12,6 +12,7 @@ import ( api "yunion.io/x/onecloud/pkg/apis/compute" o "yunion.io/x/onecloud/pkg/baremetal/options" "yunion.io/x/onecloud/pkg/cloudcommon/types" + "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/modules" "yunion.io/x/onecloud/pkg/util/dhcp" ) @@ -27,6 +28,12 @@ type NetworkInterfaceIdent struct { } type DHCPHandler struct { + // baremetal manager + baremetalManager IBaremetalManager +} + +type dhcpRequest struct { + packet dhcp.Packet ClientMac net.HardwareAddr // client nic mac ClientAddr net.IP // IP address from DHCP client RelayAddr net.IP // IP address of DHCP relay agent @@ -35,7 +42,6 @@ type DHCPHandler struct { ClientArch uint16 NetworkInterfaceIdent NetworkInterfaceIdent ClientGuid string - packet dhcp.Packet // baremetal manager baremetalManager IBaremetalManager @@ -46,17 +52,17 @@ type DHCPHandler struct { } func (h *DHCPHandler) ServeDHCP(pkt dhcp.Packet, _ *net.UDPAddr, _ *net.Interface) (dhcp.Packet, error) { - //log.V(4).Debugf("[DHCP] request: %s", pkt.DebugString()) - err := h.parsePacket(pkt) + req, err := h.newRequest(pkt, h.baremetalManager) if err != nil { - log.Errorf("[DHCP] parse packet error: %v", err) + log.Errorf("[DHCP] new request by packet error: %v", err) + return nil, err } - log.V(4).Debugf("[DHCP] parse packet end: %#v", h) + log.V(4).Debugf("[DHCP] request packet: %#v", req) - if h.RelayAddr.String() == "0.0.0.0" { - return nil, fmt.Errorf("Request not from a DHCP relay, ignore mac: %s", h.ClientMac) + if req.RelayAddr.String() == "0.0.0.0" { + return nil, fmt.Errorf("Request not from a DHCP relay, ignore mac: %s", req.ClientMac) } - conf, err := h.fetchConfig() + conf, err := req.fetchConfig(h.baremetalManager.GetClientSession()) if err != nil { return nil, err } @@ -66,12 +72,15 @@ func (h *DHCPHandler) ServeDHCP(pkt dhcp.Packet, _ *net.UDPAddr, _ *net.Interfac return dhcp.MakeReplyPacket(pkt, conf) } -func (h *DHCPHandler) parsePacket(pkt dhcp.Packet) error { - h.packet = pkt - h.ClientAddr = pkt.CIAddr() - h.ClientMac = pkt.CHAddr() - h.RelayAddr = pkt.RelayAddr() - h.Options = pkt.ParseOptions() +func (h *DHCPHandler) newRequest(pkt dhcp.Packet, man IBaremetalManager) (*dhcpRequest, error) { + req := &dhcpRequest{ + baremetalManager: man, + packet: pkt, + ClientAddr: pkt.CIAddr(), + ClientMac: pkt.CHAddr(), + RelayAddr: pkt.RelayAddr(), + Options: pkt.ParseOptions(), + } var ( vendorClsId string @@ -81,14 +90,14 @@ func (h *DHCPHandler) parsePacket(pkt dhcp.Packet) error { cliGuid string ) - for optCode, data := range h.Options { + for optCode, data := range req.Options { switch optCode { case dhcp.OptionVendorClassIdentifier: - vendorClsId, err = h.Options.String(optCode) + vendorClsId, err = req.Options.String(optCode) case dhcp.OptionClientArchitecture: - cliArch, err = h.Options.Uint16(optCode) + cliArch, err = req.Options.Uint16(optCode) case dhcp.OptionClientNetworkInterfaceIdentifier: - netIfIdentBs, err := h.Options.Bytes(optCode) + netIfIdentBs, err := req.Options.Bytes(optCode) if err != nil { break } @@ -111,49 +120,48 @@ func (h *DHCPHandler) parsePacket(pkt dhcp.Packet) error { default: err = errors.New("malformed client GUID (option 97), wrong size") } - cliGuid, err = h.Options.String(optCode) + cliGuid, err = req.Options.String(optCode) } if err != nil { log.Errorf("[DHCP] parse vendor option %d error: %v", optCode, err) } } - h.VendorClassId = vendorClsId - h.ClientArch = cliArch - h.NetworkInterfaceIdent = netIfIdent - h.ClientGuid = cliGuid - return err + req.VendorClassId = vendorClsId + req.ClientArch = cliArch + req.NetworkInterfaceIdent = netIfIdent + req.ClientGuid = cliGuid + return req, err } -func (h *DHCPHandler) fetchConfig() (*dhcp.ResponseConfig, error) { +func (req *dhcpRequest) fetchConfig(session *mcclient.ClientSession) (*dhcp.ResponseConfig, error) { // 1. find_network_conf - netConf, err := h.findNetworkConf(false) + netConf, err := req.findNetworkConf(session, false) if err != nil { return nil, err } - h.netConfig = netConf + req.netConfig = netConf // TODO: set cache for netConf - // - if h.isPXERequest() { + if req.isPXERequest() { // handle PXE DHCP request - log.Infof("DHCP relay from %s(%s) for %s, find matched networks: %#v", h.RelayAddr, h.ClientAddr, h.ClientMac, netConf) - bmDesc, err := h.createOrUpdateBaremetal() + log.Infof("DHCP relay from %s(%s) for %s, find matched networks: %#v", req.RelayAddr, req.ClientAddr, req.ClientMac, netConf) + bmDesc, err := req.createOrUpdateBaremetal(session) if err != nil { return nil, err } - err = h.doInitBaremetalAdminNetif(bmDesc) + err = req.doInitBaremetalAdminNetif(bmDesc) if err != nil { return nil, err } - if h.baremetalInstance.NeedPXEBoot() { - return h.baremetalInstance.GetPXEDHCPConfig(h.ClientArch) + if req.baremetalInstance.NeedPXEBoot() { + return req.baremetalInstance.GetPXEDHCPConfig(req.ClientArch) } // ignore - log.Warningf("No need to pxeboot, ignore the request ...(mac:%s guid:%s)", h.ClientMac, h.ClientGuid) + log.Warningf("No need to pxeboot, ignore the request ...(mac:%s guid:%s)", req.ClientMac, req.ClientGuid) return nil, nil } else { // handle normal DHCP request - bmInstance := h.baremetalManager.GetBaremetalByMac(h.ClientMac) + bmInstance := req.baremetalManager.GetBaremetalByMac(req.ClientMac) if bmInstance == nil { // options.EnableGeneralGuestDhcp // cloud be an instance not served by a host-server @@ -162,39 +170,38 @@ func (h *DHCPHandler) fetchConfig() (*dhcp.ResponseConfig, error) { // task.start() return nil, nil } - h.baremetalInstance = bmInstance - ipmiNic := h.baremetalInstance.GetIPMINic(h.ClientMac) - if ipmiNic != nil && ipmiNic.Mac == h.ClientMac.String() { - err = h.baremetalInstance.InitAdminNetif(h.ClientMac, h.netConfig, types.NIC_TYPE_IPMI, api.NETWORK_TYPE_IPMI) + req.baremetalInstance = bmInstance + ipmiNic := req.baremetalInstance.GetIPMINic(req.ClientMac) + if ipmiNic != nil && ipmiNic.Mac == req.ClientMac.String() { + err = req.baremetalInstance.InitAdminNetif(req.ClientMac, req.netConfig, types.NIC_TYPE_IPMI, api.NETWORK_TYPE_IPMI) if err != nil { return nil, err } } else { - err = h.baremetalInstance.RegisterNetif(h.ClientMac, h.netConfig) + err = req.baremetalInstance.RegisterNetif(req.ClientMac, req.netConfig) if err != nil { log.Errorf("RegisterNetif error: %v", err) return nil, err } } - return h.baremetalInstance.GetDHCPConfig(h.ClientMac) + return req.baremetalInstance.GetDHCPConfig(req.ClientMac) } } -func (h *DHCPHandler) findNetworkConf(filterUseIp bool) (*types.SNetworkConfig, error) { +func (req *dhcpRequest) findNetworkConf(session *mcclient.ClientSession, filterUseIp bool) (*types.SNetworkConfig, error) { params := jsonutils.NewDict() if filterUseIp { - params.Add(jsonutils.NewString(h.RelayAddr.String()), "ip") + params.Add(jsonutils.NewString(req.RelayAddr.String()), "ip") } else { params.Add(jsonutils.NewString( - fmt.Sprintf("guest_gateway.equals(%s)", h.RelayAddr)), + fmt.Sprintf("guest_gateway.equals(%s)", req.RelayAddr)), "filter.0") params.Add(jsonutils.NewString( - fmt.Sprintf("guest_dhcp.equals(%s)", h.RelayAddr)), + fmt.Sprintf("guest_dhcp.equals(%s)", req.RelayAddr)), "filter.1") params.Add(jsonutils.JSONTrue, "filter_any") } params.Add(jsonutils.JSONTrue, "is_on_premise") - session := h.baremetalManager.GetClientSession() ret, err := modules.Networks.List(session, params) if err != nil { return nil, err @@ -202,9 +209,9 @@ func (h *DHCPHandler) findNetworkConf(filterUseIp bool) (*types.SNetworkConfig, if len(ret.Data) == 0 { if !filterUseIp { // use ip filter try again - return h.findNetworkConf(true) + return req.findNetworkConf(session, true) } - return nil, fmt.Errorf("DHCP relay from %s(%s) for %s, find no match network", h.RelayAddr, h.ClientAddr, h.ClientMac) + return nil, fmt.Errorf("DHCP relay from %s(%s) for %s, find no match network", req.RelayAddr, req.ClientAddr, req.ClientMac) } network := types.SNetworkConfig{} @@ -212,11 +219,10 @@ func (h *DHCPHandler) findNetworkConf(filterUseIp bool) (*types.SNetworkConfig, return &network, err } -func (h *DHCPHandler) findBaremetalsOfAnyMac(isBaremetal bool) (*modules.ListResult, error) { - session := h.baremetalManager.GetClientSession() +func (req *dhcpRequest) findBaremetalsOfAnyMac(session *mcclient.ClientSession, isBaremetal bool) (*modules.ListResult, error) { params := jsonutils.NewDict() params.Add(jsonutils.NewString(api.HOST_TYPE_BAREMETAL), "host_type") - params.Add(jsonutils.NewString(h.ClientMac.String()), "any_mac") + params.Add(jsonutils.NewString(req.ClientMac.String()), "any_mac") if isBaremetal { params.Add(jsonutils.JSONTrue, "is_baremetal") } else { @@ -226,13 +232,13 @@ func (h *DHCPHandler) findBaremetalsOfAnyMac(isBaremetal bool) (*modules.ListRes } // createOrUpdateBaremetal create or update baremetal by client MAC -func (h *DHCPHandler) createOrUpdateBaremetal() (jsonutils.JSONObject, error) { - ret, err := h.findBaremetalsOfAnyMac(true) +func (req *dhcpRequest) createOrUpdateBaremetal(session *mcclient.ClientSession) (jsonutils.JSONObject, error) { + ret, err := req.findBaremetalsOfAnyMac(session, true) if err != nil { return nil, err } if len(ret.Data) == 0 { - ret, err = h.findBaremetalsOfAnyMac(false) + ret, err = req.findBaremetalsOfAnyMac(session, false) if err != nil { return nil, err } @@ -241,7 +247,7 @@ func (h *DHCPHandler) createOrUpdateBaremetal() (jsonutils.JSONObject, error) { case 0: // found new baremetal, create it if auto register if o.Options.AutoRegisterBaremetal { - return h.createBaremetal() + return req.createBaremetal(session) } case 1: // already exists, do update @@ -249,22 +255,21 @@ func (h *DHCPHandler) createOrUpdateBaremetal() (jsonutils.JSONObject, error) { if err != nil { return nil, err } - return h.updateBaremetal(bmId) + return req.updateBaremetal(session, bmId) } - return nil, fmt.Errorf("Found %d records match %s", len(ret.Data), h.ClientMac) + return nil, fmt.Errorf("Found %d records match %s", len(ret.Data), req.ClientMac) } -func (h *DHCPHandler) createBaremetal() (jsonutils.JSONObject, error) { +func (req *dhcpRequest) createBaremetal(session *mcclient.ClientSession) (jsonutils.JSONObject, error) { params := jsonutils.NewDict() - mac := h.ClientMac.String() - zoneId := h.baremetalManager.GetZoneId() + mac := req.ClientMac.String() + zoneId := req.baremetalManager.GetZoneId() name := fmt.Sprintf("BM%s", strings.Replace(mac, ":", "", -1)) params.Add(jsonutils.NewString(name), "name") params.Add(jsonutils.NewString(mac), "access_mac") params.Add(jsonutils.NewString("baremetal"), "host_type") params.Add(jsonutils.JSONTrue, "is_baremetal") params.Add(jsonutils.NewString(zoneId), "zone_id") - session := h.baremetalManager.GetClientSession() desc, err := modules.Hosts.Create(session, params) if err != nil { return nil, err @@ -272,13 +277,12 @@ func (h *DHCPHandler) createBaremetal() (jsonutils.JSONObject, error) { return desc, nil } -func (h *DHCPHandler) updateBaremetal(id string) (jsonutils.JSONObject, error) { +func (req *dhcpRequest) updateBaremetal(session *mcclient.ClientSession, id string) (jsonutils.JSONObject, error) { params := jsonutils.NewDict() - params.Add(jsonutils.NewString(h.ClientMac.String()), "access_mac") - params.Add(jsonutils.NewString(h.baremetalManager.GetZoneId()), "zone_id") + params.Add(jsonutils.NewString(req.ClientMac.String()), "access_mac") + params.Add(jsonutils.NewString(req.baremetalManager.GetZoneId()), "zone_id") // params.Add(jsonutils.NewString("baremetal"), "host_type") params.Add(jsonutils.JSONTrue, "is_baremetal") - session := h.baremetalManager.GetClientSession() desc, err := modules.Hosts.Update(session, id, params) if err != nil { return nil, err @@ -286,18 +290,18 @@ func (h *DHCPHandler) updateBaremetal(id string) (jsonutils.JSONObject, error) { return desc, nil } -func (h *DHCPHandler) doInitBaremetalAdminNetif(desc jsonutils.JSONObject) error { +func (req *dhcpRequest) doInitBaremetalAdminNetif(desc jsonutils.JSONObject) error { var err error - h.baremetalInstance, err = h.baremetalManager.AddBaremetal(desc) + req.baremetalInstance, err = req.baremetalManager.AddBaremetal(desc) if err != nil { return err } - err = h.baremetalInstance.InitAdminNetif(h.ClientMac, h.netConfig, types.NIC_TYPE_ADMIN, api.NETWORK_TYPE_PXE) + err = req.baremetalInstance.InitAdminNetif(req.ClientMac, req.netConfig, types.NIC_TYPE_ADMIN, api.NETWORK_TYPE_PXE) return err } -func (h *DHCPHandler) isPXERequest() bool { - pkt := h.packet +func (req *dhcpRequest) isPXERequest() bool { + pkt := req.packet return dhcp.IsPXERequest(pkt) } diff --git a/pkg/baremetal/pxe/pxe.go b/pkg/baremetal/pxe/pxe.go index 541d1fa901..8fb1a26529 100644 --- a/pkg/baremetal/pxe/pxe.go +++ b/pkg/baremetal/pxe/pxe.go @@ -87,7 +87,6 @@ type IBaremetalInstance interface { type Server struct { // Address to listen on, or empty for all interfaces Address string - DHCPAddress string DHCPPort int TFTPPort int TFTPRootDir string @@ -99,9 +98,6 @@ func (s *Server) Serve() error { if s.Address == "" { s.Address = "0.0.0.0" } - if s.DHCPAddress == "" { - s.DHCPAddress = "0.0.0.0" - } if s.DHCPPort == 0 { s.DHCPPort = portDHCP } @@ -118,8 +114,8 @@ func (s *Server) Serve() error { return err } - log.Infof("DHCPServer Bind %s %d", s.DHCPAddress, s.DHCPPort) - dhcpSrv, _, err := dhcp.NewDHCPServer2(s.DHCPAddress, s.DHCPPort, false) + log.Infof("DHCPServer Bind %s %d", s.Address, s.DHCPPort) + dhcpSrv, _, err := dhcp.NewDHCPServer2(s.Address, s.DHCPPort, false) if err != nil { return err } diff --git a/pkg/baremetal/pxe/tftp.go b/pkg/baremetal/pxe/tftp.go index 02b637e016..d4051392e1 100644 --- a/pkg/baremetal/pxe/tftp.go +++ b/pkg/baremetal/pxe/tftp.go @@ -112,6 +112,7 @@ func (s *Server) serveTFTP(l net.PacketConn, handler *TFTPHandler) error { if err != nil { return nil, err } + log.Debugf("[TFTP] dial udp localAddr %s, remoteAddr: %s", localIp, remoteAddr.String()) return net.DialUDP("udp", &net.UDPAddr{ IP: localIp, Port: 0, // random free port diff --git a/pkg/compute/guestdrivers/baremetals.go b/pkg/compute/guestdrivers/baremetals.go index 101fb44c68..9c8093a029 100644 --- a/pkg/compute/guestdrivers/baremetals.go +++ b/pkg/compute/guestdrivers/baremetals.go @@ -194,7 +194,9 @@ func (self *SBaremetalGuestDriver) Attach2RandomNetwork(guest *models.SGuest, ct } func (self *SBaremetalGuestDriver) GetStorageTypes() []string { - return nil + return []string{ + models.STORAGE_BAREMETAL, + } } func (self *SBaremetalGuestDriver) ChooseHostStorage(host *models.SHost, backend string) *models.SStorage { diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index d563692d66..4227291aa3 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -689,6 +689,7 @@ func (self *SHost) PerformUpdateStorage( if err != nil { return nil, fmt.Errorf("Create baremetal storage error: %v", err) } + storage.SetModelManager(StorageManager) db.OpsLog.LogEvent(&storage, db.ACT_CREATE, storage.GetShortDesc(ctx), userCred) // 2. create host storage bmStorage := SHoststorage{} @@ -700,6 +701,7 @@ func (self *SHost) PerformUpdateStorage( if err != nil { return nil, fmt.Errorf("Create baremetal hostStorage error: %v", err) } + bmStorage.SetModelManager(HoststorageManager) db.OpsLog.LogAttachEvent(ctx, self, &storage, userCred, bmStorage.GetShortDesc(ctx)) return nil, nil } diff --git a/pkg/scheduler/algorithm/predicates/baremetal/storage_predicate.go b/pkg/scheduler/algorithm/predicates/baremetal/storage_predicate.go index 8e170b6c3b..a8e09d1041 100644 --- a/pkg/scheduler/algorithm/predicates/baremetal/storage_predicate.go +++ b/pkg/scheduler/algorithm/predicates/baremetal/storage_predicate.go @@ -50,7 +50,7 @@ func (p *StoragePredicate) Execute(u *core.Unit, c core.Candidater) (bool, []cor layouts, err := baremetal.CalculateLayout( schedData.BaremetalDiskConfigs, - candidate.Storages, + candidate.StorageInfo, ) if err == nil && baremetal.CheckDisksAllocable(layouts, toBaremetalDisks(schedData.Disks)) { diff --git a/pkg/scheduler/algorithmprovider/baremetal.go b/pkg/scheduler/algorithmprovider/baremetal.go index 3f237855e3..e1bf07b7b0 100644 --- a/pkg/scheduler/algorithmprovider/baremetal.go +++ b/pkg/scheduler/algorithmprovider/baremetal.go @@ -22,5 +22,6 @@ func baremetalPredicates() sets.String { factory.RegisterFitPredicate("e-BaremetalStorageFilter", &predicatebm.StoragePredicate{}), factory.RegisterFitPredicate("f-BaremetalNetFilter", &predicatebm.NetworkPredicate{}), factory.RegisterFitPredicate("g-BaremetalResourceTypeFilter", &predicates.ResourceTypePredicate{}), + factory.RegisterFitPredicate("h-DiskschedtagFilter", &predicates.DiskSchedtagPredicate{}), ) } diff --git a/pkg/scheduler/cache/candidate/baremetals.go b/pkg/scheduler/cache/candidate/baremetals.go index 454f2b362c..eed71a8b5a 100644 --- a/pkg/scheduler/cache/candidate/baremetals.go +++ b/pkg/scheduler/cache/candidate/baremetals.go @@ -21,10 +21,9 @@ import ( type BaremetalDesc struct { *BaseHostDesc - Storages []*baremetal.BaremetalStorage `json:"storages"` + StorageInfo []*baremetal.BaremetalStorage `json:"storage_info"` StorageType string `json:"storage_type"` StorageSize int64 `json:"storage_size"` - StorageInfo string `json:"storage_info"` StorageDriver string `json:"storage_driver"` ServerID string `json:"server_id"` } @@ -231,7 +230,6 @@ func (bb *BaremetalBuilder) buildOne(bm *models.Host) (interface{}, error) { desc.StorageDriver = bm.StorageDriver desc.StorageType = bm.StorageType desc.StorageSize = int64(bm.StorageSize) - desc.StorageInfo = bm.StorageInfo var baremetalStorages []*baremetal.BaremetalStorage err = fjson.Unmarshal([]byte(bm.StorageInfo), &baremetalStorages) @@ -241,7 +239,7 @@ func (bb *BaremetalBuilder) buildOne(bm *models.Host) (interface{}, error) { log.Errorln(err) } } - desc.Storages = baremetalStorages + desc.StorageInfo = baremetalStorages desc.Tenants = make(map[string]int64, 0) err = bb.fillServerID(desc, bm) diff --git a/pkg/scheduler/cache/candidate/base.go b/pkg/scheduler/cache/candidate/base.go index b55a85aa3e..50820e9040 100644 --- a/pkg/scheduler/cache/candidate/base.go +++ b/pkg/scheduler/cache/candidate/base.go @@ -101,6 +101,14 @@ func newBaseHostDesc(host *computemodels.SHost) (*BaseHostDesc, error) { return nil, fmt.Errorf("Fill resident tenants error: %v", err) } + if err := desc.fillStorages(host); err != nil { + return nil, fmt.Errorf("Fill storage error: %v", err) + } + + if err := desc.fillSchedtags(); err != nil { + return nil, fmt.Errorf("Fill schedtag error: %v", err) + } + return desc, nil } @@ -150,8 +158,7 @@ func (b *BaseHostDesc) fillResidentTenants(host *computemodels.SHost) error { return nil } -func (b *BaseHostDesc) fillSchedtags(allSchedtags []computemodels.SSchedtag) error { - //b.Schedtags = allSchedtags +func (b *BaseHostDesc) fillSchedtags() error { b.HostSchedtags = b.SHost.GetSchedtags() return nil } diff --git a/pkg/scheduler/cache/candidate/hosts.go b/pkg/scheduler/cache/candidate/hosts.go index b11cc73692..8bb337f563 100644 --- a/pkg/scheduler/cache/candidate/hosts.go +++ b/pkg/scheduler/cache/candidate/hosts.go @@ -980,8 +980,6 @@ func (b *HostBuilder) buildOne(host *computemodels.SHost) (interface{}, error) { fillFuncs := []func(*HostDesc, *computemodels.SHost) error{ b.fillGuestsResourceInfo, - b.fillStorages, - b.fillSchedtags, b.fillResidentGroups, b.fillMetadata, b.fillIsolatedDevices, @@ -1133,14 +1131,6 @@ func (b *HostBuilder) guestAppTags(guest computemodels.SGuest) []string { return []string{} } -func (b *HostBuilder) fillStorages(desc *HostDesc, host *computemodels.SHost) error { - return desc.fillStorages(host) -} - -func (b *HostBuilder) fillSchedtags(desc *HostDesc, host *computemodels.SHost) error { - return desc.fillSchedtags(b.schedtags) -} - func (b *HostBuilder) storageUsedCapacity(storage *models.Storage, ready bool) int64 { d, ok := b.storageStatesSizeDict[storage.ID] if !ok {