From 2ff04e3d9793b18cbdc906e047cbdfd7aeccfaf9 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 12 Sep 2018 05:25:18 +0000 Subject: [PATCH 1/4] cloudcommon: virtualresource: optimize list with --field specified No functional change --- pkg/cloudcommon/db/db_dispatcher.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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 From c66e264affe3cded46073737d63591886c07cf68 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 12 Sep 2018 05:24:32 +0000 Subject: [PATCH 2/4] cloudcommon: virtualresource: show pending_deleted field when queried --- pkg/cloudcommon/db/virtualresource.go | 8 ++++++++ 1 file changed, 8 insertions(+) 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 } From 51307dedc5526984035f78ccb32ca940414156ac Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 12 Sep 2018 05:31:21 +0000 Subject: [PATCH 3/4] mcclient: options: set details=true when --pending-delete-all is specified This is required to get values of pending_deleted field --- pkg/mcclient/options/base.go | 1 + 1 file changed, 1 insertion(+) 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 || From dd38b2b53dfcc50982078ec0b0f093e6b95bc38f Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 12 Sep 2018 15:25:20 +0000 Subject: [PATCH 4/4] validators: add Optional() to IValidator for use in ValidateUpdateData() --- pkg/cloudcommon/validators/validators.go | 1 + 1 file changed, 1 insertion(+) 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 }