From 9c58a8f6447438d1ea6fdc62b07322dfd222deca Mon Sep 17 00:00:00 2001 From: ioito Date: Thu, 9 Nov 2023 12:04:13 +0800 Subject: [PATCH] fix(region): pve cdrom with host info --- pkg/compute/guestdrivers/proxmox.go | 15 +++++++++++++++ pkg/compute/models/cachedimages.go | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/pkg/compute/guestdrivers/proxmox.go b/pkg/compute/guestdrivers/proxmox.go index d94586fe45..ad10bf5657 100644 --- a/pkg/compute/guestdrivers/proxmox.go +++ b/pkg/compute/guestdrivers/proxmox.go @@ -160,6 +160,21 @@ func (self *SProxmoxGuestDriver) ValidateCreateData(ctx context.Context, userCre return nil, err } } + if len(input.Cdrom) > 0 { + image, err := models.CachedimageManager.GetCachedimageById(ctx, userCred, input.Cdrom, false) + if err != nil { + return nil, err + } + if len(image.ExternalId) > 0 { + hosts, err := image.GetHosts() + if err != nil { + return nil, err + } + if len(input.PreferHost) == 0 && len(hosts) == 1 { + input.PreferHost = hosts[0].Id + } + } + } return input, nil } diff --git a/pkg/compute/models/cachedimages.go b/pkg/compute/models/cachedimages.go index d553a90876..80571ae98b 100644 --- a/pkg/compute/models/cachedimages.go +++ b/pkg/compute/models/cachedimages.go @@ -142,6 +142,23 @@ func (self *SCachedimage) isRefreshSessionExpire() bool { } } +func (self *SCachedimage) GetHosts() ([]SHost, error) { + q := HostManager.Query().Distinct() + hs := HoststorageManager.Query().SubQuery() + storages := StorageManager.Query().SubQuery() + scis := StoragecachedimageManager.Query().Equals("cachedimage_id", self.Id).Equals("status", api.CACHED_IMAGE_STATUS_ACTIVE).SubQuery() + + q = q.Join(hs, sqlchemy.Equals(hs.Field("host_id"), q.Field("id"))) + q = q.Join(storages, sqlchemy.Equals(hs.Field("storage_id"), storages.Field("id"))) + q = q.Join(scis, sqlchemy.Equals(storages.Field("storagecache_id"), scis.Field("storagecache_id"))) + ret := []SHost{} + err := db.FetchModelObjects(HostManager, q, &ret) + if err != nil { + return nil, err + } + return ret, err +} + func (self *SCachedimage) GetName() string { name, _ := self.Info.GetString("name") return name