From 3151e782e990bdc9a815e64e26613982c72b931b Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Wed, 31 Oct 2018 19:48:10 +0800 Subject: [PATCH] support export filter --- pkg/cloudcommon/db/db_dispatcher.go | 6 ++++++ pkg/cloudcommon/db/interface.go | 1 + pkg/cloudcommon/db/modelbase.go | 4 ++++ pkg/compute/models/guests.go | 14 ++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 49620e8fc8..b1fc9958ac 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -340,6 +340,12 @@ func query2List(manager IModelManager, ctx context.Context, userCred mcclient.To } jsonDict = getModelExtraDetails(item, ctx, jsonDict) } + if query.Contains("export_keys") { + exportDict := item.GetExportItems(ctx, userCred, query) + if exportDict != nil { + jsonDict.Update(exportDict) + } + } results = append(results, jsonDict) } return results, nil diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index 4b0a7a3ac5..a4be1bca6c 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -74,6 +74,7 @@ type IModel interface { // get hooks AllowGetDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict + GetExportItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict // create hooks CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerProjId string, query jsonutils.JSONObject, data jsonutils.JSONObject) error diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 4e17ff01e9..3941a80abd 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -180,6 +180,10 @@ func (model *SModelBase) GetCustomizeColumns(ctx context.Context, userCred mccli return jsonutils.NewDict() } +func (model *SModelBase) GetExportItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict { + return jsonutils.NewDict() +} + // get hooks func (model *SModelBase) AllowGetDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { return false diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 67c01457e3..81138d00c6 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1103,6 +1103,20 @@ func (self *SGuest) GetExtraDetails(ctx context.Context, userCred mcclient.Token return self.moreExtraInfo(extra) } +func (self *SGuest) GetExportItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict { + exportKeys, _ := query.GetString("export_keys") + keys := strings.Split(exportKeys, ",") + res := jsonutils.NewDict() + if utils.IsInStringArray("os_distribution", keys) { + osType := self.GetMetadata("os_distribution", userCred) + if len(osType) == 0 { + osType = self.OsType + } + res.Set("os_distribution", jsonutils.NewString(osType)) + } + return res +} + func (self *SGuest) getNetworksDetails() string { var buf bytes.Buffer for _, nic := range self.GetNetworks() {