From de48dfd6c146c843ccf61383a2aa62ad686bbd6f Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Thu, 9 Apr 2020 16:23:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20storage-list=20=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=9A=84host=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/apis/compute/storage.go | 7 ++++++ pkg/compute/models/storages.go | 39 ++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/pkg/apis/compute/storage.go b/pkg/apis/compute/storage.go index c1c62a41ca..84d9ae40f2 100644 --- a/pkg/apis/compute/storage.go +++ b/pkg/apis/compute/storage.go @@ -122,6 +122,11 @@ type SStorageCapacityInfo struct { FreeCapacity int64 `json:"free_capacity"` } +type StorageHost struct { + Id string + Name string +} + type StorageDetails struct { apis.EnabledStatusInfrasResourceBaseDetails ManagedResourceInfo @@ -131,6 +136,8 @@ type StorageDetails struct { SStorage + Hosts []StorageHost `json:"hosts"` + Schedtags []SchedtagShortDescDetails `json:"schedtags"` // 超分比 diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 4df9c0a911..982640b08c 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -83,7 +83,7 @@ type SStorage struct { // 超售比 Cmtbound float32 `nullable:"true" default:"1" list:"admin" update:"admin"` // 存储配置信息 - StorageConf jsonutils.JSONObject `nullable:"true" get:"admin" update:"admin"` + StorageConf jsonutils.JSONObject `nullable:"true" get:"admin" list:"admin" update:"admin"` // 存储缓存Id StoragecacheId string `width:"36" charset:"ascii" nullable:"true" list:"admin" get:"admin" update:"admin" create:"optional"` @@ -441,13 +441,48 @@ func (manager *SStorageManager) FetchCustomizeColumns( stdRows := manager.SEnabledStatusInfrasResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) zoneRows := manager.SZoneResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) manageRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) + storageIds := make([]string, len(objs)) for i := range rows { rows[i] = api.StorageDetails{ EnabledStatusInfrasResourceBaseDetails: stdRows[i], ZoneResourceInfo: zoneRows[i], ManagedResourceInfo: manageRows[i], } - rows[i] = objs[i].(*SStorage).getMoreDetails(ctx, rows[i]) + storage := objs[i].(*SStorage) + storageIds[i] = storage.Id + rows[i] = storage.getMoreDetails(ctx, rows[i]) + } + q := HoststorageManager.Query("storage_id", "host_id").In("storage_id", storageIds) + hoststorages, err := q.Rows() + if err != nil { + return rows + } + defer hoststorages.Close() + hostIds := []string{} + storageMap := make(map[string][]string, len(objs)) + for hoststorages.Next() { + var storageId, hostId string + hoststorages.Scan(&storageId, &hostId) + if _, ok := storageMap[storageId]; !ok { + storageMap[storageId] = []string{} + } + storageMap[storageId] = append(storageMap[storageId], hostId) + hostIds = append(hostIds, hostId) + } + hostMap, err := db.FetchIdNameMap2(HostManager, hostIds) + if err != nil { + return rows + } + for i := range rows { + hostIds, ok := storageMap[storageIds[i]] + if ok { + rows[i].Hosts = []api.StorageHost{} + for _, hostId := range hostIds { + if name, ok := hostMap[hostId]; ok { + rows[i].Hosts = append(rows[i].Hosts, api.StorageHost{Id: hostId, Name: name}) + } + } + } } return rows }