diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 1b1db543a9..9ea9967088 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -342,6 +342,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 d046ac6e26..0f21d9592f 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -78,6 +78,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 20c1e4544e..5182e42470 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -193,6 +193,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 66292bc030..48edef72f5 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1123,6 +1123,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() {