diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 0ee5ae6c20..924a785782 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -314,10 +314,11 @@ func query2List(manager IModelManager, ctx context.Context, userCred mcclient.To if err != nil { return nil, err } - fieldFilter := jsonutils.GetQueryStringArray(query, "field") listF := listFields(manager, userCred) - if len(fieldFilter) > 0 && userCred.IsSystemAdmin() { // only sysadmin can extend list Fields - listF = append(listF, fieldFilter...) + fieldFilter := jsonutils.GetQueryStringArray(query, "field") + if len(fieldFilter) > 0 && userCred.IsSystemAdmin() { + // only sysadmin can specify list Fields + listF = fieldFilter } showDetails := false showDetailsJson, _ := query.Get("details") @@ -356,9 +357,6 @@ func query2List(manager IModelManager, ctx context.Context, userCred mcclient.To } jsonDict = getModelExtraDetails(item, ctx, jsonDict) } - if len(fieldFilter) > 0 { - jsonDict = jsonDict.CopyIncludes(fieldFilter...) - } results = append(results, jsonDict) } return results, nil diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index 088010f579..6a69bc84bf 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -176,6 +176,14 @@ func (model *SVirtualResourceBase) getMoreDetails(ctx context.Context, userCred log.Errorf("GetTenantCache fail %s", err) } } + admin, _ := query.GetString("admin") + if utils.ToBool(admin) { // admin + pendingDelete, _ := query.GetString("pending_delete") + pendingDeleteLower := strings.ToLower(pendingDelete) + if pendingDeleteLower == "all" || pendingDeleteLower == "any" { + extra.Set("pending_deleted", jsonutils.NewBool(model.PendingDeleted)) + } + } return extra } diff --git a/pkg/cloudcommon/validators/validators.go b/pkg/cloudcommon/validators/validators.go index 0b99c0e977..4348106f62 100644 --- a/pkg/cloudcommon/validators/validators.go +++ b/pkg/cloudcommon/validators/validators.go @@ -28,6 +28,7 @@ type IValidatorBase interface { type IValidator interface { IValidatorBase + Optional(bool) IValidator getValue() interface{} setDefault(data *jsonutils.JSONDict) bool } diff --git a/pkg/mcclient/options/base.go b/pkg/mcclient/options/base.go index eafefcceec..206580d01a 100644 --- a/pkg/mcclient/options/base.go +++ b/pkg/mcclient/options/base.go @@ -178,6 +178,7 @@ func (opts *BaseListOptions) Params() (*jsonutils.JSONDict, error) { } if BoolV(opts.PendingDeleteAll) { params.Set("pending_delete", jsonutils.NewString("all")) + params.Set("details", jsonutils.JSONTrue) // required to get pending_deleted field } if opts.Admin == nil { requiresSystem := len(opts.Tenant) > 0 ||