feature: allow manager to preapre query context (#19455)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2024-02-06 00:01:26 +08:00
committed by GitHub
parent 1bd5f73365
commit eef9e48e02
270 changed files with 1463 additions and 1323 deletions
+2 -2
View File
@@ -75,7 +75,7 @@ func init() {
func (man *SAnsiblePlaybookManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
pbV := NewAnsiblePlaybookValidator("playbook", userCred)
if err := pbV.Validate(data); err != nil {
if err := pbV.Validate(ctx, data); err != nil {
return nil, err
}
data.Set("status", jsonutils.NewString(api.AnsiblePlaybookStatusInit))
@@ -137,7 +137,7 @@ func (apb *SAnsiblePlaybook) ValidateUpdateCondition(ctx context.Context) error
func (apb *SAnsiblePlaybook) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
pbV := NewAnsiblePlaybookValidator("playbook", userCred)
if err := pbV.Validate(data); err != nil {
if err := pbV.Validate(ctx, data); err != nil {
return nil, err
}
apb.Playbook = pbV.Playbook // Update as a whole
@@ -46,7 +46,7 @@ func NewAnsiblePlaybookValidator(key string, userCred mcclient.TokenCredential)
return v
}
func (v *ValidatorAnsiblePlaybook) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorAnsiblePlaybook) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
pb := ansible.NewPlaybook()
err := data.Unmarshal(pb, "playbook")
if err != nil {
+3 -2
View File
@@ -68,10 +68,11 @@ func ApplyQueryDistinctExtraField(
type FilterByOwnerProvider interface {
Keyword() string
KeywordPlural() string
FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery
FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery
}
func ApplyFilterByOwner(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
owner mcclient.IIdentityProvider,
@@ -79,7 +80,7 @@ func ApplyFilterByOwner(
managers ...FilterByOwnerProvider,
) *sqlchemy.SQuery {
for _, manager := range managers {
q = manager.FilterByOwner(q, manager, userCred, owner, scope)
q = manager.FilterByOwner(ctx, q, manager, userCred, owner, scope)
}
return q
}
+52
View File
@@ -0,0 +1,52 @@
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package db
import (
"context"
"yunion.io/x/pkg/appctx"
)
const (
APP_CONTEXT_KEY_DB_METADATA_MANAGER = appctx.AppContextKey("db_metadata_manager")
APP_CONTEXT_KEY_DB_TENANT_CACHE_MANAGER = appctx.AppContextKey("db_tenant_cache_manager")
)
func GetMetadaManagerInContext(ctx context.Context) *SMetadataManager {
val := ctx.Value(APP_CONTEXT_KEY_DB_METADATA_MANAGER)
if val != nil {
return val.(*SMetadataManager)
} else {
return Metadata
}
}
func SaveMetadaManagerInContext(ctx context.Context, manager *SMetadataManager) context.Context {
return context.WithValue(ctx, APP_CONTEXT_KEY_DB_METADATA_MANAGER, manager)
}
func GetTenantCacheManagerInContext(ctx context.Context) *STenantCacheManager {
val := ctx.Value(APP_CONTEXT_KEY_DB_TENANT_CACHE_MANAGER)
if val != nil {
return val.(*STenantCacheManager)
} else {
return TenantCacheManager
}
}
func SaveTenantCacheManagerInContext(ctx context.Context, manager *STenantCacheManager) context.Context {
return context.WithValue(ctx, APP_CONTEXT_KEY_DB_TENANT_CACHE_MANAGER, manager)
}
+11 -6
View File
@@ -253,7 +253,8 @@ func ListItemQueryFilters(manager IModelManager,
return listItemQueryFilters(manager, ctx, q, userCred, query, action, false)
}
func listItemQueryFiltersRaw(manager IModelManager,
func listItemQueryFiltersRaw(
manager IModelManager,
ctx context.Context, q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query jsonutils.JSONObject,
@@ -274,7 +275,7 @@ func listItemQueryFiltersRaw(manager IModelManager,
if !useRawQuery {
// Specifically for joint resource, these filters will exclude
// deleted resources by joining with master/slave tables
q = manager.FilterByOwner(q, manager, userCred, ownerId, queryScope)
q = manager.FilterByOwner(ctx, q, manager, userCred, ownerId, queryScope)
q = manager.FilterBySystemAttributes(q, userCred, query, queryScope)
q = manager.FilterByHiddenSystemAttributes(q, userCred, query, queryScope)
}
@@ -915,6 +916,7 @@ func (dispatcher *DBModelDispatcher) List(ctx context.Context, query jsonutils.J
userCred := fetchUserCredential(ctx)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
// list详情
items, err := ListItems(manager, ctx, userCred, query, ctxIds)
if err != nil {
@@ -977,10 +979,10 @@ func getItemDetails(manager IModelManager, item IModel, ctx context.Context, use
return nil, httperrors.NewInternalServerError("FetchCustomizeColumns returns incorrect results(expect 1 actual %d)", len(extraRows))
}
func (dispatcher *DBModelDispatcher) tryGetModelProperty(ctx context.Context, property string, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
func tryGetModelProperty(manager IModelManager, ctx context.Context, property string, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
userCred := fetchUserCredential(ctx)
funcName := fmt.Sprintf("GetProperty%s", utils.Kebab2Camel(property, "-"))
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query)
modelValue := reflect.ValueOf(manager)
// params := []interface{}{ctx, userCred, query}
@@ -1019,8 +1021,9 @@ func (dispatcher *DBModelDispatcher) Get(ctx context.Context, idStr string, quer
// log.Debugf("Get %s", idStr)
userCred := fetchUserCredential(ctx)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
data, err := dispatcher.tryGetModelProperty(ctx, idStr, query)
data, err := tryGetModelProperty(manager, ctx, idStr, query)
if err != nil {
return nil, err
} else if data != nil {
@@ -1057,6 +1060,8 @@ func (dispatcher *DBModelDispatcher) Get(ctx context.Context, idStr string, quer
func (dispatcher *DBModelDispatcher) GetSpecific(ctx context.Context, idStr string, spec string, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
userCred := fetchUserCredential(ctx)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
model, err := fetchItem(manager, ctx, userCred, idStr, query)
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), idStr)
@@ -1287,7 +1292,7 @@ func _doCreateItem(
uniqValues := manager.FetchUniqValues(ctx, dataDict)
name, _ := dataDict.GetString("name")
if len(name) > 0 {
err = NewNameValidator(manager, ownerId, name, uniqValues)
err = NewNameValidator(ctx, manager, ownerId, name, uniqValues)
if err != nil {
return nil, err
}
+34 -26
View File
@@ -70,19 +70,22 @@ func (dispatcher *DBJointModelDispatcher) ListMasterDescendent(ctx context.Conte
}
}
model, err := fetchItem(dispatcher.JointModelManager().GetMasterManager(), ctx, userCred, idStr, query)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query).(IJointModelManager)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
model, err := fetchItem(manager.GetMasterManager(), ctx, userCred, idStr, query)
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(dispatcher.JointModelManager().GetMasterManager().Keyword(), idStr)
return nil, httperrors.NewResourceNotFoundError2(manager.GetMasterManager().Keyword(), idStr)
} else if err != nil {
return nil, err
}
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", dispatcher.JointModelManager().GetMasterManager().Keyword()))
queryDict.Add(jsonutils.NewString(model.GetId()), dispatcher.JointModelManager().GetMasterFieldName())
if len(dispatcher.JointModelManager().GetMasterManager().Alias()) > 0 {
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", dispatcher.JointModelManager().GetMasterManager().Alias()))
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", manager.GetMasterManager().Keyword()))
queryDict.Add(jsonutils.NewString(model.GetId()), manager.GetMasterFieldName())
if len(manager.GetMasterManager().Alias()) > 0 {
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", manager.GetMasterManager().Alias()))
}
return dispatcher._listJoint(ctx, userCred, model.(IStandaloneModel), queryDict)
return _listJoint(manager, ctx, userCred, model.(IStandaloneModel), queryDict)
}
func (dispatcher *DBJointModelDispatcher) ListSlaveDescendent(ctx context.Context, idStr string, query jsonutils.JSONObject) (*printutils.ListResult, error) {
@@ -97,23 +100,26 @@ func (dispatcher *DBJointModelDispatcher) ListSlaveDescendent(ctx context.Contex
}
}
model, err := fetchItem(dispatcher.JointModelManager().GetSlaveManager(), ctx, userCred, idStr, query)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query).(IJointModelManager)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
model, err := fetchItem(manager.GetSlaveManager(), ctx, userCred, idStr, query)
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(dispatcher.JointModelManager().GetSlaveManager().Keyword(), idStr)
return nil, httperrors.NewResourceNotFoundError2(manager.GetSlaveManager().Keyword(), idStr)
} else if err != nil {
return nil, err
}
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", dispatcher.JointModelManager().GetSlaveManager().Keyword()))
queryDict.Add(jsonutils.NewString(model.GetId()), dispatcher.JointModelManager().GetSlaveFieldName())
if len(dispatcher.JointModelManager().GetSlaveManager().Alias()) > 0 {
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", dispatcher.JointModelManager().GetSlaveManager().Alias()))
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", manager.GetSlaveManager().Keyword()))
queryDict.Add(jsonutils.NewString(model.GetId()), manager.GetSlaveFieldName())
if len(manager.GetSlaveManager().Alias()) > 0 {
queryDict.Add(jsonutils.NewString(model.GetId()), fmt.Sprintf("%s_id", manager.GetSlaveManager().Alias()))
}
return dispatcher._listJoint(ctx, userCred, model.(IStandaloneModel), queryDict)
return _listJoint(manager, ctx, userCred, model.(IStandaloneModel), queryDict)
}
func (dispatcher *DBJointModelDispatcher) _listJoint(ctx context.Context, userCred mcclient.TokenCredential, ctxModel IStandaloneModel, queryDict jsonutils.JSONObject) (*printutils.ListResult, error) {
items, err := ListItems(dispatcher.JointModelManager(), ctx, userCred, queryDict, nil)
func _listJoint(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, ctxModel IStandaloneModel, queryDict jsonutils.JSONObject) (*printutils.ListResult, error) {
items, err := ListItems(manager, ctx, userCred, queryDict, nil)
if err != nil {
log.Errorf("Fail to list items: %s", err)
return nil, httperrors.NewGeneralError(err)
@@ -121,16 +127,16 @@ func (dispatcher *DBJointModelDispatcher) _listJoint(ctx context.Context, userCr
return items, nil
}
func fetchJointItem(dispatcher *DBJointModelDispatcher, ctx context.Context, userCred mcclient.TokenCredential, id1 string, id2 string, query jsonutils.JSONObject) (IStandaloneModel, IStandaloneModel, IJointModel, error) {
master, err := fetchItem(dispatcher.JointModelManager().GetMasterManager(), ctx, userCred, id1, query)
func fetchJointItem(manager IJointModelManager, ctx context.Context, userCred mcclient.TokenCredential, id1 string, id2 string, query jsonutils.JSONObject) (IStandaloneModel, IStandaloneModel, IJointModel, error) {
master, err := fetchItem(manager.GetMasterManager(), ctx, userCred, id1, query)
if err != nil {
return nil, nil, nil, httperrors.NewGeneralError(err)
}
slave, err := fetchItem(dispatcher.JointModelManager().GetSlaveManager(), ctx, userCred, id2, query)
slave, err := fetchItem(manager.GetSlaveManager(), ctx, userCred, id2, query)
if err != nil {
return nil, nil, nil, httperrors.NewGeneralError(err)
}
item, err := FetchJointByIds(dispatcher.JointModelManager(), master.GetId(), slave.GetId(), query)
item, err := FetchJointByIds(manager, master.GetId(), slave.GetId(), query)
if err != nil {
return nil, nil, nil, err
}
@@ -139,9 +145,11 @@ func fetchJointItem(dispatcher *DBJointModelDispatcher, ctx context.Context, use
func (dispatcher *DBJointModelDispatcher) Get(ctx context.Context, id1 string, id2 string, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
userCred := fetchUserCredential(ctx)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query)
_, _, item, err := fetchJointItem(dispatcher, ctx, userCred, id1, id2, query)
manager := dispatcher.manager.GetImmutableInstance(ctx, userCred, query).(IJointModelManager)
ctx = manager.PrepareQueryContext(ctx, userCred, query)
_, _, item, err := fetchJointItem(manager, ctx, userCred, id1, id2, query)
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), id1+"-"+id2)
} else if err != nil {
@@ -151,7 +159,7 @@ func (dispatcher *DBJointModelDispatcher) Get(ctx context.Context, id1 string, i
if err != nil {
return nil, err
}
return getItemDetails(dispatcher.JointModelManager(), item, ctx, userCred, query)
return getItemDetails(manager, item, ctx, userCred, query)
}
func attachItems(
@@ -214,7 +222,7 @@ func (dispatcher *DBJointModelDispatcher) Attach(ctx context.Context, id1 string
}
}
_, _, joinItem, err := fetchJointItem(dispatcher, ctx, userCred, master.GetId(), slave.GetId(), query)
_, _, joinItem, err := fetchJointItem(dispatcher.JointModelManager(), ctx, userCred, master.GetId(), slave.GetId(), query)
if err != nil && err != sql.ErrNoRows {
return nil, err
}
@@ -237,7 +245,7 @@ func (dispatcher *DBJointModelDispatcher) Update(ctx context.Context, id1 string
manager := dispatcher.manager.GetMutableInstance(ctx, userCred, query, data)
// 获取对象与关联表(such as guestdisks_tbl)
master, slave, item, err := fetchJointItem(dispatcher, ctx, userCred, id1, id2, query)
master, slave, item, err := fetchJointItem(dispatcher.JointModelManager(), ctx, userCred, id1, id2, query)
if err == sql.ErrNoRows {
if jsonutils.QueryBoolean(query, "auto_create", false) {
queryDict := query.(*jsonutils.JSONDict)
@@ -265,7 +273,7 @@ func (dispatcher *DBJointModelDispatcher) Detach(ctx context.Context, id1 string
userCred := fetchUserCredential(ctx)
manager := dispatcher.manager.GetMutableInstance(ctx, userCred, query, data)
master, slave, item, err := fetchJointItem(dispatcher, ctx, userCred, id1, id2, query)
master, slave, item, err := fetchJointItem(dispatcher.JointModelManager(), ctx, userCred, id1, id2, query)
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), id1+"-"+id2)
} else if err != nil {
+5 -7
View File
@@ -54,7 +54,7 @@ func (manager *SDomainizedResourceBaseManager) ResourceScope() rbacscope.TRbacSc
return rbacscope.ScopeDomain
}
func (manager *SDomainizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SDomainizedResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject, rbacscope.ScopeDomain:
@@ -64,9 +64,8 @@ func (manager *SDomainizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery,
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
case rbacscope.ScopeSystem:
if userCred != nil {
@@ -74,14 +73,13 @@ func (manager *SDomainizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery,
if !result.DomainTags.IsEmpty() {
policyFilters := tagutils.STagFilters{}
policyFilters.AddFilters(result.DomainTags)
q = ObjectIdQueryWithTagFilters(q, "domain_id", "domain", policyFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "domain_id", "domain", policyFilters)
}
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
}
}
@@ -149,7 +147,7 @@ func (manager *SDomainizedResourceBaseManager) ListItemFilter(
if !query.NoDomainTags.IsEmpty() {
tagFilters.AddNoFilters(query.NoDomainTags)
}
q = ObjectIdQueryWithTagFilters(q, "domain_id", "domain", tagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "domain_id", "domain", tagFilters)
return q, nil
}
+1 -1
View File
@@ -153,7 +153,7 @@ func (model *SDomainLevelResourceBase) PerformChangeOwner(ctx context.Context, u
}
q := manager.Query().Equals("name", model.GetName())
q = manager.FilterByOwner(q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
q = q.NotEquals("id", model.GetId())
cnt, err := q.CountWithError()
+6 -6
View File
@@ -96,7 +96,7 @@ func FetchById(manager IModelManager, idStr string) (IModel, error) {
}
}
func FetchByName(manager IModelManager, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
func FetchByName(ctx context.Context, manager IModelManager, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
q := manager.Query()
q = manager.FilterByName(q, idStr)
count, err := q.CountWithError()
@@ -104,7 +104,7 @@ func FetchByName(manager IModelManager, userCred mcclient.IIdentityProvider, idS
return nil, err
}
if count > 0 && userCred != nil {
q = manager.FilterByOwner(q, manager, nil, userCred, manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, nil, userCred, manager.NamespaceScope())
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
count, err = q.CountWithError()
if err != nil {
@@ -129,13 +129,13 @@ func FetchByName(manager IModelManager, userCred mcclient.IIdentityProvider, idS
}
}
func FetchByIdOrName(manager IModelManager, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
func FetchByIdOrName(ctx context.Context, manager IModelManager, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
if stringutils2.IsUtf8(idStr) {
return FetchByName(manager, userCred, idStr)
return FetchByName(ctx, manager, userCred, idStr)
}
obj, err := FetchById(manager, idStr)
if err == sql.ErrNoRows {
return FetchByName(manager, userCred, idStr)
return FetchByName(ctx, manager, userCred, idStr)
} else {
return obj, err
}
@@ -197,7 +197,7 @@ func fetchItemByName(manager IModelManager, ctx context.Context, userCred mcclie
if err != nil {
return nil, httperrors.NewGeneralError(err)
}
q = manager.FilterByOwner(q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
count, err = q.CountWithError()
if err != nil {
+2 -2
View File
@@ -54,8 +54,8 @@ func (manager *SInfrasResourceBaseManager) GetIInfrasModelManager() IInfrasModel
return manager.GetVirtualObject().(IInfrasModelManager)
}
func (manager *SInfrasResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return SharableManagerFilterByOwner(manager.GetIInfrasModelManager(), q, userCred, owner, scope)
func (manager *SInfrasResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return SharableManagerFilterByOwner(ctx, manager.GetIInfrasModelManager(), q, userCred, owner, scope)
}
func (model *SInfrasResourceBase) IsSharable(reqUsrId mcclient.IIdentityProvider) bool {
+4 -3
View File
@@ -78,7 +78,6 @@ type IModelManager interface {
FilterByName(q *sqlchemy.SQuery, name string) *sqlchemy.SQuery
FilterByOwnerProvider
//FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery
FilterBySystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacscope.TRbacScope) *sqlchemy.SQuery
FilterByHiddenSystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacscope.TRbacScope) *sqlchemy.SQuery
@@ -88,8 +87,8 @@ type IModelManager interface {
// RawFetchById(idStr string) (IModel, error)
FetchById(idStr string) (IModel, error)
FetchByName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
// create hooks
// AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool
@@ -142,6 +141,8 @@ type IModelManager interface {
CreateByInsertOrUpdate() bool
CustomizedTotalCount(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, totalQ *sqlchemy.SQuery) (int, jsonutils.JSONObject, error)
PrepareQueryContext(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) context.Context
}
type IModel interface {
+6 -6
View File
@@ -147,9 +147,9 @@ func (m *SMetadata) GetName() string {
return fmt.Sprintf("%s-%s", m.Id, m.Key)
}
func (m *SMetadata) GetModelManager() IModelManager {
return Metadata
}
// func (m *SMetadata) GetModelManager() IModelManager {
// return Metadata
// }
func GetModelIdstr(model IModel) string {
return getObjectIdstr(model.GetModelManager().Keyword(), model.GetId())
@@ -412,7 +412,7 @@ func (manager *SMetadataManager) ListItemFilter(ctx context.Context, q *sqlchemy
log.Warningf("FetchCheckQueryOwnerScope.%s error: %v", man.Keyword(), err)
continue
}
sq = man.FilterByOwner(sq, man, userCred, ownerId, queryScope)
sq = man.FilterByOwner(ctx, sq, man, userCred, ownerId, queryScope)
sq = man.FilterBySystemAttributes(sq, userCred, query, queryScope)
sq = man.FilterByHiddenSystemAttributes(sq, userCred, query, queryScope)
conditions = append(conditions, sqlchemy.In(q.Field("obj_id"), sq))
@@ -446,7 +446,7 @@ func (manager *SMetadataManager) GetStringValue(ctx context.Context, model IMode
}
idStr := GetModelIdstr(model)
m := SMetadata{}
err := manager.Query().Equals("id", idStr).Equals("key", key).First(&m)
err := manager.Query("value").Equals("id", idStr).Equals("key", key).First(&m)
if err == nil {
return m.Value
}
@@ -462,7 +462,7 @@ func (manager *SMetadataManager) GetJsonValue(ctx context.Context, model IModel,
}
idStr := GetModelIdstr(model)
m := SMetadata{}
err := manager.Query().Equals("id", idStr).Equals("key", key).First(&m)
err := manager.Query("value").Equals("id", idStr).Equals("key", key).First(&m)
if err == nil {
json, _ := jsonutils.ParseString(m.Value)
return json
+17 -13
View File
@@ -15,6 +15,7 @@
package db
import (
"context"
"strings"
"yunion.io/x/jsonutils"
@@ -32,40 +33,40 @@ import (
type SMetadataResourceBaseModelManager struct{}
func ObjectIdQueryWithPolicyResult(q *sqlchemy.SQuery, manager IModelManager, result rbacutils.SPolicyResult) *sqlchemy.SQuery {
func ObjectIdQueryWithPolicyResult(ctx context.Context, q *sqlchemy.SQuery, manager IModelManager, result rbacutils.SPolicyResult) *sqlchemy.SQuery {
scope := manager.ResourceScope()
if scope == rbacscope.ScopeDomain || scope == rbacscope.ScopeProject {
if !result.DomainTags.IsEmpty() {
tagFilters := tagutils.STagFilters{}
tagFilters.AddFilters(result.DomainTags)
q = ObjectIdQueryWithTagFilters(q, "domain_id", "domain", tagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "domain_id", "domain", tagFilters)
}
}
if scope == rbacscope.ScopeProject {
if !result.ProjectTags.IsEmpty() {
tagFilters := tagutils.STagFilters{}
tagFilters.AddFilters(result.ProjectTags)
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", tagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", tagFilters)
}
}
if !result.ObjectTags.IsEmpty() {
tagFilters := tagutils.STagFilters{}
tagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), tagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), tagFilters)
}
return q
}
func ObjectIdQueryWithTagFilters(q *sqlchemy.SQuery, idField string, modelName string, filters tagutils.STagFilters) *sqlchemy.SQuery {
func ObjectIdQueryWithTagFilters(ctx context.Context, q *sqlchemy.SQuery, idField string, modelName string, filters tagutils.STagFilters) *sqlchemy.SQuery {
if len(filters.Filters) > 0 {
sq := objIdQueryWithTags(modelName, filters.Filters)
sq := objIdQueryWithTags(ctx, modelName, filters.Filters)
if sq != nil {
sqq := sq.SubQuery()
q = q.Join(sqq, sqlchemy.Equals(q.Field(idField), sqq.Field("obj_id")))
}
}
if len(filters.NoFilters) > 0 {
sq := objIdQueryWithTags(modelName, filters.NoFilters)
sq := objIdQueryWithTags(ctx, modelName, filters.NoFilters)
if sq != nil {
q = q.Filter(sqlchemy.NotIn(q.Field(idField), sq.SubQuery()))
}
@@ -73,8 +74,9 @@ func ObjectIdQueryWithTagFilters(q *sqlchemy.SQuery, idField string, modelName s
return q
}
func objIdQueryWithTags(modelName string, tagsList []map[string][]string) *sqlchemy.SQuery {
metadataResQ := Metadata.Query().Equals("obj_type", modelName).SubQuery()
func objIdQueryWithTags(ctx context.Context, modelName string, tagsList []map[string][]string) *sqlchemy.SQuery {
manager := GetMetadaManagerInContext(ctx)
metadataResQ := manager.Query().Equals("obj_type", modelName).SubQuery()
queries := make([]sqlchemy.IQuery, 0)
for _, tags := range tagsList {
@@ -106,10 +108,12 @@ func objIdQueryWithTags(modelName string, tagsList []map[string][]string) *sqlch
}
func (meta *SMetadataResourceBaseModelManager) ListItemFilter(
ctx context.Context,
manager IModelManager,
q *sqlchemy.SQuery,
input apis.MetadataResourceListInput,
) *sqlchemy.SQuery {
metadataMan := GetMetadaManagerInContext(ctx)
inputTagFilters := tagutils.STagFilters{}
if len(input.Tags) > 0 {
@@ -124,7 +128,7 @@ func (meta *SMetadataResourceBaseModelManager) ListItemFilter(
if !input.NoObjTags.IsEmpty() {
inputTagFilters.AddNoFilters(input.NoObjTags)
}
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), inputTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), inputTagFilters)
//if !input.PolicyObjectTags.IsEmpty() {
// projTagFilters := tagutils.STagFilters{}
@@ -133,7 +137,7 @@ func (meta *SMetadataResourceBaseModelManager) ListItemFilter(
//}
if input.WithoutUserMeta != nil || input.WithUserMeta != nil {
metadatas := Metadata.Query().Equals("obj_type", manager.Keyword()).SubQuery()
metadatas := metadataMan.Query().Equals("obj_type", manager.Keyword()).SubQuery()
sq := metadatas.Query(metadatas.Field("obj_id")).Startswith("key", USER_TAG_PREFIX).Distinct().SubQuery()
if (input.WithoutUserMeta != nil && *input.WithoutUserMeta) || (input.WithUserMeta != nil && !*input.WithUserMeta) {
q = q.Filter(sqlchemy.NotIn(q.Field("id"), sq))
@@ -143,7 +147,7 @@ func (meta *SMetadataResourceBaseModelManager) ListItemFilter(
}
if input.WithCloudMeta != nil {
metadatas := Metadata.Query().Equals("obj_type", manager.Keyword()).SubQuery()
metadatas := metadataMan.Query().Equals("obj_type", manager.Keyword()).SubQuery()
sq := metadatas.Query(metadatas.Field("obj_id")).Startswith("key", CLOUD_TAG_PREFIX).Distinct().SubQuery()
if *input.WithCloudMeta {
q = q.Filter(sqlchemy.In(q.Field("id"), sq))
@@ -153,7 +157,7 @@ func (meta *SMetadataResourceBaseModelManager) ListItemFilter(
}
if input.WithAnyMeta != nil {
metadatas := Metadata.Query().Equals("obj_type", manager.Keyword()).SubQuery()
metadatas := metadataMan.Query().Equals("obj_type", manager.Keyword()).SubQuery()
sq := metadatas.Query(metadatas.Field("obj_id")).Distinct().SubQuery()
if *input.WithAnyMeta {
q = q.Filter(sqlchemy.In(q.Field("id"), sq))
+7 -3
View File
@@ -137,6 +137,10 @@ func (manager *SModelBaseManager) GetMutableInstance(ctx context.Context, userCr
return manager.GetIModelManager()
}
func (manager *SModelBaseManager) PrepareQueryContext(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) context.Context {
return ctx
}
func (manager *SModelBaseManager) SetAlias(alias string, aliasPlural string) {
manager.alias = alias
manager.aliasPlural = aliasPlural
@@ -260,7 +264,7 @@ func (manager *SModelBaseManager) FilterByName(q *sqlchemy.SQuery, name string)
return q
}
func (manager *SModelBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SModelBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return q
}
@@ -280,11 +284,11 @@ func (manager *SModelBaseManager) FetchById(idStr string) (IModel, error) {
return nil, sql.ErrNoRows
}
func (manager *SModelBaseManager) FetchByName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
func (manager *SModelBaseManager) FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return nil, sql.ErrNoRows
}
func (manager *SModelBaseManager) FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
func (manager *SModelBaseManager) FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return nil, sql.ErrNoRows
}
+14 -14
View File
@@ -28,11 +28,11 @@ import (
"yunion.io/x/onecloud/pkg/util/stringutils2"
)
func isNameUnique(manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject) (bool, error) {
return isRawNameUnique(manager, ownerId, name, uniqValues, false)
func isNameUnique(ctx context.Context, manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject) (bool, error) {
return isRawNameUnique(ctx, manager, ownerId, name, uniqValues, false)
}
func isRawNameUnique(manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject, isRaw bool) (bool, error) {
func isRawNameUnique(ctx context.Context, manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject, isRaw bool) (bool, error) {
var q *sqlchemy.SQuery
if isRaw {
q = manager.TableSpec().Instance().Query()
@@ -40,7 +40,7 @@ func isRawNameUnique(manager IModelManager, ownerId mcclient.IIdentityProvider,
q = manager.Query()
}
q = manager.FilterByName(q, name)
q = manager.FilterByOwner(q, manager, nil, ownerId, manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, nil, ownerId, manager.NamespaceScope())
if !isRaw {
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
if uniqValues != nil {
@@ -54,12 +54,12 @@ func isRawNameUnique(manager IModelManager, ownerId mcclient.IIdentityProvider,
return cnt == 0, nil
}
func NewNameValidator(manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject) error {
func NewNameValidator(ctx context.Context, manager IModelManager, ownerId mcclient.IIdentityProvider, name string, uniqValues jsonutils.JSONObject) error {
err := manager.ValidateName(name)
if err != nil {
return err
}
uniq, err := isNameUnique(manager, ownerId, name, uniqValues)
uniq, err := isNameUnique(ctx, manager, ownerId, name, uniqValues)
if err != nil {
return err
}
@@ -69,11 +69,11 @@ func NewNameValidator(manager IModelManager, ownerId mcclient.IIdentityProvider,
return nil
}
func isAlterNameUnique(model IModel, name string) (bool, error) {
return isRawAlterNameUnique(model, name, false)
func isAlterNameUnique(ctx context.Context, model IModel, name string) (bool, error) {
return isRawAlterNameUnique(ctx, model, name, false)
}
func isRawAlterNameUnique(model IModel, name string, isRaw bool) (bool, error) {
func isRawAlterNameUnique(ctx context.Context, model IModel, name string, isRaw bool) (bool, error) {
manager := model.GetModelManager()
var q *sqlchemy.SQuery
if isRaw {
@@ -82,7 +82,7 @@ func isRawAlterNameUnique(model IModel, name string, isRaw bool) (bool, error) {
q = manager.Query()
}
q = manager.FilterByName(q, name)
q = manager.FilterByOwner(q, manager, nil, model.GetOwnerId(), manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, nil, model.GetOwnerId(), manager.NamespaceScope())
q = manager.FilterByNotId(q, model.GetId())
if !isRaw {
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
@@ -97,12 +97,12 @@ func isRawAlterNameUnique(model IModel, name string, isRaw bool) (bool, error) {
return cnt == 0, nil
}
func alterNameValidator(model IModel, name string) error {
func alterNameValidator(ctx context.Context, model IModel, name string) error {
err := model.GetModelManager().ValidateName(name)
if err != nil {
return err
}
uniq, err := isAlterNameUnique(model, name)
uniq, err := isAlterNameUnique(ctx, model, name)
if err != nil {
return err
}
@@ -139,9 +139,9 @@ func GenerateName2(ctx context.Context, manager IModelManager, ownerId mcclient.
var uniq bool
var err error
if model == nil {
uniq, err = isRawNameUnique(manager, ownerId, name, nil, consts.IsHistoricalUniqueName())
uniq, err = isRawNameUnique(ctx, manager, ownerId, name, nil, consts.IsHistoricalUniqueName())
} else {
uniq, err = isRawAlterNameUnique(model, name, consts.IsHistoricalUniqueName())
uniq, err = isRawAlterNameUnique(ctx, model, name, consts.IsHistoricalUniqueName())
}
if err != nil {
return "", err
+1 -1
View File
@@ -362,7 +362,7 @@ func (manager *SOpsLogManager) LogSyncUpdate(m IModel, uds sqlchemy.UpdateDiffs,
}
}
func (self *SOpsLogManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (self *SOpsLogManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if ownerId != nil {
switch scope {
case rbacscope.ScopeUser:
+8 -8
View File
@@ -52,7 +52,7 @@ func (model *SProjectizedResourceBase) GetOwnerId() mcclient.IIdentityProvider {
return &owner
}
func (manager *SProjectizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SProjectizedResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject:
@@ -62,7 +62,7 @@ func (manager *SProjectizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
case rbacscope.ScopeDomain:
@@ -72,12 +72,12 @@ func (manager *SProjectizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery
if !result.ProjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ProjectTags)
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", policyTagFilters)
}
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
case rbacscope.ScopeSystem:
@@ -86,17 +86,17 @@ func (manager *SProjectizedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery
if !result.DomainTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.DomainTags)
q = ObjectIdQueryWithTagFilters(q, "domain_id", "domain", policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "domain_id", "domain", policyTagFilters)
}
if !result.ProjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ProjectTags)
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", policyTagFilters)
}
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
}
@@ -162,7 +162,7 @@ func (manager *SProjectizedResourceBaseManager) ListItemFilter(
if !query.NoProjectTags.IsEmpty() {
tagFilters.AddNoFilters(query.NoProjectTags)
}
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", tagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", tagFilters)
return q, nil
}
+2 -2
View File
@@ -236,8 +236,8 @@ func RegisterReferrer(man db.IModelManager) {
referrersMen = append(referrersMen, man)
}
func ValidateProxySettingResourceInput(userCred mcclient.TokenCredential, input proxyapi.ProxySettingResourceInput) (*SProxySetting, proxyapi.ProxySettingResourceInput, error) {
m, err := ProxySettingManager.FetchByIdOrName(userCred, input.ProxySettingId)
func ValidateProxySettingResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input proxyapi.ProxySettingResourceInput) (*SProxySetting, proxyapi.ProxySettingResourceInput, error) {
m, err := ProxySettingManager.FetchByIdOrName(ctx, userCred, input.ProxySettingId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ProxySettingManager.Keyword(), input.ProxySettingId)
+1 -1
View File
@@ -110,7 +110,7 @@ func (m *SScopedResourceBase) IsOwner(userCred mcclient.TokenCredential) bool {
return userCred.HasSystemAdminPrivilege()
}
func (m *SScopedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (m *SScopedResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner == nil {
return q
}
+8 -8
View File
@@ -214,7 +214,7 @@ func SharableManagerValidateCreateData(
return input, nil
}
func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func SharableManagerFilterByOwner(ctx context.Context, manager IStandaloneModelManager, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
resScope := manager.ResourceScope()
if resScope == rbacscope.ScopeUser {
@@ -254,7 +254,7 @@ func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.S
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), policyTagFilters)
}
}
} else if resScope == rbacscope.ScopeProject && scope == rbacscope.ScopeProject {
@@ -289,7 +289,7 @@ func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.S
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), policyTagFilters)
}
}
}
@@ -317,12 +317,12 @@ func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.S
if !result.ProjectTags.IsEmpty() && resScope == rbacscope.ScopeProject {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ProjectTags)
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", policyTagFilters)
}
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), policyTagFilters)
}
}
}
@@ -336,7 +336,7 @@ func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.S
subq := manager.Query("id")
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.DomainTags)
subq = ObjectIdQueryWithTagFilters(subq, "domain_id", "domain", policyTagFilters)
subq = ObjectIdQueryWithTagFilters(ctx, subq, "domain_id", "domain", policyTagFilters)
q = q.Filter(sqlchemy.OR(
sqlchemy.In(q.Field("id"), subq.SubQuery()),
sqlchemy.AND(
@@ -348,12 +348,12 @@ func SharableManagerFilterByOwner(manager IStandaloneModelManager, q *sqlchemy.S
if !result.ProjectTags.IsEmpty() && resScope == rbacscope.ScopeProject {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ProjectTags)
q = ObjectIdQueryWithTagFilters(q, "tenant_id", "project", policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "tenant_id", "project", policyTagFilters)
}
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", manager.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", manager.Keyword(), policyTagFilters)
}
}
}
+2 -2
View File
@@ -48,8 +48,8 @@ func (manager *SSharableVirtualResourceBaseManager) GetISharableVirtualModelMana
return manager.GetVirtualObject().(ISharableVirtualModelManager)
}
func (manager *SSharableVirtualResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return SharableManagerFilterByOwner(manager.GetISharableVirtualModelManager(), q, userCred, owner, scope)
func (manager *SSharableVirtualResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return SharableManagerFilterByOwner(ctx, manager.GetISharableVirtualModelManager(), q, userCred, owner, scope)
}
func (model *SSharableVirtualResourceBase) IsSharable(reqUsrId mcclient.IIdentityProvider) bool {
+5 -5
View File
@@ -72,12 +72,12 @@ func (manager *SStandaloneResourceBaseManager) ValidateName(name string) error {
return nil
}
func (manager *SStandaloneResourceBaseManager) FetchByName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(manager.GetIStandaloneModelManager(), userCred, idStr)
func (manager *SStandaloneResourceBaseManager) FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(ctx, manager.GetIStandaloneModelManager(), userCred, idStr)
}
func (manager *SStandaloneResourceBaseManager) FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(manager.GetIStandaloneModelManager(), userCred, idStr)
func (manager *SStandaloneResourceBaseManager) FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(ctx, manager.GetIStandaloneModelManager(), userCred, idStr)
}
func (manager *SStandaloneResourceBaseManager) ListItemFilter(
@@ -203,7 +203,7 @@ func (model *SStandaloneResourceBase) ValidateUpdateData(ctx context.Context, us
if strings.ContainsAny(input.Name, "\n\r\t") {
return input, errors.Wrap(httperrors.ErrInputParameter, "name should not contains any \\n\\r\\t")
}
err = alterNameValidator(model.GetIStandaloneModel(), input.Name)
err = alterNameValidator(ctx, model.GetIStandaloneModel(), input.Name)
if err != nil {
return input, errors.Wrap(err, "alterNameValidator")
}
+3 -3
View File
@@ -100,13 +100,13 @@ func (manager *SStandaloneAnonResourceBaseManager) FilterByNotId(q *sqlchemy.SQu
return q.NotEquals("id", idStr)
}
func (manager *SStandaloneAnonResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SStandaloneAnonResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if userCred != nil {
result := policy.PolicyManager.Allow(scope, userCred, consts.GetServiceType(), man.KeywordPlural(), policy.PolicyActionList)
if !result.ObjectTags.IsEmpty() {
policyTagFilters := tagutils.STagFilters{}
policyTagFilters.AddFilters(result.ObjectTags)
q = ObjectIdQueryWithTagFilters(q, "id", man.Keyword(), policyTagFilters)
q = ObjectIdQueryWithTagFilters(ctx, q, "id", man.Keyword(), policyTagFilters)
}
}
return q
@@ -153,7 +153,7 @@ func (manager *SStandaloneAnonResourceBaseManager) ListItemFilter(
q = q.In("id", input.Ids)
}
q = manager.SMetadataResourceBaseModelManager.ListItemFilter(manager.GetIModelManager(), q, input.MetadataResourceListInput)
q = manager.SMetadataResourceBaseModelManager.ListItemFilter(ctx, manager.GetIModelManager(), q, input.MetadataResourceListInput)
return q, nil
}
@@ -60,7 +60,7 @@ func (manager *SStatusDomainLevelUserResourceBaseManager) ValidateCreateData(ctx
return input, nil
}
func (manager *SStatusDomainLevelUserResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SStatusDomainLevelUserResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject, rbacscope.ScopeUser:
+1 -1
View File
@@ -149,7 +149,7 @@ func (self *STask) GetOwnerId() mcclient.IIdentityProvider {
return &owner
}
func (manager *STaskManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *STaskManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject:
+5 -5
View File
@@ -125,7 +125,7 @@ func (manager *SUserResourceBaseManager) FetchCustomizeColumns(
return rows
}
func (manager *SUserResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SUserResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
if scope == rbacscope.ScopeUser {
if len(owner.GetUserId()) > 0 {
@@ -149,12 +149,12 @@ func (manager *SUserResourceBaseManager) GetIUserModelManager() IUserModelManage
return manager.GetVirtualObject().(IUserModelManager)
}
func (manager *SUserResourceBaseManager) FetchByName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(manager, userCred, idStr)
func (manager *SUserResourceBaseManager) FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(ctx, manager, userCred, idStr)
}
func (manager *SUserResourceBaseManager) FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(manager, userCred, idStr)
func (manager *SUserResourceBaseManager) FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(ctx, manager, userCred, idStr)
}
func (manager *SUserResourceBaseManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input apis.UserResourceCreateInput) (apis.UserResourceCreateInput, error) {
+3 -3
View File
@@ -59,12 +59,12 @@ func (manager *SVirtualJointResourceBaseManager) AllowAttach(ctx context.Context
return false
}
func (manager *SVirtualJointResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SVirtualJointResourceBaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
masterQ := manager.GetMasterManager().Query("id")
masterQ = manager.GetMasterManager().FilterByOwner(masterQ, manager.GetMasterManager(), userCred, owner, scope)
masterQ = manager.GetMasterManager().FilterByOwner(ctx, masterQ, manager.GetMasterManager(), userCred, owner, scope)
slaveQ := manager.GetSlaveManager().Query("id")
slaveQ = manager.GetSlaveManager().FilterByOwner(slaveQ, manager.GetSlaveManager(), userCred, owner, scope)
slaveQ = manager.GetSlaveManager().FilterByOwner(ctx, slaveQ, manager.GetSlaveManager(), userCred, owner, scope)
iManager := manager.GetIJointModelManager()
q = q.In(iManager.GetMasterFieldName(), masterQ.SubQuery())
q = q.In(iManager.GetSlaveFieldName(), slaveQ.SubQuery())
+5 -5
View File
@@ -213,12 +213,12 @@ func (manager *SVirtualResourceBaseManager) FilterBySystemAttributes(q *sqlchemy
return q
}
func (manager *SVirtualResourceBaseManager) FetchByName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(manager, userCred, idStr)
func (manager *SVirtualResourceBaseManager) FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByName(ctx, manager, userCred, idStr)
}
func (manager *SVirtualResourceBaseManager) FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(manager, userCred, idStr)
func (manager *SVirtualResourceBaseManager) FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error) {
return FetchByIdOrName(ctx, manager, userCred, idStr)
}
func (manager *SVirtualResourceBaseManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input apis.VirtualResourceCreateInput) (apis.VirtualResourceCreateInput, error) {
@@ -380,7 +380,7 @@ func (model *SVirtualResourceBase) PerformChangeOwner(ctx context.Context, userC
}
q := manager.Query().Equals("name", model.GetName())
q = manager.FilterByOwner(q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterByOwner(ctx, q, manager, userCred, ownerId, manager.NamespaceScope())
q = manager.FilterBySystemAttributes(q, nil, nil, manager.ResourceScope())
q = q.NotEquals("id", model.GetId())
cnt, err := q.CountWithError()
+4 -2
View File
@@ -15,6 +15,8 @@
package validators
import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/sqlchemy"
@@ -27,7 +29,7 @@ type ModelFilterOptions struct {
OwnerId mcclient.IIdentityProvider
}
func ApplyModelFilters(q *sqlchemy.SQuery, data *jsonutils.JSONDict, opts []*ModelFilterOptions) (*sqlchemy.SQuery, error) {
func ApplyModelFilters(ctx context.Context, q *sqlchemy.SQuery, data *jsonutils.JSONDict, opts []*ModelFilterOptions) (*sqlchemy.SQuery, error) {
var err error
for _, opt := range opts {
v := NewModelIdOrNameValidator(
@@ -36,7 +38,7 @@ func ApplyModelFilters(q *sqlchemy.SQuery, data *jsonutils.JSONDict, opts []*Mod
opt.OwnerId,
)
v.Optional(true)
q, err = v.QueryFilter(q, data)
q, err = v.QueryFilter(ctx, q, data)
if err != nil {
return nil, err
}
+23 -22
View File
@@ -21,6 +21,7 @@ package validators
// uri
import (
"context"
"database/sql"
"math"
"net"
@@ -42,10 +43,10 @@ import (
"yunion.io/x/onecloud/pkg/util/choices"
)
type ValidatorFunc func(*jsonutils.JSONDict) error
type ValidatorFunc func(context.Context, *jsonutils.JSONDict) error
type IValidatorBase interface {
Validate(data *jsonutils.JSONDict) error
Validate(ctx context.Context, data *jsonutils.JSONDict) error
}
type IValidator interface {
@@ -144,7 +145,7 @@ func NewIPv4PrefixValidator(key string) *ValidatorIPv4Prefix {
return v
}
func (v *ValidatorIPv4Prefix) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorIPv4Prefix) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -197,7 +198,7 @@ func (v *ValidatorIntChoices) getValue() interface{} {
return v.Value
}
func (v *ValidatorIntChoices) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorIntChoices) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -241,7 +242,7 @@ func (v *ValidatorStringChoices) getValue() interface{} {
return v.Value
}
func (v *ValidatorStringChoices) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorStringChoices) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -325,7 +326,7 @@ func (v *ValidatorStringMultiChoices) getValue() interface{} {
return v.Value
}
func (v *ValidatorStringMultiChoices) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorStringMultiChoices) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -355,7 +356,7 @@ func (v *ValidatorBool) getValue() interface{} {
func (v *ValidatorBool) Default(i bool) IValidator {
return v.Validator.Default(i)
}
func (v *ValidatorBool) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorBool) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -393,7 +394,7 @@ func (v *ValidatorRange) Default(i int64) IValidator {
}
panic("invalid default for " + v.Key)
}
func (v *ValidatorRange) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorRange) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -519,7 +520,7 @@ func (v *ValidatorModelIdOrName) AllowEmpty(b bool) *ValidatorModelIdOrName {
return v
}
func (v *ValidatorModelIdOrName) validate(data *jsonutils.JSONDict) error {
func (v *ValidatorModelIdOrName) validate(ctx context.Context, data *jsonutils.JSONDict) error {
if !data.Contains(v.Key) && data.Contains(v.modelIdKey) {
// a hack when validator is used solely for fetching model
// object. This can happen when input json data was validated
@@ -550,7 +551,7 @@ func (v *ValidatorModelIdOrName) validate(data *jsonutils.JSONDict) error {
return newModelManagerError(v.ModelKeyword)
}
v.ModelManager = modelManager
model, err := modelManager.FetchByIdOrName(v, modelIdOrName)
model, err := modelManager.FetchByIdOrName(ctx, v, modelIdOrName)
if err != nil {
if err == sql.ErrNoRows {
return newModelNotFoundError(v.ModelKeyword, modelIdOrName, err)
@@ -567,8 +568,8 @@ func (v *ValidatorModelIdOrName) validate(data *jsonutils.JSONDict) error {
return nil
}
func (v *ValidatorModelIdOrName) Validate(data *jsonutils.JSONDict) error {
err := v.validate(data)
func (v *ValidatorModelIdOrName) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
err := v.validate(ctx, data)
if err != nil {
return err
}
@@ -587,8 +588,8 @@ func (v *ValidatorModelIdOrName) Validate(data *jsonutils.JSONDict) error {
return nil
}
func (v *ValidatorModelIdOrName) QueryFilter(q *sqlchemy.SQuery, data *jsonutils.JSONDict) (*sqlchemy.SQuery, error) {
err := v.validate(data)
func (v *ValidatorModelIdOrName) QueryFilter(ctx context.Context, q *sqlchemy.SQuery, data *jsonutils.JSONDict) (*sqlchemy.SQuery, error) {
err := v.validate(ctx, data)
if err != nil {
if IsModelNotFoundError(err) {
// hack
@@ -620,7 +621,7 @@ func (v *ValidatorRegexp) getValue() interface{} {
return v.Value
}
func (v *ValidatorRegexp) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorRegexp) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -697,8 +698,8 @@ func (v *ValidatorHostPort) OptionalPort(optionalPort bool) *ValidatorHostPort {
return v
}
func (v *ValidatorHostPort) Validate(data *jsonutils.JSONDict) error {
err := v.ValidatorRegexp.Validate(data)
func (v *ValidatorHostPort) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
err := v.ValidatorRegexp.Validate(ctx, data)
if err != nil {
return err
}
@@ -753,7 +754,7 @@ func (v *ValidatorStruct) getValue() interface{} {
return v.Value
}
func (v *ValidatorStruct) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorStruct) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -762,7 +763,7 @@ func (v *ValidatorStruct) Validate(data *jsonutils.JSONDict) error {
return newGeneralError(v.Key, err)
}
if valueValidator, ok := v.Value.(IValidatorBase); ok {
err = valueValidator.Validate(data)
err = valueValidator.Validate(ctx, data)
if err != nil {
return newInvalidStructError(v.Key, err)
}
@@ -803,7 +804,7 @@ func (v *ValidatorIPv4Addr) setDefault(data *jsonutils.JSONDict) bool {
return true
}
func (v *ValidatorIPv4Addr) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorIPv4Addr) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -827,12 +828,12 @@ func NewIPv4AddrValidator(key string) *ValidatorIPv4Addr {
return v
}
var ValidateModel = func(userCred mcclient.TokenCredential, manager db.IStandaloneModelManager, id *string) (db.IModel, error) {
var ValidateModel = func(ctx context.Context, userCred mcclient.TokenCredential, manager db.IStandaloneModelManager, id *string) (db.IModel, error) {
if len(*id) == 0 {
return nil, httperrors.NewMissingParameterError(manager.Keyword() + "_id")
}
model, err := manager.FetchByIdOrName(userCred, *id)
model, err := manager.FetchByIdOrName(ctx, userCred, *id)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), *id)
@@ -15,6 +15,7 @@
package validators
import (
"context"
"fmt"
"strings"
@@ -152,7 +153,7 @@ func (v *ValidatorByActor) getValue() interface{} {
return v.Value
}
func (v *ValidatorByActor) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorByActor) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -85,7 +85,7 @@ func (v *ValidatorPEM) setDefault(data *jsonutils.JSONDict) bool {
return false
}
func (v *ValidatorPEM) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorPEM) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -170,7 +170,7 @@ func (v *ValidatorCertificate) setCertificates(certs []*x509.Certificate, data *
v.Certificates = certs
}
func (v *ValidatorCertificate) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorCertificate) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -341,7 +341,7 @@ func (v *ValidatorPrivateKey) setPrivateKey(pkey crypto.PrivateKey, data *jsonut
v.PrivateKey = pkey
}
func (v *ValidatorPrivateKey) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorPrivateKey) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -392,13 +392,13 @@ func NewCertKeyValidator(cert, key string) *ValidatorCertKey {
}
}
func (v *ValidatorCertKey) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorCertKey) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
keyV := map[string]IValidator{
"certificate": v.ValidatorCertificate,
"private_key": v.ValidatorPrivateKey,
}
for _, v := range keyV {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return err
}
}
@@ -15,6 +15,7 @@
package validators
import (
"context"
"testing"
"yunion.io/x/jsonutils"
@@ -113,7 +114,7 @@ Oycn3Dy2jpdE7SpoBCt3HsIhra8a6h7BcCQ87UwObqTsdLe+7/oD
ValidatorPrivateKey: tt.fields.ValidatorPrivateKey,
certPubKeyAlgo: tt.fields.certPubKeyAlgo,
}
if err := v.Validate(tt.args.data); (err != nil) != tt.wantErr {
if err := v.Validate(context.Background(), tt.args.data); (err != nil) != tt.wantErr {
t.Errorf("ValidateCertKey.Validator() error = %v, wantErr %v", err, tt.wantErr)
}
})
@@ -15,6 +15,8 @@
package validators
import (
"context"
"golang.org/x/crypto/ssh"
"yunion.io/x/jsonutils"
@@ -55,7 +57,7 @@ func (v *ValidatorSSHKey) getValue() interface{} {
return v.Value
}
func (v *ValidatorSSHKey) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorSSHKey) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -15,6 +15,8 @@
package validators
import (
"context"
"yunion.io/x/jsonutils"
)
@@ -61,7 +63,7 @@ func (v *ValidatorStringLen) getValue() interface{} {
return v.Value
}
func (v *ValidatorStringLen) Validate(data *jsonutils.JSONDict) error {
func (v *ValidatorStringLen) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
if err, isSet := v.Validator.validateEx(data); err != nil || !isSet {
return err
}
@@ -21,6 +21,7 @@ package validators
// - invalid default for string choice, range
import (
"context"
"net"
"reflect"
"testing"
@@ -79,7 +80,7 @@ func testS(t *testing.T, v IValidator, c *C) {
j, _ := jsonutils.ParseString(c.In)
jd := j.(*jsonutils.JSONDict)
err := v.Validate(jd)
err := v.Validate(context.Background(), jd)
if err != nil {
verr, ok := err.(*ValidateError)
if ok {
@@ -777,7 +778,7 @@ type TestStruct struct {
type TestVStruct TestStruct
func (v *TestVStruct) Validate(data *jsonutils.JSONDict) error {
func (v *TestVStruct) Validate(ctx context.Context, data *jsonutils.JSONDict) error {
switch v.Name {
case "bad":
return newInvalidValueError("Name", v.Name)
+2 -2
View File
@@ -196,8 +196,8 @@ func (self *SCloudevent) GetOwnerId() mcclient.IIdentityProvider {
return &owner
}
func (manager *SCloudeventManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return manager.SDomainizedResourceBaseManager.FilterByOwner(q, man, userCred, owner, scope)
func (manager *SCloudeventManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return manager.SDomainizedResourceBaseManager.FilterByOwner(ctx, q, man, userCred, owner, scope)
}
func (manager *SCloudeventManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
+1 -1
View File
@@ -41,7 +41,7 @@ type SCloudaccountResourceBase struct {
func (manager *SCloudaccountResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query api.CloudaccountResourceListInput) (*sqlchemy.SQuery, error) {
if len(query.Cloudaccount) > 0 {
account, err := CloudaccountManager.FetchByIdOrName(nil, query.Cloudaccount)
account, err := CloudaccountManager.FetchByIdOrName(ctx, nil, query.Cloudaccount)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudaccount", query.Cloudaccount)
+1 -1
View File
@@ -120,7 +120,7 @@ func (manager *SCloudgroupJointsManager) ListItemFilter(
}
if len(query.Cloudgroup) > 0 {
group, err := CloudgroupManager.FetchByIdOrName(nil, query.Cloudgroup)
group, err := CloudgroupManager.FetchByIdOrName(ctx, nil, query.Cloudgroup)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudgroup", query.Cloudgroup)
+1 -1
View File
@@ -48,7 +48,7 @@ func (self *SCloudgroupResourceBase) GetCloudgroup() (*SCloudgroup, error) {
func (manager *SCloudgroupResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, groupCred mcclient.TokenCredential, query api.CloudgroupResourceListInput) (*sqlchemy.SQuery, error) {
if len(query.CloudgroupId) > 0 {
group, err := CloudgroupManager.FetchByIdOrName(nil, query.CloudgroupId)
group, err := CloudgroupManager.FetchByIdOrName(ctx, nil, query.CloudgroupId)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudgroup", query.CloudgroupId)
+2 -2
View File
@@ -71,7 +71,7 @@ func (manager *SCloudpolicycacheManager) ListItemFilter(ctx context.Context, q *
return nil, err
}
if len(query.CloudpolicyId) > 0 {
policy, err := CloudpolicyManager.FetchByIdOrName(nil, query.CloudpolicyId)
policy, err := CloudpolicyManager.FetchByIdOrName(ctx, nil, query.CloudpolicyId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudpolicy", query.CloudpolicyId)
@@ -81,7 +81,7 @@ func (manager *SCloudpolicycacheManager) ListItemFilter(ctx context.Context, q *
q = q.Equals("cloudpolicy_id", policy.GetId())
}
if len(query.CloudaccountId) > 0 {
account, err := CloudaccountManager.FetchByIdOrName(nil, query.CloudaccountId)
account, err := CloudaccountManager.FetchByIdOrName(ctx, nil, query.CloudaccountId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudaccount", query.CloudaccountId)
+1 -1
View File
@@ -40,7 +40,7 @@ type SCloudpolicyResourceBase struct {
func (manager *SCloudpolicyResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, policyCred mcclient.TokenCredential, query api.CloudpolicyResourceListInput) (*sqlchemy.SQuery, error) {
if len(query.Cloudpolicy) > 0 {
policy, err := CloudpolicyManager.FetchByIdOrName(nil, query.Cloudpolicy)
policy, err := CloudpolicyManager.FetchByIdOrName(ctx, nil, query.Cloudpolicy)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudpolicy", query.Cloudpolicy)
+1 -1
View File
@@ -40,7 +40,7 @@ type SCloudproviderResourceBase struct {
func (manager *SCloudproviderResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query api.CloudproviderResourceListInput) (*sqlchemy.SQuery, error) {
if len(query.Cloudprovider) > 0 {
provider, err := CloudproviderManager.FetchByIdOrName(nil, query.Cloudprovider)
provider, err := CloudproviderManager.FetchByIdOrName(ctx, nil, query.Cloudprovider)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudprovider", query.Cloudprovider)
+1 -1
View File
@@ -48,7 +48,7 @@ func (self *SClouduserJointsBase) GetClouduser() (*SClouduser, error) {
func (manager *SClouduserResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query api.ClouduserResourceListInput) (*sqlchemy.SQuery, error) {
if len(query.Clouduser) > 0 {
user, err := ClouduserManager.FetchByIdOrName(nil, query.Clouduser)
user, err := ClouduserManager.FetchByIdOrName(ctx, nil, query.Clouduser)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("clouduser", query.Clouduser)
+1 -1
View File
@@ -92,7 +92,7 @@ func (manager *SSAMLProviderManager) ValidateCreateData(ctx context.Context, use
if len(input.CloudaccountId) == 0 {
return input, httperrors.NewMissingParameterError("cloudaccount_id")
}
_, err := validators.ValidateModel(userCred, CloudaccountManager, &input.CloudaccountId)
_, err := validators.ValidateModel(ctx, userCred, CloudaccountManager, &input.CloudaccountId)
if err != nil {
return input, err
}
+2 -2
View File
@@ -137,12 +137,12 @@ func (manager *SSamluserManager) ValidateCreateData(ctx context.Context, userCre
input.Name = userCred.GetUserName()
}
}
_group, err := validators.ValidateModel(userCred, CloudgroupManager, &input.CloudgroupId)
_group, err := validators.ValidateModel(ctx, userCred, CloudgroupManager, &input.CloudgroupId)
if err != nil {
return input, err
}
group := _group.(*SCloudgroup)
_account, err := validators.ValidateModel(userCred, CloudaccountManager, &input.CloudaccountId)
_account, err := validators.ValidateModel(ctx, userCred, CloudaccountManager, &input.CloudaccountId)
if err != nil {
return input, err
}
+1 -1
View File
@@ -90,7 +90,7 @@ func (man *SIfaceManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery
return nil, errors.Wrap(err, "SStandaloneResourceBaseManager.ListItemFilter")
}
data := query.(*jsonutils.JSONDict)
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{
{Key: "router", ModelKeyword: "router", OwnerId: userCred},
})
if err != nil {
+5 -5
View File
@@ -86,7 +86,7 @@ func (man *SRouterManager) ValidateCreateData(ctx context.Context, userCred mccl
validators.NewBoolValidator("realize_rules").Default(true),
}
for _, v := range vs {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -133,7 +133,7 @@ func (router *SRouter) ValidateUpdateData(ctx context.Context, userCred mcclient
}
for _, v := range vs {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return input, err
}
}
@@ -183,7 +183,7 @@ func (router *SRouter) PerformJoinMeshNetwork(ctx context.Context, userCred mccl
return nil, httperrors.NewBadRequestError("expecting json dict")
}
for _, v := range vs {
if err := v.Validate(jd); err != nil {
if err := v.Validate(ctx, jd); err != nil {
return nil, err
}
}
@@ -206,7 +206,7 @@ func (router *SRouter) PerformLeaveMeshNetwork(ctx context.Context, userCred mcc
return nil, httperrors.NewBadRequestError("expecting json dict")
}
mnV := validators.NewModelIdOrNameValidator("mesh_network", "meshnetwork", userCred)
if err := mnV.Validate(jd); err != nil {
if err := mnV.Validate(ctx, jd); err != nil {
return nil, err
}
mn := mnV.Model.(*SMeshNetwork)
@@ -222,7 +222,7 @@ func (router *SRouter) PerformRegisterIfname(ctx context.Context, userCred mccli
return nil, httperrors.NewBadRequestError("expecting json dict")
}
ifnameV := validators.NewRegexpValidator("ifname", regexpIfname)
if err := ifnameV.Validate(jd); err != nil {
if err := ifnameV.Validate(ctx, jd); err != nil {
return nil, err
}
_, err := IfaceManager.addIface(ctx, userCred, router, ifnameV.Value)
+4 -4
View File
@@ -82,7 +82,7 @@ func (man *SRouteManager) ValidateCreateData(ctx context.Context, userCred mccli
ifaceV,
}
for _, v := range vs {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -103,7 +103,7 @@ func (man *SRouteManager) ValidateCreateData(ctx context.Context, userCred mccli
data.Set("router_id", jsonutils.NewString(routerId))
data.Set("ifname", jsonutils.NewString(iface.Ifname))
routerV := validators.NewModelIdOrNameValidator("router", "router", ownerId)
if err := routerV.Validate(data); err != nil {
if err := routerV.Validate(ctx, data); err != nil {
return nil, err
}
if !data.Contains("name") {
@@ -127,7 +127,7 @@ func (man *SRouteManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery
return nil, err
}
data := query.(*jsonutils.JSONDict)
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{
{Key: "router", ModelKeyword: "router", OwnerId: userCred},
{Key: "iface", ModelKeyword: "iface", OwnerId: userCred},
})
@@ -150,7 +150,7 @@ func (route *SRoute) ValidateUpdateData(ctx context.Context, userCred mcclient.T
}
for _, v := range vs {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return input, err
}
}
+3 -3
View File
@@ -144,7 +144,7 @@ func (man *SRuleManager) validateData(ctx context.Context, userCred mcclient.Tok
if isUpdate {
v.Optional(true)
}
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return err
}
}
@@ -177,7 +177,7 @@ func (man *SRuleManager) validateData(ctx context.Context, userCred mcclient.Tok
if !isUpdate {
prioV.Default(prioDefault)
}
if err := prioV.Validate(data); err != nil {
if err := prioV.Validate(ctx, data); err != nil {
return err
}
}
@@ -225,7 +225,7 @@ func (man *SRuleManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery,
return nil, errors.Wrap(err, "SStandaloneResourceBaseManager.ListItemFilter")
}
data := query.(*jsonutils.JSONDict)
q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{
{Key: "router", ModelKeyword: "router", OwnerId: userCred},
})
if err != nil {
+3 -3
View File
@@ -215,7 +215,7 @@ func (man *SForwardManager) PerformCreateFromServer(ctx context.Context, userCre
validators.NewNonNegativeValidator("last_seen_timeout").Optional(true),
} {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -285,7 +285,7 @@ func (man *SForwardManager) ValidateCreateData(ctx context.Context, userCred mcc
validators.NewNonNegativeValidator("last_seen_timeout").Optional(true),
} {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -322,7 +322,7 @@ func (fwd *SForward) ValidateUpdateData(ctx context.Context, userCred mcclient.T
validators.NewNonNegativeValidator("last_seen_timeout"),
} {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
+2 -2
View File
@@ -58,7 +58,7 @@ func (man *SProxyAgentManager) ValidateCreateData(ctx context.Context, userCred
validators.NewIPv4AddrValidator("advertise_addr").Optional(true),
}
for _, v := range vs {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -72,7 +72,7 @@ func (proxyagent *SProxyAgent) ValidateUpdateData(ctx context.Context, userCred
}
for _, v := range vs {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
+3 -3
View File
@@ -103,7 +103,7 @@ func (man *SProxyEndpointManager) PerformCreateFromServer(ctx context.Context, u
return nil, errors.Wrapf(err, "db.GenerateName")
}
}
if err := db.NewNameValidator(man, userCred, name, nil); err != nil {
if err := db.NewNameValidator(ctx, man, userCred, name, nil); err != nil {
return nil, httperrors.NewGeneralError(err)
}
@@ -187,7 +187,7 @@ func (man *SProxyEndpointManager) ValidateCreateData(
validators.NewIPv4AddrValidator("intranet_ip_addr"),
}
for _, v := range vs {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -229,7 +229,7 @@ func (proxyendpoint *SProxyEndpoint) ValidateUpdateData(ctx context.Context, use
}
for _, v := range vs {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return input, err
}
}
+3 -3
View File
@@ -61,7 +61,7 @@ func (man *SProxyMatchManager) ValidateCreateData(ctx context.Context, userCred
matchScopeV,
endpointV,
} {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -76,7 +76,7 @@ func (pm *SProxyMatch) ValidateUpdateData(ctx context.Context, userCred mcclient
endpointV,
} {
v.Optional(true)
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
@@ -126,7 +126,7 @@ func (man *SProxyMatchManager) ListItemFilter(
}
if len(input.ProxyEndpointId) > 0 {
_, err := validators.ValidateModel(userCred, ProxyEndpointManager, &input.ProxyEndpointId)
_, err := validators.ValidateModel(ctx, userCred, ProxyEndpointManager, &input.ProxyEndpointId)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -191,7 +191,7 @@ func (self *SAwsGuestDriver) ValidateCreateData(ctx context.Context, userCred mc
if len(input.Eip) > 0 || input.EipBw > 0 {
// 未明确指定network时,由调度器进行调度,跳过support_eip检查
if len(input.Networks) > 0 && len(input.Networks[0].Network) > 0 {
inetwork, err := db.FetchByIdOrName(models.NetworkManager, userCred, input.Networks[0].Network)
inetwork, err := db.FetchByIdOrName(ctx, models.NetworkManager, userCred, input.Networks[0].Network)
if err != nil {
return nil, errors.Wrap(err, "SAwsGuestDriver.ValidateCreateData.Networks.FetchByIdOrName")
}
+2 -2
View File
@@ -205,9 +205,9 @@ func (self *SBaremetalGuestDriver) Attach2RandomNetwork(guest *models.SGuest, ct
}
var net *models.SNetwork
if netConfig.Private {
net, _ = wire.GetCandidatePrivateNetwork(userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
net, _ = wire.GetCandidatePrivateNetwork(ctx, userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
} else {
net, _ = wire.GetCandidateAutoAllocNetwork(userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
net, _ = wire.GetCandidateAutoAllocNetwork(ctx, userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
}
if net != nil {
netsAvaiable = append(netsAvaiable, *net)
+2 -2
View File
@@ -764,7 +764,7 @@ func (self *SKVMGuestDriver) IsSupportLiveMigrate() bool {
}
func checkAssignHost(ctx context.Context, userCred mcclient.TokenCredential, preferHost string) error {
iHost, _ := models.HostManager.FetchByIdOrName(userCred, preferHost)
iHost, _ := models.HostManager.FetchByIdOrName(ctx, userCred, preferHost)
if iHost == nil {
return httperrors.NewBadRequestError("Host %s not found", preferHost)
}
@@ -993,7 +993,7 @@ func (self *SKVMGuestDriver) ValidateCreateData(ctx context.Context, userCred mc
if input.Secgroups[i] == api.SECGROUP_DEFAULT_ID {
continue
}
secObj, err := validators.ValidateModel(userCred, models.SecurityGroupManager, &input.Secgroups[i])
secObj, err := validators.ValidateModel(ctx, userCred, models.SecurityGroupManager, &input.Secgroups[i])
if err != nil {
return nil, err
}
+2 -2
View File
@@ -320,7 +320,7 @@ func (drv *SManagedVirtualizedGuestDriver) ValidateCreateData(ctx context.Contex
}
var vpc *models.SVpc = nil
for _, network := range input.Networks {
netObj, err := validators.ValidateModel(userCred, models.NetworkManager, &network.Network)
netObj, err := validators.ValidateModel(ctx, userCred, models.NetworkManager, &network.Network)
if err == nil {
net := netObj.(*models.SNetwork)
vpc, err = net.GetVpc()
@@ -336,7 +336,7 @@ func (drv *SManagedVirtualizedGuestDriver) ValidateCreateData(ctx context.Contex
if gotypes.IsNil(vpc) {
return nil, httperrors.NewMissingParameterError("nets")
}
secObj, err := validators.ValidateModel(userCred, models.SecurityGroupManager, &input.Secgroups[i])
secObj, err := validators.ValidateModel(ctx, userCred, models.SecurityGroupManager, &input.Secgroups[i])
if err != nil {
return nil, err
}
@@ -15,6 +15,8 @@
package types
import (
"context"
"yunion.io/x/jsonutils"
compute_api "yunion.io/x/onecloud/pkg/apis/compute"
@@ -37,7 +39,7 @@ type OpenForwardResponse struct {
Port int `json:"port"`
}
func NewOpenForwardRequestFromJSON(data jsonutils.JSONObject) (*OpenForwardRequest, error) {
func NewOpenForwardRequestFromJSON(ctx context.Context, data jsonutils.JSONObject) (*OpenForwardRequest, error) {
dict, ok := data.(*jsonutils.JSONDict)
if !ok {
return nil, httperrors.ErrInputParameter
@@ -52,7 +54,7 @@ func NewOpenForwardRequestFromJSON(data jsonutils.JSONObject) (*OpenForwardReque
portV,
addrV.Optional(true),
} {
if err := v.Validate(dict); err != nil {
if err := v.Validate(ctx, dict); err != nil {
return nil, err
}
}
@@ -84,7 +86,7 @@ type CloseForwardResponse struct {
ProxyPort int `json:"port"`
}
func NewCloseForwardRequestFromJSON(data jsonutils.JSONObject) (*CloseForwardRequest, error) {
func NewCloseForwardRequestFromJSON(ctx context.Context, data jsonutils.JSONObject) (*CloseForwardRequest, error) {
dict, ok := data.(*jsonutils.JSONDict)
if !ok {
return nil, httperrors.ErrInputParameter
@@ -99,7 +101,7 @@ func NewCloseForwardRequestFromJSON(data jsonutils.JSONObject) (*CloseForwardReq
proxyAddrV,
proxyPortV,
} {
if err := v.Validate(dict); err != nil {
if err := v.Validate(ctx, dict); err != nil {
return nil, err
}
}
@@ -126,7 +128,7 @@ type ListForwardResponse struct {
Forwards []OpenForwardResponse `json:"forwards"`
}
func NewListForwardRequestFromJSON(data jsonutils.JSONObject) (*ListForwardRequest, error) {
func NewListForwardRequestFromJSON(ctx context.Context, data jsonutils.JSONObject) (*ListForwardRequest, error) {
dict, ok := data.(*jsonutils.JSONDict)
if !ok {
return nil, httperrors.ErrInputParameter
@@ -141,7 +143,7 @@ func NewListForwardRequestFromJSON(data jsonutils.JSONObject) (*ListForwardReque
portV.Optional(true),
addrV.Optional(true),
} {
if err := v.Validate(dict); err != nil {
if err := v.Validate(ctx, dict); err != nil {
return nil, err
}
}
+2 -2
View File
@@ -147,9 +147,9 @@ func (self *SVirtualizedGuestDriver) Attach2RandomNetwork(guest *models.SGuest,
var net *models.SNetwork
if netConfig.Private {
net, _ = wire.GetCandidatePrivateNetwork(userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
net, _ = wire.GetCandidatePrivateNetwork(ctx, userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
} else {
net, _ = wire.GetCandidateAutoAllocNetwork(userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
net, _ = wire.GetCandidateAutoAllocNetwork(ctx, userCred, userCred, models.NetworkManager.AllowScope(userCred), netConfig.Exit, netTypes)
}
if net != nil {
netsAvaiable = append(netsAvaiable, *net)
+1 -1
View File
@@ -82,7 +82,7 @@ func (manager *SAccessGroupResourceBaseManager) ListItemFilter(
query api.AccessGroupFilterListInput,
) (*sqlchemy.SQuery, error) {
if len(query.AccessGroupId) > 0 {
_, err := validators.ValidateModel(userCred, AccessGroupManager, &query.AccessGroupId)
_, err := validators.ValidateModel(ctx, userCred, AccessGroupManager, &query.AccessGroupId)
if err != nil {
return nil, err
}
+3 -3
View File
@@ -96,9 +96,9 @@ func (manager *SAccessGroupRuleManager) FetchOwnerId(ctx context.Context, data j
return db.FetchDomainInfo(ctx, data)
}
func (manager *SAccessGroupRuleManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SAccessGroupRuleManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
sq := AccessGroupManager.Query("id")
sq = db.SharableManagerFilterByOwner(AccessGroupManager, sq, userCred, owner, scope)
sq = db.SharableManagerFilterByOwner(ctx, AccessGroupManager, sq, userCred, owner, scope)
return q.In("access_group_id", sq.SubQuery())
}
@@ -209,7 +209,7 @@ func (manager *SAccessGroupRuleManager) ValidateCreateData(ctx context.Context,
if len(input.AccessGroupId) == 0 {
return input, httperrors.NewMissingParameterError("access_group_id")
}
_ag, err := validators.ValidateModel(userCred, AccessGroupManager, &input.AccessGroupId)
_ag, err := validators.ValidateModel(ctx, userCred, AccessGroupManager, &input.AccessGroupId)
if err != nil {
return input, err
}
+2 -2
View File
@@ -206,12 +206,12 @@ func (manager *SAccessGroupManager) ValidateCreateData(ctx context.Context, user
return nil, httperrors.NewMissingParameterError("cloudregion_id")
}
_, err = validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId)
_, err = validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId)
if err != nil {
return nil, err
}
_, err = validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId)
_, err = validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId)
if err != nil {
return nil, err
}
+2 -2
View File
@@ -94,7 +94,7 @@ func (self *SBaremetalagent) ValidateUpdateData(ctx context.Context, userCred mc
}
}
if len(input.ZoneId) > 0 {
_, input.ZoneResourceInput, err = ValidateZoneResourceInput(userCred, input.ZoneResourceInput)
_, input.ZoneResourceInput, err = ValidateZoneResourceInput(ctx, userCred, input.ZoneResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateZoneResourceInput")
}
@@ -122,7 +122,7 @@ func (manager *SBaremetalagentManager) ValidateCreateData(ctx context.Context, u
if len(input.ZoneId) == 0 {
return input, errors.Wrap(httperrors.ErrMissingParameter, "zone/zone_id")
}
_, input.ZoneResourceInput, err = ValidateZoneResourceInput(userCred, input.ZoneResourceInput)
_, input.ZoneResourceInput, err = ValidateZoneResourceInput(ctx, userCred, input.ZoneResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateZoneResourceInput")
}
+4 -4
View File
@@ -441,12 +441,12 @@ func (manager *SBucketManager) ValidateCreateData(
) (api.BucketCreateInput, error) {
var err error
var cloudRegionV *SCloudregion
cloudRegionV, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(userCred, input.CloudregionResourceInput)
cloudRegionV, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(ctx, userCred, input.CloudregionResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateCloudregionResourceInput")
}
var managerV *SCloudprovider
managerV, input.CloudproviderResourceInput, err = ValidateCloudproviderResourceInput(userCred, input.CloudproviderResourceInput)
managerV, input.CloudproviderResourceInput, err = ValidateCloudproviderResourceInput(ctx, userCred, input.CloudproviderResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateCloudproviderResourceInput")
}
@@ -1545,10 +1545,10 @@ type SBucketUsages struct {
DiskUsedRate float64
}
func (manager *SBucketManager) TotalCount(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) SBucketUsages {
func (manager *SBucketManager) TotalCount(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) SBucketUsages {
usage := SBucketUsages{}
bq := manager.Query()
bq = db.ObjectIdQueryWithPolicyResult(bq, manager, policyResult)
bq = db.ObjectIdQueryWithPolicyResult(ctx, bq, manager, policyResult)
bq = scopeOwnerIdFilter(bq, scope, ownerId)
buckets := bq.SubQuery()
bucketsQ := buckets.Query(
+5 -5
View File
@@ -383,7 +383,7 @@ func (manager *SCachedimageManager) GetImageById(ctx context.Context, userCred m
}
func (manager *SCachedimageManager) getImageByName(ctx context.Context, userCred mcclient.TokenCredential, imageId string, refresh bool) (*cloudprovider.SImage, error) {
imgObj, _ := manager.FetchByName(userCred, imageId)
imgObj, _ := manager.FetchByName(ctx, userCred, imageId)
if imgObj != nil {
cachedImage := imgObj.(*SCachedimage)
if !refresh && cachedImage.GetStatus() == cloudprovider.IMAGE_STATUS_ACTIVE && len(cachedImage.GetOSType()) > 0 && !cachedImage.isRefreshSessionExpire() {
@@ -871,7 +871,7 @@ func (manager *SCachedimageManager) ListItemFilter(
if len(query.HostSchedtagId) > 0 {
idFilter = true
schedTagObj, err := SchedtagManager.FetchByIdOrName(userCred, query.HostSchedtagId)
schedTagObj, err := SchedtagManager.FetchByIdOrName(ctx, userCred, query.HostSchedtagId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", SchedtagManager.Keyword(), query.HostSchedtagId)
@@ -888,17 +888,17 @@ func (manager *SCachedimageManager) ListItemFilter(
subq = subq.Snapshot()
subq, err = managedResourceFilterByAccount(subq, query.ManagedResourceListInput, "", nil)
subq, err = managedResourceFilterByAccount(ctx, subq, query.ManagedResourceListInput, "", nil)
if err != nil {
return nil, errors.Wrap(err, "managedResourceFilterByAccount")
}
subq, err = managedResourceFilterByRegion(subq, query.RegionalFilterListInput, "", nil)
subq, err = managedResourceFilterByRegion(ctx, subq, query.RegionalFilterListInput, "", nil)
if err != nil {
return nil, errors.Wrap(err, "_managedResourceFilterByRegion")
}
subq, err = managedResourceFilterByZone(subq, query.ZonalFilterListInput, "", nil)
subq, err = managedResourceFilterByZone(ctx, subq, query.ZonalFilterListInput, "", nil)
if err != nil {
return nil, errors.Wrap(err, "_managedResourceFilterByZone")
}
+32 -31
View File
@@ -156,7 +156,7 @@ type SCapabilities struct {
func GetDiskCapabilities(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, region *SCloudregion, zone *SZone) (SCapabilities, error) {
capa := SCapabilities{}
s1, d1, s2, s3, d2, d3 := getStorageTypes(userCred, region, zone, "")
s1, d1, s2, s3, d2, d3 := getStorageTypes(ctx, userCred, region, zone, "")
capa.StorageTypes, capa.DataStorageTypes = s1, d1
capa.StorageTypes2, capa.StorageTypes3 = s2, s3
capa.DataStorageTypes2, capa.DataStorageTypes3 = d2, d3
@@ -194,7 +194,7 @@ func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, que
}
domainId = ""
}
capa.Hypervisors = getHypervisors(userCred, region, zone, domainId)
capa.Hypervisors = getHypervisors(ctx, userCred, region, zone, domainId)
capa.InstanceCapabilities = []cloudprovider.SInstanceCapability{}
for _, hypervisor := range capa.Hypervisors {
driver := GetDriver(hypervisor)
@@ -204,20 +204,20 @@ func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, que
}
getBrands(region, zone, domainId, &capa)
// capa.Brands, capa.ComputeEngineBrands, capa.NetworkManageBrands, capa.ObjectStorageBrands = a, c, n, o
capa.ResourceTypes = getResourceTypes(userCred, region, zone, domainId)
s1, d1, s2, s3, d2, d3 := getStorageTypes(userCred, region, zone, domainId)
capa.ResourceTypes = getResourceTypes(ctx, userCred, region, zone, domainId)
s1, d1, s2, s3, d2, d3 := getStorageTypes(ctx, userCred, region, zone, domainId)
capa.StorageTypes, capa.DataStorageTypes = s1, d1
capa.StorageTypes2, capa.StorageTypes3 = s2, s3
capa.DataStorageTypes2, capa.DataStorageTypes3 = d2, d3
capa.GPUModels, capa.PCIModelTypes = getIsolatedDeviceInfo(userCred, region, zone, domainId)
capa.GPUModels, capa.PCIModelTypes = getIsolatedDeviceInfo(ctx, userCred, region, zone, domainId)
capa.SchedPolicySupport = isSchedPolicySupported(region, zone)
capa.MinNicCount = getMinNicCount(region, zone)
capa.MaxNicCount = getMaxNicCount(region, zone)
capa.MinDataDiskCount = getMinDataDiskCount(region, zone)
capa.MaxDataDiskCount = getMaxDataDiskCount(region, zone)
capa.DBInstance = getDBInstanceInfo(region, zone)
capa.Usable = isUsable(userCred, ownerId, scope, region, zone)
capa.HostCpuArchs = getHostCpuArchs(userCred, region, zone, domainId)
capa.Usable = isUsable(ctx, userCred, ownerId, scope, region, zone)
capa.HostCpuArchs = getHostCpuArchs(ctx, userCred, region, zone, domainId)
if query == nil {
query = jsonutils.NewDict()
}
@@ -232,7 +232,7 @@ func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, que
}
var err error
serverType := jsonutils.GetAnyString(query, []string{"host_type", "server_type"})
autoAllocNetworkCount, _ := getAutoAllocNetworkCount(userCred, ownerId, scope, region, zone, serverType)
autoAllocNetworkCount, _ := getAutoAllocNetworkCount(ctx, userCred, ownerId, scope, region, zone, serverType)
capa.PublicNetworkCount = autoAllocNetworkCount
capa.AutoAllocNetworkCount = autoAllocNetworkCount
mans := []ISpecModelManager{HostManager, IsolatedDeviceManager}
@@ -240,20 +240,20 @@ func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, que
if err != nil {
return capa, err
}
capa.AvailableHostCount, err = GetAvailableHostCount(userCred, query.(*jsonutils.JSONDict))
capa.AvailableHostCount, err = GetAvailableHostCount(ctx, userCred, query.(*jsonutils.JSONDict))
return capa, err
}
func GetAvailableHostCount(userCred mcclient.TokenCredential, query *jsonutils.JSONDict) (int, error) {
func GetAvailableHostCount(ctx context.Context, userCred mcclient.TokenCredential, query *jsonutils.JSONDict) (int, error) {
zoneStr, _ := query.GetString("zone")
izone, _ := ZoneManager.FetchByIdOrName(userCred, zoneStr)
izone, _ := ZoneManager.FetchByIdOrName(ctx, userCred, zoneStr)
var zoneId string
if izone != nil {
zoneId = izone.GetId()
}
regionStr, _ := query.GetString("region")
iregion, _ := CloudregionManager.FetchByIdOrName(userCred, regionStr)
iregion, _ := CloudregionManager.FetchByIdOrName(ctx, userCred, regionStr)
var regionId string
if iregion != nil {
regionId = iregion.GetId()
@@ -264,7 +264,7 @@ func GetAvailableHostCount(userCred mcclient.TokenCredential, query *jsonutils.J
Equals("host_status", "online").Equals("host_type", api.HOST_TYPE_HYPERVISOR)
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
q = HostManager.FilterByOwner(q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
q = HostManager.FilterByOwner(ctx, q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
}
if len(zoneId) > 0 {
q = q.Equals("zone_id", zoneId)
@@ -480,7 +480,7 @@ func getBrands(region *SCloudregion, zone *SZone, domainId string, capa *SCapabi
return
}
func getHypervisors(userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
func getHypervisors(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
q := HostManager.Query("host_type", "manager_id")
if region != nil {
subq := getRegionZoneSubq(region)
@@ -491,7 +491,7 @@ func getHypervisors(userCred mcclient.TokenCredential, region *SCloudregion, zon
}
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
q = HostManager.FilterByOwner(q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
q = HostManager.FilterByOwner(ctx, q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
/*subq := getDomainManagerSubq(domainId)
q = q.Filter(sqlchemy.OR(
sqlchemy.In(q.Field("manager_id"), subq),
@@ -522,7 +522,7 @@ func getHypervisors(userCred mcclient.TokenCredential, region *SCloudregion, zon
return hypervisors
}
func getResourceTypes(userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
func getResourceTypes(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
q := HostManager.Query("resource_type", "manager_id")
if region != nil {
subq := getRegionZoneSubq(region)
@@ -533,7 +533,7 @@ func getResourceTypes(userCred mcclient.TokenCredential, region *SCloudregion, z
}
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
q = HostManager.FilterByOwner(q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
q = HostManager.FilterByOwner(ctx, q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
/*subq := getDomainManagerSubq(domainId)
q = q.Filter(sqlchemy.OR(
sqlchemy.In(q.Field("manager_id"), subq),
@@ -596,6 +596,7 @@ type SimpleStorageInfo struct {
}
func getStorageTypes(
ctx context.Context,
userCred mcclient.TokenCredential,
region *SCloudregion, zone *SZone, domainId string,
) (
@@ -619,7 +620,7 @@ func getStorageTypes(
hostQuery := HostManager.Query()
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
hostQuery = HostManager.FilterByOwner(hostQuery, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
hostQuery = HostManager.FilterByOwner(ctx, hostQuery, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
}
hosts := hostQuery.SubQuery()
@@ -656,7 +657,7 @@ func getStorageTypes(
}
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
q = StorageManager.FilterByOwner(q, StorageManager, userCred, ownerId, rbacscope.ScopeDomain)
q = StorageManager.FilterByOwner(ctx, q, StorageManager, userCred, ownerId, rbacscope.ScopeDomain)
}
q = q.Filter(sqlchemy.Equals(hosts.Field("resource_type"), api.HostResourceTypeShared))
q = q.Filter(sqlchemy.IsNotEmpty(storages.Field("storage_type")))
@@ -780,12 +781,12 @@ type PCIDevModelTypes struct {
SizeMB int
}
func getIsolatedDeviceInfo(userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) ([]string, []PCIDevModelTypes) {
func getIsolatedDeviceInfo(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) ([]string, []PCIDevModelTypes) {
devices := IsolatedDeviceManager.Query().SubQuery()
hostQuery := HostManager.Query()
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
hostQuery = StorageManager.FilterByOwner(hostQuery, StorageManager, userCred, ownerId, rbacscope.ScopeDomain)
hostQuery = StorageManager.FilterByOwner(ctx, hostQuery, StorageManager, userCred, ownerId, rbacscope.ScopeDomain)
}
hosts := hostQuery.SubQuery()
@@ -834,12 +835,12 @@ func getIsolatedDeviceInfo(userCred mcclient.TokenCredential, region *SCloudregi
return gpuModels, gpus
}
func getHostCpuArchs(userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
func getHostCpuArchs(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, zone *SZone, domainId string) []string {
q := HostManager.Query("cpu_architecture").Equals("enabled", true).
Equals("host_status", "online").Equals("host_type", api.HOST_TYPE_HYPERVISOR)
if len(domainId) > 0 {
ownerId := &db.SOwnerId{DomainId: domainId}
q = HostManager.FilterByOwner(q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
q = HostManager.FilterByOwner(ctx, q, HostManager, userCred, ownerId, rbacscope.ScopeDomain)
}
if zone != nil {
q = q.Equals("zone_id", zone.Id)
@@ -867,15 +868,15 @@ func getHostCpuArchs(userCred mcclient.TokenCredential, region *SCloudregion, zo
return res
}
func getNetworkCount(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone) (int, error) {
return getNetworkCountByFilter(userCred, ownerId, scope, region, zone, tristate.None, "")
func getNetworkCount(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone) (int, error) {
return getNetworkCountByFilter(ctx, userCred, ownerId, scope, region, zone, tristate.None, "")
}
func getAutoAllocNetworkCount(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone, serverType string) (int, error) {
return getNetworkCountByFilter(userCred, ownerId, scope, region, zone, tristate.True, serverType)
func getAutoAllocNetworkCount(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone, serverType string) (int, error) {
return getNetworkCountByFilter(ctx, userCred, ownerId, scope, region, zone, tristate.True, serverType)
}
func getNetworkCountByFilter(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone, isAutoAlloc tristate.TriState, serverType string) (int, error) {
func getNetworkCountByFilter(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone, isAutoAlloc tristate.TriState, serverType string) (int, error) {
if zone != nil && region == nil {
region, _ = zone.GetRegion()
}
@@ -902,7 +903,7 @@ func getNetworkCountByFilter(userCred mcclient.TokenCredential, ownerId mcclient
}
}
q = NetworkManager.FilterByOwner(q, NetworkManager, userCred, ownerId, scope)
q = NetworkManager.FilterByOwner(ctx, q, NetworkManager, userCred, ownerId, scope)
if !isAutoAlloc.IsNone() {
if isAutoAlloc.IsTrue() {
q = q.IsTrue("is_auto_alloc")
@@ -962,8 +963,8 @@ func getMaxDataDiskCount(region *SCloudregion, zone *SZone) int {
return 0
}
func isUsable(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone) bool {
cnt, err := getNetworkCount(userCred, ownerId, scope, region, zone)
func isUsable(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, region *SCloudregion, zone *SZone) bool {
cnt, err := getNetworkCount(ctx, userCred, ownerId, scope, region, zone)
if err != nil {
return false
}
+1 -1
View File
@@ -344,7 +344,7 @@ func (manager *SCDNDomainManager) ValidateCreateData(
if len(input.CloudproviderId) == 0 {
return input, httperrors.NewMissingParameterError("cloudprovider_id")
}
_provider, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId)
_provider, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId)
if err != nil {
return input, err
}
+11 -11
View File
@@ -346,7 +346,7 @@ func (acnt *SCloudaccount) ValidateUpdateData(
defaultRegion, _ := jsonutils.Marshal(acnt.Options).GetString("default_region")
if len(input.ProxySettingId) > 0 {
var proxySetting *proxy.SProxySetting
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(userCred, input.ProxySettingResourceInput)
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(ctx, userCred, input.ProxySettingResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateProxySettingResourceInput")
}
@@ -475,7 +475,7 @@ func (manager *SCloudaccountManager) validateCreateData(
}
if len(input.Zone) > 0 {
obj, err := ZoneManager.FetchByIdOrName(userCred, input.Zone)
obj, err := ZoneManager.FetchByIdOrName(ctx, userCred, input.Zone)
if err != nil {
return input, errors.Wrapf(err, "unable to fetch Zone %s", input.Zone)
}
@@ -543,7 +543,7 @@ func (manager *SCloudaccountManager) validateCreateData(
input.ProxySettingId = proxyapi.ProxySettingId_DIRECT
}
var proxySetting *proxy.SProxySetting
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(userCred, input.ProxySettingResourceInput)
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(ctx, userCred, input.ProxySettingResourceInput)
if err != nil {
return input, errors.Wrap(err, "ValidateProxySettingResourceInput")
}
@@ -1295,8 +1295,8 @@ func (manager *SCloudaccountManager) FetchCloudaccountById(accountId string) *SC
return providerObj.(*SCloudaccount)
}
func (manager *SCloudaccountManager) FetchCloudaccountByIdOrName(accountId string) *SCloudaccount {
providerObj, err := manager.FetchByIdOrName(nil, accountId)
func (manager *SCloudaccountManager) FetchCloudaccountByIdOrName(ctx context.Context, accountId string) *SCloudaccount {
providerObj, err := manager.FetchByIdOrName(ctx, nil, accountId)
if err != nil {
if err != sql.ErrNoRows {
log.Errorf("%s", err)
@@ -2022,7 +2022,7 @@ func (manager *SCloudaccountManager) ListItemFilter(
}
if len(query.ProxySetting) > 0 {
proxy, err := proxy.ProxySettingManager.FetchByIdOrName(nil, query.ProxySetting)
proxy, err := proxy.ProxySettingManager.FetchByIdOrName(ctx, nil, query.ProxySetting)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("proxy_setting", query.ProxySetting)
@@ -2038,7 +2038,7 @@ func (manager *SCloudaccountManager) ListItemFilter(
if len(managerStr) == 0 {
continue
}
providerObj, err := CloudproviderManager.FetchByIdOrName(userCred, managerStr)
providerObj, err := CloudproviderManager.FetchByIdOrName(ctx, userCred, managerStr)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
@@ -2723,7 +2723,7 @@ func (manager *SCloudaccountManager) filterByDomainId(q *sqlchemy.SQuery, domain
return q
}
func (manager *SCloudaccountManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SCloudaccountManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject, rbacscope.ScopeDomain:
@@ -2817,14 +2817,14 @@ func (account *SCloudaccount) PerformSyncSkus(ctx context.Context, userCred mccl
params.Add(jsonutils.NewString(input.Resource), "resource")
if len(input.CloudregionId) > 0 {
_, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId)
_, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId)
if err != nil {
return nil, err
}
params.Add(jsonutils.NewString(input.CloudregionId), "cloudregion_id")
}
if len(input.CloudproviderId) > 0 {
_, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId)
_, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId)
if err != nil {
return nil, err
}
@@ -3132,7 +3132,7 @@ func (cd *SCloudaccount) GetHost2Wire(ctx context.Context, userCred mcclient.Tok
// 绑定同步策略
func (account *SCloudaccount) PerformProjectMapping(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.CloudaccountProjectMappingInput) (jsonutils.JSONObject, error) {
if len(input.ProjectMappingId) > 0 {
_, err := validators.ValidateModel(userCred, ProjectMappingManager, &input.ProjectMappingId)
_, err := validators.ValidateModel(ctx, userCred, ProjectMappingManager, &input.ProjectMappingId)
if err != nil {
return nil, errors.Wrap(err, "ValidateModel")
}
+9 -9
View File
@@ -133,7 +133,7 @@ func (scm *SCloudaccountManager) PerformPrepareNets(ctx context.Context, userCre
return output, errors.Wrap(err, "unable to FetchEsxiZoneIds")
}
if len(zoneids) == 0 {
id, err := scm.defaultZoneId(userCred)
id, err := scm.defaultZoneId(ctx, userCred)
if err != nil {
return output, errors.Wrap(err, "unable to fetch defaultZoneId")
}
@@ -156,7 +156,7 @@ func (scm *SCloudaccountManager) PerformPrepareNets(ctx context.Context, userCre
input.ProxySettingId = proxyapi.ProxySettingId_DIRECT
}
var proxySetting *proxy.SProxySetting
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(userCred, input.ProxySettingResourceInput)
proxySetting, input.ProxySettingResourceInput, err = proxy.ValidateProxySettingResourceInput(ctx, userCred, input.ProxySettingResourceInput)
if err != nil {
return output, errors.Wrap(err, "ValidateProxySettingResourceInput")
}
@@ -211,14 +211,14 @@ func (cam *SCloudaccountManager) prepareNets(ctx context.Context, userCred mccli
if !input.Dvs {
// fetch all wire candidate
wires, err := cam.fetchWires(userCred, input.ProjectDomainId, zoneids)
wires, err := cam.fetchWires(ctx, userCred, input.ProjectDomainId, zoneids)
if err != nil {
return output, errors.Wrap(err, "unable to fetch wires")
}
// fetch networks
networks := make([][]SNetwork, len(wires))
for i := range networks {
nets, err := wires[i].getNetworks(userCred, userCred, rbacscope.ScopeSystem)
nets, err := wires[i].getNetworks(ctx, userCred, userCred, rbacscope.ScopeSystem)
if err != nil {
return output, errors.Wrap(err, "wire.getNetwork")
}
@@ -580,22 +580,22 @@ func (scm *SCloudaccountManager) parseAndSuggestSingleWire(params sParseAndSugge
return output
}
func (manager *SCloudaccountManager) fetchWires(userCred mcclient.TokenCredential, domainId string, zoneIds []string) ([]SWire, error) {
func (manager *SCloudaccountManager) fetchWires(ctx context.Context, userCred mcclient.TokenCredential, domainId string, zoneIds []string) ([]SWire, error) {
q := WireManager.Query().In("zone_id", zoneIds)
if len(domainId) > 0 {
ownerId := &db.SOwnerId{}
ownerId.DomainId = domainId
q = WireManager.FilterByOwner(q, WireManager, userCred, ownerId, rbacscope.ScopeDomain)
q = WireManager.FilterByOwner(ctx, q, WireManager, userCred, ownerId, rbacscope.ScopeDomain)
} else {
q = WireManager.FilterByOwner(q, WireManager, userCred, userCred, rbacscope.ScopeDomain)
q = WireManager.FilterByOwner(ctx, q, WireManager, userCred, userCred, rbacscope.ScopeDomain)
}
wires := make([]SWire, 0, 1)
err := db.FetchModelObjects(WireManager, q, &wires)
return wires, err
}
func (manager *SCloudaccountManager) defaultZoneId(userCred mcclient.TokenCredential) (string, error) {
zone, err := ZoneManager.FetchByName(userCred, "zone0")
func (manager *SCloudaccountManager) defaultZoneId(ctx context.Context, userCred mcclient.TokenCredential) (string, error) {
zone, err := ZoneManager.FetchByName(ctx, userCred, "zone0")
if err != nil {
return "", err
}
+21 -21
View File
@@ -557,9 +557,9 @@ func (sr *SSyncRange) NeedSyncInfo() bool {
return false
}
func (sr *SSyncRange) normalizeRegionIds() error {
func (sr *SSyncRange) normalizeRegionIds(ctx context.Context) error {
for i := 0; i < len(sr.Region); i += 1 {
obj, err := CloudregionManager.FetchByIdOrName(nil, sr.Region[i])
obj, err := CloudregionManager.FetchByIdOrName(ctx, nil, sr.Region[i])
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError("Region %s not found", sr.Region[i])
@@ -572,9 +572,9 @@ func (sr *SSyncRange) normalizeRegionIds() error {
return nil
}
func (sr *SSyncRange) normalizeZoneIds() error {
func (sr *SSyncRange) normalizeZoneIds(ctx context.Context) error {
for i := 0; i < len(sr.Zone); i += 1 {
obj, err := ZoneManager.FetchByIdOrName(nil, sr.Zone[i])
obj, err := ZoneManager.FetchByIdOrName(ctx, nil, sr.Zone[i])
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError("Zone %s not found", sr.Zone[i])
@@ -595,9 +595,9 @@ func (sr *SSyncRange) normalizeZoneIds() error {
return nil
}
func (sr *SSyncRange) normalizeHostIds() error {
func (sr *SSyncRange) normalizeHostIds(ctx context.Context) error {
for i := 0; i < len(sr.Host); i += 1 {
obj, err := HostManager.FetchByIdOrName(nil, sr.Host[i])
obj, err := HostManager.FetchByIdOrName(ctx, nil, sr.Host[i])
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError("Host %s not found", sr.Host[i])
@@ -625,9 +625,9 @@ func (sr *SSyncRange) normalizeHostIds() error {
return nil
}
func (sr *SSyncRange) Normalize() error {
func (sr *SSyncRange) Normalize(ctx context.Context) error {
if sr.Region != nil && len(sr.Region) > 0 {
err := sr.normalizeRegionIds()
err := sr.normalizeRegionIds(ctx)
if err != nil {
return err
}
@@ -635,7 +635,7 @@ func (sr *SSyncRange) Normalize() error {
sr.Region = make([]string, 0)
}
if sr.Zone != nil && len(sr.Zone) > 0 {
err := sr.normalizeZoneIds()
err := sr.normalizeZoneIds(ctx)
if err != nil {
return err
}
@@ -643,7 +643,7 @@ func (sr *SSyncRange) Normalize() error {
sr.Zone = make([]string, 0)
}
if sr.Host != nil && len(sr.Host) > 0 {
err := sr.normalizeHostIds()
err := sr.normalizeHostIds(ctx)
if err != nil {
return err
}
@@ -971,8 +971,8 @@ func (manager *SCloudproviderManager) IsProviderAccountEnabled(providerId string
return account.GetEnabled()
}
func (manager *SCloudproviderManager) FetchCloudproviderByIdOrName(providerId string) *SCloudprovider {
providerObj, err := manager.FetchByIdOrName(nil, providerId)
func (manager *SCloudproviderManager) FetchCloudproviderByIdOrName(ctx context.Context, providerId string) *SCloudprovider {
providerObj, err := manager.FetchByIdOrName(ctx, nil, providerId)
if err != nil {
if err != sql.ErrNoRows {
log.Errorf("%s", err)
@@ -1275,7 +1275,7 @@ func (manager *SCloudproviderManager) ListItemFilter(
var region *SCloudregion
if len(query.ZoneId) > 0 {
zoneObj, err := ZoneManager.FetchByIdOrName(userCred, query.ZoneId)
zoneObj, err := ZoneManager.FetchByIdOrName(ctx, userCred, query.ZoneId)
if err != nil {
if err == sql.ErrNoRows {
return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ZoneManager.Keyword(), query.ZoneId)
@@ -1288,7 +1288,7 @@ func (manager *SCloudproviderManager) ListItemFilter(
sq := pr.Query(pr.Field("cloudprovider_id")).Equals("cloudregion_id", zone.CloudregionId).Distinct()
q = q.In("id", sq)
} else if len(query.CloudregionId) > 0 {
regionObj, err := CloudregionManager.FetchByIdOrName(userCred, query.CloudregionId)
regionObj, err := CloudregionManager.FetchByIdOrName(ctx, userCred, query.CloudregionId)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudregion", query.CloudregionId)
@@ -1352,7 +1352,7 @@ func (manager *SCloudproviderManager) ListItemFilter(
if len(managerStr) == 0 {
continue
}
providerObj, err := manager.FetchByIdOrName(userCred, managerStr)
providerObj, err := manager.FetchByIdOrName(ctx, userCred, managerStr)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
@@ -1407,7 +1407,7 @@ func (manager *SCloudproviderManager) ListItemFilter(
}
if len(query.HostSchedtagId) > 0 {
schedTagObj, err := SchedtagManager.FetchByIdOrName(userCred, query.HostSchedtagId)
schedTagObj, err := SchedtagManager.FetchByIdOrName(ctx, userCred, query.HostSchedtagId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", SchedtagManager.Keyword(), query.HostSchedtagId)
@@ -1769,7 +1769,7 @@ func (manager *SCloudproviderManager) filterByDomainId(q *sqlchemy.SQuery, domai
return q
}
func (manager *SCloudproviderManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SCloudproviderManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
switch scope {
case rbacscope.ScopeProject, rbacscope.ScopeDomain:
@@ -1863,7 +1863,7 @@ func (provider *SCloudprovider) GetDetailsStorageClasses(
return output, httperrors.NewInternalServerError("fail to get provider driver %s", err)
}
if len(input.CloudregionId) > 0 {
_, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(userCred, input.CloudregionResourceInput)
_, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(ctx, userCred, input.CloudregionResourceInput)
if err != nil {
return output, errors.Wrap(err, "ValidateCloudregionResourceInput")
}
@@ -1888,7 +1888,7 @@ func (provider *SCloudprovider) GetDetailsCannedAcls(
return output, httperrors.NewInternalServerError("fail to get provider driver %s", err)
}
if len(input.CloudregionId) > 0 {
_, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(userCred, input.CloudregionResourceInput)
_, input.CloudregionResourceInput, err = ValidateCloudregionResourceInput(ctx, userCred, input.CloudregionResourceInput)
if err != nil {
return output, errors.Wrap(err, "ValidateCloudregionResourceInput")
}
@@ -2147,7 +2147,7 @@ func (manager *SCloudproviderManager) ListItemExportKeys(ctx context.Context, q
// 绑定同步策略
func (cprvd *SCloudprovider) PerformProjectMapping(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.CloudaccountProjectMappingInput) (jsonutils.JSONObject, error) {
if len(input.ProjectMappingId) > 0 {
_, err := validators.ValidateModel(userCred, ProjectMappingManager, &input.ProjectMappingId)
_, err := validators.ValidateModel(ctx, userCred, ProjectMappingManager, &input.ProjectMappingId)
if err != nil {
return nil, err
}
@@ -2174,7 +2174,7 @@ func (cprvd *SCloudprovider) PerformProjectMapping(ctx context.Context, userCred
func (cprvd *SCloudprovider) PerformSetSyncing(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.CloudproviderSync) (jsonutils.JSONObject, error) {
regionIds := []string{}
for i := range input.CloudregionIds {
_, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionIds[i])
_, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionIds[i])
if err != nil {
return nil, err
}
+5 -5
View File
@@ -39,8 +39,8 @@ type SCloudregionResourceBase struct {
type SCloudregionResourceBaseManager struct{}
func ValidateCloudregionResourceInput(userCred mcclient.TokenCredential, input api.CloudregionResourceInput) (*SCloudregion, api.CloudregionResourceInput, error) {
regionObj, err := CloudregionManager.FetchByIdOrName(userCred, input.CloudregionId)
func ValidateCloudregionResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.CloudregionResourceInput) (*SCloudregion, api.CloudregionResourceInput, error) {
regionObj, err := CloudregionManager.FetchByIdOrName(ctx, userCred, input.CloudregionId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", CloudregionManager.Keyword(), input.CloudregionId)
@@ -52,8 +52,8 @@ func ValidateCloudregionResourceInput(userCred mcclient.TokenCredential, input a
return regionObj.(*SCloudregion), input, nil
}
func ValidateCloudregionId(userCred mcclient.TokenCredential, regionId string) (*SCloudregion, error) {
regionObj, err := CloudregionManager.FetchByIdOrName(userCred, regionId)
func ValidateCloudregionId(ctx context.Context, userCred mcclient.TokenCredential, regionId string) (*SCloudregion, error) {
regionObj, err := CloudregionManager.FetchByIdOrName(ctx, userCred, regionId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", CloudregionManager.Keyword(), regionId)
@@ -136,7 +136,7 @@ func (manager *SCloudregionResourceBaseManager) ListItemFilter(
userCred mcclient.TokenCredential,
query api.RegionalFilterListInput,
) (*sqlchemy.SQuery, error) {
return managedResourceFilterByRegion(q, query, "", nil)
return managedResourceFilterByRegion(ctx, q, query, "", nil)
}
func (manager *SCloudregionResourceBaseManager) OrderByExtraFields(
+4 -4
View File
@@ -335,12 +335,12 @@ func (self *SCloudregion) GetDriver() IRegionDriver {
return GetRegionDriver(provider)
}
func (self *SCloudregion) getUsage() api.SCloudregionUsage {
func (self *SCloudregion) getUsage(ctx context.Context) api.SCloudregionUsage {
out := api.SCloudregionUsage{}
out.VpcCount, _ = self.GetVpcCount()
out.ZoneCount, _ = self.GetZoneCount()
out.GuestCount, _ = self.GetGuestCount()
out.NetworkCount, _ = self.GetNetworkCount()
out.NetworkCount, _ = self.GetNetworkCount(ctx)
out.GuestIncrementCount, _ = self.GetGuestIncrementCount()
return out
}
@@ -1094,8 +1094,8 @@ func (self *SCloudregion) GetDetailsDiskCapability(ctx context.Context, userCred
return jsonutils.Marshal(&capa), nil
}
func (self *SCloudregion) GetNetworkCount() (int, error) {
return getNetworkCount(nil, nil, rbacscope.ScopeSystem, self, nil)
func (self *SCloudregion) GetNetworkCount(ctx context.Context) (int, error) {
return getNetworkCount(ctx, nil, nil, rbacscope.ScopeSystem, self, nil)
}
func (self *SCloudregion) getMinNicCount() int {
+2 -2
View File
@@ -99,7 +99,7 @@ func (manager *SDBInstanceAccountManager) FetchOwnerId(ctx context.Context, data
return db.FetchProjectInfo(ctx, data)
}
func (manager *SDBInstanceAccountManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SDBInstanceAccountManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
sq := DBInstanceManager.Query("id")
switch scope {
@@ -293,7 +293,7 @@ func (manager *SDBInstanceAccountManager) ValidateCreateData(ctx context.Context
if len(input.DBInstance) == 0 {
return nil, httperrors.NewMissingParameterError("dbinstance")
}
_instance, err := DBInstanceManager.FetchByIdOrName(userCred, input.DBInstance)
_instance, err := DBInstanceManager.FetchByIdOrName(ctx, userCred, input.DBInstance)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("failed to found dbinstance %s", input.DBInstance)
+1 -1
View File
@@ -208,7 +208,7 @@ func (manager *SDBInstanceBackupManager) ValidateCreateData(ctx context.Context,
if len(input.DBInstance) == 0 {
return nil, httperrors.NewMissingParameterError("dbinstance")
}
_instance, err := DBInstanceManager.FetchByIdOrName(userCred, input.DBInstance)
_instance, err := DBInstanceManager.FetchByIdOrName(ctx, userCred, input.DBInstance)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("failed to found dbinstance %s", input.DBInstance)
+2 -2
View File
@@ -101,7 +101,7 @@ func (manager *SDBInstanceDatabaseManager) FetchOwnerId(ctx context.Context, dat
return db.FetchProjectInfo(ctx, data)
}
func (manager *SDBInstanceDatabaseManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SDBInstanceDatabaseManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if owner != nil {
sq := DBInstanceManager.Query("id")
switch scope {
@@ -213,7 +213,7 @@ func (manager *SDBInstanceDatabaseManager) ValidateCreateData(ctx context.Contex
if len(input.DBInstance) == 0 {
return nil, httperrors.NewMissingParameterError("dbinstance")
}
_instance, err := DBInstanceManager.FetchByIdOrName(userCred, input.DBInstance)
_instance, err := DBInstanceManager.FetchByIdOrName(ctx, userCred, input.DBInstance)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("failed to found dbinstance %s", input.DBInstance)
+1 -1
View File
@@ -129,7 +129,7 @@ func (manager *SDBInstancePrivilegeManager) ListItemFilter(
}
data := jsonutils.Marshal(query).(*jsonutils.JSONDict)
return validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{
return validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{
{Key: "dbinstanceaccount", ModelKeyword: "dbinstanceaccount", OwnerId: userCred},
{Key: "dbinstancedatabase", ModelKeyword: "dbinstancedatabase", OwnerId: userCred},
})
+3 -3
View File
@@ -119,7 +119,7 @@ func (manager *SDBInstanceSkuManager) ListItemFilter(
}
if domainStr := query.ProjectDomainId; len(domainStr) > 0 {
domain, err := db.TenantCacheManager.FetchDomainByIdOrName(context.Background(), domainStr)
domain, err := db.TenantCacheManager.FetchDomainByIdOrName(ctx, domainStr)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("domains", domainStr)
@@ -131,7 +131,7 @@ func (manager *SDBInstanceSkuManager) ListItemFilter(
q = listItemDomainFilter(q, query.Providers, query.ProjectDomainId)
q, err = managedResourceFilterByRegion(q, query.RegionalFilterListInput, "", nil)
q, err = managedResourceFilterByRegion(ctx, q, query.RegionalFilterListInput, "", nil)
if err != nil {
return nil, errors.Wrap(err, "managedResourceFilterByRegion")
}
@@ -162,7 +162,7 @@ func (manager *SDBInstanceSkuManager) ListItemFilter(
for k, zoneIds := range map[string][]string{"zone1": query.Zone1, "zone2": query.Zone2, "zone3": query.Zone3} {
ids := []string{}
for _, zoneId := range zoneIds {
zone, err := ZoneManager.FetchByIdOrName(userCred, zoneId)
zone, err := ZoneManager.FetchByIdOrName(ctx, userCred, zoneId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("zone", zoneId)
+3 -3
View File
@@ -39,8 +39,8 @@ type SDBInstanceResourceBaseManager struct {
SVpcResourceBaseManager
}
func ValidateDBInstanceResourceInput(userCred mcclient.TokenCredential, input api.DBInstanceResourceInput) (*SDBInstance, api.DBInstanceResourceInput, error) {
rdsObj, err := DBInstanceManager.FetchByIdOrName(userCred, input.DBInstanceId)
func ValidateDBInstanceResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.DBInstanceResourceInput) (*SDBInstance, api.DBInstanceResourceInput, error) {
rdsObj, err := DBInstanceManager.FetchByIdOrName(ctx, userCred, input.DBInstanceId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", DBInstanceManager.Keyword(), input.DBInstanceId)
@@ -127,7 +127,7 @@ func (manager *SDBInstanceResourceBaseManager) ListItemFilter(
var err error
if len(query.DBInstanceId) > 0 {
var dbObj *SDBInstance
dbObj, _, err = ValidateDBInstanceResourceInput(userCred, query.DBInstanceResourceInput)
dbObj, _, err = ValidateDBInstanceResourceInput(ctx, userCred, query.DBInstanceResourceInput)
if err != nil {
return nil, errors.Wrap(err, "DBInstanceManager.FetchByIdOrName")
}
+12 -11
View File
@@ -186,7 +186,7 @@ func (man *SDBInstanceManager) ListItemFilter(
}
if len(query.ZoneId) > 0 {
zoneObj, err := ZoneManager.FetchByIdOrName(userCred, query.ZoneId)
zoneObj, err := ZoneManager.FetchByIdOrName(ctx, userCred, query.ZoneId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(ZoneManager.Keyword(), query.ZoneId)
@@ -202,7 +202,7 @@ func (man *SDBInstanceManager) ListItemFilter(
}
if len(query.MasterInstance) > 0 {
instObj, err := DBInstanceManager.FetchByIdOrName(userCred, query.MasterInstance)
instObj, err := DBInstanceManager.FetchByIdOrName(ctx, userCred, query.MasterInstance)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(DBInstanceManager.Keyword(), query.MasterInstance)
@@ -309,7 +309,7 @@ func (manager *SDBInstanceManager) BatchCreateValidateCreateData(ctx context.Con
func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.DBInstanceCreateInput) (api.DBInstanceCreateInput, error) {
if len(input.DBInstancebackupId) > 0 {
_backup, err := validators.ValidateModel(userCred, DBInstanceBackupManager, &input.DBInstancebackupId)
_backup, err := validators.ValidateModel(ctx, userCred, DBInstanceBackupManager, &input.DBInstancebackupId)
if err != nil {
return input, err
}
@@ -321,7 +321,7 @@ func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred
}
for _, v := range map[string]*string{"zone1": &input.Zone1, "zone2": &input.Zone2, "zone3": &input.Zone3} {
if len(*v) > 0 {
_, err := validators.ValidateModel(userCred, ZoneManager, v)
_, err := validators.ValidateModel(ctx, userCred, ZoneManager, v)
if err != nil {
return input, err
}
@@ -337,7 +337,7 @@ func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred
var vpc *SVpc
var network *SNetwork
if len(input.NetworkId) > 0 {
_network, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId)
_network, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId)
if err != nil {
return input, err
}
@@ -354,7 +354,7 @@ func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred
}
vpc, _ = network.GetVpc()
} else if len(input.VpcId) > 0 {
_vpc, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId)
_vpc, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId)
if err != nil {
return input, err
}
@@ -468,7 +468,7 @@ func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred
return input, httperrors.NewNotSupportedError("%s rds Support up to %d security groups", driver.GetProvider(), secCount)
}
for i := range input.SecgroupIds {
_, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i])
_, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i])
if err != nil {
return input, err
}
@@ -583,7 +583,7 @@ func (manager *SDBInstanceManager) FetchCustomizeColumns(
log.Errorf("FetchCheckQueryOwnerScope error: %v", err)
return rows
}
secgroups := SecurityGroupManager.FilterByOwner(q, SecurityGroupManager, userCred, ownerId, queryScope).SubQuery()
secgroups := SecurityGroupManager.FilterByOwner(ctx, q, SecurityGroupManager, userCred, ownerId, queryScope).SubQuery()
rdssecgroups := DBInstanceSecgroupManager.Query().SubQuery()
secQ := rdssecgroups.Query(rdssecgroups.Field("dbinstance_id"), rdssecgroups.Field("secgroup_id"), secgroups.Field("name").Label("secgroup_name")).Join(secgroups, sqlchemy.Equals(rdssecgroups.Field("secgroup_id"), secgroups.Field("id"))).Filter(sqlchemy.In(rdssecgroups.Field("dbinstance_id"), rdsIds))
@@ -864,7 +864,7 @@ func (self *SDBInstance) PerformRecovery(ctx context.Context, userCred mcclient.
return nil, httperrors.NewInvalidStatusError("Cannot do recovery dbinstance in status %s required status %s", self.Status, api.DBINSTANCE_RUNNING)
}
_backup, err := DBInstanceBackupManager.FetchByIdOrName(userCred, input.DBInstancebackupId)
_backup, err := DBInstanceBackupManager.FetchByIdOrName(ctx, userCred, input.DBInstancebackupId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("dbinstancebackup", input.DBInstancebackupId)
@@ -1880,6 +1880,7 @@ type SRdsCountStat struct {
}
func (man *SDBInstanceManager) TotalCount(
ctx context.Context,
scope rbacscope.TRbacScope,
ownerId mcclient.IIdentityProvider,
rangeObjs []db.IStandaloneModel,
@@ -1890,7 +1891,7 @@ func (man *SDBInstanceManager) TotalCount(
dbq = scopeOwnerIdFilter(dbq, scope, ownerId)
dbq = CloudProviderFilter(dbq, dbq.Field("manager_id"), providers, brands, cloudEnv)
dbq = RangeObjectsFilter(dbq, rangeObjs, dbq.Field("cloudregion_id"), nil, dbq.Field("manager_id"), nil, nil)
dbq = db.ObjectIdQueryWithPolicyResult(dbq, man, policyResult)
dbq = db.ObjectIdQueryWithPolicyResult(ctx, dbq, man, policyResult)
sq := dbq.SubQuery()
@@ -2130,7 +2131,7 @@ func (self *SDBInstance) PerformSetSecgroup(ctx context.Context, userCred mcclie
return nil, httperrors.NewMissingParameterError("secgroup_ids")
}
for i := range input.SecgroupIds {
_, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i])
_, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i])
if err != nil {
return nil, err
}
+2 -2
View File
@@ -235,7 +235,7 @@ func (dm *SDiskBackupManager) ValidateCreateData(
return input, httperrors.NewMissingParameterError("backup_storage_id")
}
// check disk
_disk, err := validators.ValidateModel(userCred, DiskManager, &input.DiskId)
_disk, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.DiskId)
if err != nil {
return input, err
}
@@ -251,7 +251,7 @@ func (dm *SDiskBackupManager) ValidateCreateData(
}
}
ibs, err := BackupStorageManager.FetchByIdOrName(userCred, input.BackupStorageId)
ibs, err := BackupStorageManager.FetchByIdOrName(ctx, userCred, input.BackupStorageId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError2(BackupStorageManager.Keyword(), input.BackupStorageId)
+3 -3
View File
@@ -39,8 +39,8 @@ type SDiskResourceBaseManager struct {
SStorageResourceBaseManager
}
func ValidateDiskResourceInput(userCred mcclient.TokenCredential, input api.DiskResourceInput) (*SDisk, api.DiskResourceInput, error) {
diskObj, err := DiskManager.FetchByIdOrName(userCred, input.DiskId)
func ValidateDiskResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.DiskResourceInput) (*SDisk, api.DiskResourceInput, error) {
diskObj, err := DiskManager.FetchByIdOrName(ctx, userCred, input.DiskId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", DiskManager.Keyword(), input.DiskId)
@@ -135,7 +135,7 @@ func (manager *SDiskResourceBaseManager) ListItemFilter(
) (*sqlchemy.SQuery, error) {
var err error
if len(query.DiskId) > 0 {
diskObj, _, err := ValidateDiskResourceInput(userCred, query.DiskResourceInput)
diskObj, _, err := ValidateDiskResourceInput(ctx, userCred, query.DiskResourceInput)
if err != nil {
return nil, errors.Wrap(err, "ValidateDiskResourceInput")
}
+18 -18
View File
@@ -206,7 +206,7 @@ func (manager *SDiskManager) ListItemFilter(
guestId := query.ServerId
if len(guestId) > 0 {
server, err := validators.ValidateModel(userCred, GuestManager, &guestId)
server, err := validators.ValidateModel(ctx, userCred, GuestManager, &guestId)
if err != nil {
return nil, err
}
@@ -223,7 +223,7 @@ func (manager *SDiskManager) ListItemFilter(
}
if len(query.SnapshotpolicyId) > 0 {
_, err := validators.ValidateModel(userCred, SnapshotPolicyManager, &query.SnapshotpolicyId)
_, err := validators.ValidateModel(ctx, userCred, SnapshotPolicyManager, &query.SnapshotpolicyId)
if err != nil {
return nil, err
}
@@ -252,7 +252,7 @@ func (manager *SDiskManager) ListItemFilter(
}
if len(query.SnapshotId) > 0 {
_, err := validators.ValidateModel(userCred, SnapshotManager, &query.SnapshotId)
_, err := validators.ValidateModel(ctx, userCred, SnapshotManager, &query.SnapshotId)
if err != nil {
return nil, err
}
@@ -504,7 +504,7 @@ func (manager *SDiskManager) ValidateCreateData(ctx context.Context, userCred mc
storageID := input.Storage
if storageID != "" {
storageObj, err := StorageManager.FetchByIdOrName(nil, storageID)
storageObj, err := StorageManager.FetchByIdOrName(ctx, nil, storageID)
if err != nil {
return input, httperrors.NewResourceNotFoundError("Storage %s not found", storageID)
}
@@ -543,7 +543,7 @@ func (manager *SDiskManager) ValidateCreateData(ctx context.Context, userCred mc
diskConfig.Backend = api.STORAGE_LOCAL
}
if len(input.PreferManager) > 0 {
_manager, err := CloudproviderManager.FetchByIdOrName(userCred, input.PreferManager)
_manager, err := CloudproviderManager.FetchByIdOrName(ctx, userCred, input.PreferManager)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError2("cloudprovider", input.PreferManager)
@@ -924,7 +924,7 @@ func (self *SDisk) PerformDiskReset(ctx context.Context, userCred mcclient.Token
return nil, httperrors.NewGeneralError(errors.Wrapf(err, "GetMasterHost"))
}
snapshotObj, err := validators.ValidateModel(userCred, SnapshotManager, &input.SnapshotId)
snapshotObj, err := validators.ValidateModel(ctx, userCred, SnapshotManager, &input.SnapshotId)
if err != nil {
return nil, err
}
@@ -1877,17 +1877,17 @@ func totalDiskSize(
func parseDiskInfo(ctx context.Context, userCred mcclient.TokenCredential, info *api.DiskConfig) (*api.DiskConfig, error) {
if info.Storage != "" {
if err := fillDiskConfigByStorage(userCred, info, info.Storage); err != nil {
if err := fillDiskConfigByStorage(ctx, userCred, info, info.Storage); err != nil {
return nil, errors.Wrap(err, "fillDiskConfigByStorage")
}
}
if info.DiskId != "" {
if err := fillDiskConfigByDisk(userCred, info, info.DiskId); err != nil {
if err := fillDiskConfigByDisk(ctx, userCred, info, info.DiskId); err != nil {
return nil, errors.Wrap(err, "fillDiskConfigByDisk")
}
}
if info.SnapshotId != "" {
if err := fillDiskConfigBySnapshot(userCred, info, info.SnapshotId); err != nil {
if err := fillDiskConfigBySnapshot(ctx, userCred, info, info.SnapshotId); err != nil {
return nil, errors.Wrap(err, "fillDiskConfigBySnapshot")
}
}
@@ -1923,8 +1923,8 @@ func parseDiskInfo(ctx context.Context, userCred mcclient.TokenCredential, info
return info, nil
}
func fillDiskConfigBySnapshot(userCred mcclient.TokenCredential, diskConfig *api.DiskConfig, snapshotId string) error {
iSnapshot, err := SnapshotManager.FetchByIdOrName(userCred, snapshotId)
func fillDiskConfigBySnapshot(ctx context.Context, userCred mcclient.TokenCredential, diskConfig *api.DiskConfig, snapshotId string) error {
iSnapshot, err := SnapshotManager.FetchByIdOrName(ctx, userCred, snapshotId)
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewNotFoundError("Snapshot %s not found", snapshotId)
@@ -1954,7 +1954,7 @@ func fillDiskConfigBySnapshot(userCred mcclient.TokenCredential, diskConfig *api
}
func fillDiskConfigByBackup(ctx context.Context, userCred mcclient.TokenCredential, diskConfig *api.DiskConfig, backupId string) error {
iBakcup, err := DiskBackupManager.FetchByIdOrName(userCred, backupId)
iBakcup, err := DiskBackupManager.FetchByIdOrName(ctx, userCred, backupId)
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewNotFoundError("Backup %s not found", backupId)
@@ -2003,9 +2003,9 @@ func fillDiskConfigByImage(ctx context.Context, userCred mcclient.TokenCredentia
return nil
}
func fillDiskConfigByDisk(userCred mcclient.TokenCredential,
func fillDiskConfigByDisk(ctx context.Context, userCred mcclient.TokenCredential,
diskConfig *api.DiskConfig, diskId string) error {
diskObj, err := DiskManager.FetchByIdOrName(userCred, diskId)
diskObj, err := DiskManager.FetchByIdOrName(ctx, userCred, diskId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError2("disk", diskId)
@@ -2047,9 +2047,9 @@ func fillDiskConfigByDisk(userCred mcclient.TokenCredential,
return nil
}
func fillDiskConfigByStorage(userCred mcclient.TokenCredential,
func fillDiskConfigByStorage(ctx context.Context, userCred mcclient.TokenCredential,
diskConfig *api.DiskConfig, storageId string) error {
storageObj, err := StorageManager.FetchByIdOrName(userCred, storageId)
storageObj, err := StorageManager.FetchByIdOrName(ctx, userCred, storageId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError2("storage", storageId)
@@ -3017,7 +3017,7 @@ func (disk *SDisk) PerformBindSnapshotpolicy(
query jsonutils.JSONObject,
input *api.DiskSnapshotpolicyInput,
) (jsonutils.JSONObject, error) {
spObj, err := validators.ValidateModel(userCred, SnapshotPolicyManager, &input.SnapshotpolicyId)
spObj, err := validators.ValidateModel(ctx, userCred, SnapshotPolicyManager, &input.SnapshotpolicyId)
if err != nil {
return nil, err
}
@@ -3047,7 +3047,7 @@ func (disk *SDisk) PerformUnbindSnapshotpolicy(
query jsonutils.JSONObject,
input *api.DiskSnapshotpolicyInput,
) (jsonutils.JSONObject, error) {
spObj, err := validators.ValidateModel(userCred, SnapshotPolicyManager, &input.SnapshotpolicyId)
spObj, err := validators.ValidateModel(ctx, userCred, SnapshotPolicyManager, &input.SnapshotpolicyId)
if err != nil {
return nil, err
}
+3 -3
View File
@@ -103,7 +103,7 @@ func (manager *SDnsRecordManager) ValidateCreateData(
return nil, httperrors.NewInputParameterError("invalid record name %s", input.Name)
}
_, err = validators.ValidateModel(userCred, DnsZoneManager, &input.DnsZoneId)
_, err = validators.ValidateModel(ctx, userCred, DnsZoneManager, &input.DnsZoneId)
if err != nil {
return nil, err
}
@@ -289,9 +289,9 @@ func (manager *SDnsRecordManager) FetchOwnerId(ctx context.Context, data jsonuti
return db.FetchDomainInfo(ctx, data)
}
func (manager *SDnsRecordManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func (manager *SDnsRecordManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
sq := DnsZoneManager.Query("id")
sq = db.SharableManagerFilterByOwner(DnsZoneManager, sq, userCred, owner, scope)
sq = db.SharableManagerFilterByOwner(ctx, DnsZoneManager, sq, userCred, owner, scope)
return q.In("dns_zone_id", sq.SubQuery())
}
+1 -1
View File
@@ -40,7 +40,7 @@ func (manager *SDnsZoneResourceBaseManager) ListItemFilter(
query api.DnsZoneFilterListBase,
) (*sqlchemy.SQuery, error) {
if len(query.DnsZoneId) > 0 {
_, err := validators.ValidateModel(userCred, DnsZoneManager, &query.DnsZoneId)
_, err := validators.ValidateModel(ctx, userCred, DnsZoneManager, &query.DnsZoneId)
if err != nil {
return nil, err
}
+4 -4
View File
@@ -95,7 +95,7 @@ func (manager *SDnsZoneManager) ValidateCreateData(
}
var provider *SCloudprovider = nil
if len(input.CloudproviderId) > 0 {
providerObj, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId)
providerObj, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId)
if err != nil {
return nil, err
}
@@ -108,7 +108,7 @@ func (manager *SDnsZoneManager) ValidateCreateData(
case cloudprovider.PrivateZone:
vpcIds := []string{}
for i := range input.VpcIds {
vpcObj, err := validators.ValidateModel(userCred, VpcManager, &input.VpcIds[i])
vpcObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcIds[i])
if err != nil {
return input, err
}
@@ -231,7 +231,7 @@ func (manager *SDnsZoneManager) ListItemFilter(
}
if len(query.VpcId) > 0 {
vpc, err := VpcManager.FetchByIdOrName(userCred, query.VpcId)
vpc, err := VpcManager.FetchByIdOrName(ctx, userCred, query.VpcId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("vpc", query.VpcId)
@@ -572,7 +572,7 @@ func (self *SDnsZone) PerformAddVpcs(ctx context.Context, userCred mcclient.Toke
}
for i := range input.VpcIds {
vpcObj, err := validators.ValidateModel(userCred, VpcManager, &input.VpcIds[i])
vpcObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcIds[i])
if err != nil {
return nil, err
}
+8 -8
View File
@@ -113,7 +113,7 @@ type SDynamicschedtag struct {
Enabled tristate.TriState `default:"true" create:"optional" list:"user" update:"user"`
}
func validateDynamicSchedtagInputData(data *jsonutils.JSONDict, create bool) error {
func validateDynamicSchedtagInputData(ctx context.Context, data *jsonutils.JSONDict, create bool) error {
condStr := jsonutils.GetAnyString(data, []string{"condition"})
if len(condStr) == 0 && create {
return httperrors.NewMissingParameterError("condition")
@@ -127,7 +127,7 @@ func validateDynamicSchedtagInputData(data *jsonutils.JSONDict, create bool) err
return httperrors.NewMissingParameterError("schedtag_id")
}
if len(schedStr) > 0 {
schedObj, err := SchedtagManager.FetchByIdOrName(nil, schedStr)
schedObj, err := SchedtagManager.FetchByIdOrName(ctx, nil, schedStr)
if err != nil {
if err == sql.ErrNoRows {
return httperrors.NewResourceNotFoundError("schedtag %s not found", schedStr)
@@ -144,7 +144,7 @@ func validateDynamicSchedtagInputData(data *jsonutils.JSONDict, create bool) err
}
func (manager *SDynamicschedtagManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
err := validateDynamicSchedtagInputData(data, true)
err := validateDynamicSchedtagInputData(ctx, data, true)
if err != nil {
return nil, err
}
@@ -162,7 +162,7 @@ func (manager *SDynamicschedtagManager) ValidateCreateData(ctx context.Context,
}
func (self *SDynamicschedtag) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
err := validateDynamicSchedtagInputData(data, false)
err := validateDynamicSchedtagInputData(ctx, data, false)
if err != nil {
return nil, err
}
@@ -236,11 +236,11 @@ func (self *SDynamicschedtag) PerformEvaluate(ctx context.Context, userCred mccl
return nil, httperrors.NewResourceNotFoundError("Virtual resource type %s not support", virtType)
}
object, err := FetchDynamicResourceObject(objectMan, userCred, objectId)
object, err := FetchDynamicResourceObject(ctx, objectMan, userCred, objectId)
if err != nil {
return nil, err
}
virtObject, err := FetchDynamicResourceObject(virtObjectMan, userCred, virtObjId)
virtObject, err := FetchDynamicResourceObject(ctx, virtObjectMan, userCred, virtObjId)
if err != nil {
return nil, err
}
@@ -271,8 +271,8 @@ func (self *SDynamicschedtag) PerformEvaluate(ctx context.Context, userCred mccl
return result, nil
}
func FetchDynamicResourceObject(man IDynamicResourceManager, userCred mcclient.TokenCredential, idOrName string) (IDynamicResource, error) {
obj, err := man.FetchByIdOrName(userCred, idOrName)
func FetchDynamicResourceObject(ctx context.Context, man IDynamicResourceManager, userCred mcclient.TokenCredential, idOrName string) (IDynamicResource, error) {
obj, err := man.FetchByIdOrName(ctx, userCred, idOrName)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("%s %s not found", man.Keyword(), idOrName)
+2 -1
View File
@@ -330,6 +330,7 @@ type SEsCountStat struct {
}
func (man *SElasticSearchManager) TotalCount(
ctx context.Context,
scope rbacscope.TRbacScope,
ownerId mcclient.IIdentityProvider,
rangeObjs []db.IStandaloneModel,
@@ -340,7 +341,7 @@ func (man *SElasticSearchManager) TotalCount(
esq = scopeOwnerIdFilter(esq, scope, ownerId)
esq = CloudProviderFilter(esq, esq.Field("manager_id"), providers, brands, cloudEnv)
esq = RangeObjectsFilter(esq, rangeObjs, esq.Field("cloudregion_id"), nil, esq.Field("manager_id"), nil, nil)
esq = db.ObjectIdQueryWithPolicyResult(esq, man, policyResult)
esq = db.ObjectIdQueryWithPolicyResult(ctx, esq, man, policyResult)
sq := esq.SubQuery()
q := sq.Query(sqlchemy.COUNT("total_es_count"),
+4 -4
View File
@@ -205,8 +205,8 @@ func (manager *SElasticcacheAccountManager) FetchOwnerId(ctx context.Context, da
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheAccountManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, ownerId, scope)
func (manager *SElasticcacheAccountManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(ctx, q, ownerId, scope)
}
func (manager *SElasticcacheAccountManager) FilterByUniqValues(q *sqlchemy.SQuery, values jsonutils.JSONObject) *sqlchemy.SQuery {
@@ -220,7 +220,7 @@ func (manager *SElasticcacheAccountManager) FilterByUniqValues(q *sqlchemy.SQuer
func (manager *SElasticcacheAccountManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
var region *SCloudregion
if id, _ := data.GetString("elasticcache"); len(id) > 0 {
ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, id)
ec, err := db.FetchByIdOrName(ctx, ElasticcacheManager, userCred, id)
if err != nil {
return nil, fmt.Errorf("getting elastic cache instance failed")
}
@@ -475,7 +475,7 @@ func (self *SElasticcacheAccount) ValidatorResetPasswordData(ctx context.Context
}
privilegeV := validators.NewStringChoicesValidator("account_privilege", choices.NewChoices(api.ELASTIC_CACHE_ACCOUNT_PRIVILEGE_READ, api.ELASTIC_CACHE_ACCOUNT_PRIVILEGE_WRITE, api.ELASTIC_CACHE_ACCOUNT_PRIVILEGE_REPL)).Optional(true)
if err := privilegeV.Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := privilegeV.Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
return data, nil
+5 -5
View File
@@ -184,8 +184,8 @@ func (manager *SElasticcacheAclManager) FetchOwnerId(ctx context.Context, data j
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheAclManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, ownerId, scope)
func (manager *SElasticcacheAclManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(ctx, q, ownerId, scope)
}
func (manager *SElasticcacheAclManager) FilterByUniqValues(q *sqlchemy.SQuery, values jsonutils.JSONObject) *sqlchemy.SQuery {
@@ -199,7 +199,7 @@ func (manager *SElasticcacheAclManager) FilterByUniqValues(q *sqlchemy.SQuery, v
func (manager *SElasticcacheAclManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
var region *SCloudregion
if id, _ := data.GetString("elasticcache"); len(id) > 0 {
ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, id)
ec, err := db.FetchByIdOrName(ctx, ElasticcacheManager, userCred, id)
if err != nil {
return nil, fmt.Errorf("getting elastic cache instance failed")
}
@@ -271,11 +271,11 @@ func (self *SElasticcacheAcl) ValidateUpdateData(ctx context.Context, userCred m
params := jsonutils.NewDict()
params.Set("ip", jsonutils.NewString(ip))
if strings.Contains(ip, "/") {
if err := cidrV.Validate(params); err != nil {
if err := cidrV.Validate(ctx, params); err != nil {
return nil, err
}
} else {
if err := ipV.Validate(params); err != nil {
if err := ipV.Validate(ctx, params); err != nil {
return nil, err
}
}
+4 -4
View File
@@ -212,8 +212,8 @@ func (manager *SElasticcacheBackupManager) FetchOwnerId(ctx context.Context, dat
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheBackupManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, ownerId, scope)
func (manager *SElasticcacheBackupManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(ctx, q, ownerId, scope)
}
func (manager *SElasticcacheBackupManager) FilterByUniqValues(q *sqlchemy.SQuery, values jsonutils.JSONObject) *sqlchemy.SQuery {
@@ -228,7 +228,7 @@ func (manager *SElasticcacheBackupManager) ValidateCreateData(ctx context.Contex
var region *SCloudregion
var ec *SElasticcache
if id, _ := data.GetString("elasticcache"); len(id) > 0 {
_ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, id)
_ec, err := db.FetchByIdOrName(ctx, ElasticcacheManager, userCred, id)
if err != nil {
return nil, fmt.Errorf("getting elastic cache instance failed")
}
@@ -281,7 +281,7 @@ func (self *SElasticcacheBackup) StartElasticcacheBackupCreateTask(ctx context.C
}
func (self *SElasticcacheBackup) ValidatorRestoreInstanceData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, self.ElasticcacheId)
ec, err := db.FetchByIdOrName(ctx, ElasticcacheManager, userCred, self.ElasticcacheId)
if err != nil {
return nil, fmt.Errorf("getting elastic cache instance failed")
}
+14 -13
View File
@@ -166,7 +166,7 @@ func elasticcacheSubResourceFetchOwnerId(ctx context.Context, data jsonutils.JSO
parentId := jsonutils.GetAnyString(data, []string{"elasticcache_id", "elasticcache"})
if len(parentId) > 0 {
userCred := policy.FetchUserCredential(ctx)
ec, err := db.FetchByIdOrName(ElasticcacheManager, userCred, parentId)
ec, err := db.FetchByIdOrName(ctx, ElasticcacheManager, userCred, parentId)
if err != nil {
log.Errorf("elasticcache sub resource FetchOwnerId %s", err)
return nil, nil
@@ -179,7 +179,7 @@ func elasticcacheSubResourceFetchOwnerId(ctx context.Context, data jsonutils.JSO
}
// elastic cache 子资源获取owner query
func elasticcacheSubResourceFetchOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
func elasticcacheSubResourceFetchOwner(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
if userCred != nil {
var subq *sqlchemy.SSubQuery
@@ -817,7 +817,7 @@ func (manager *SElasticcacheManager) validateCreateData(ctx context.Context, use
if len(input.NetworkId) == 0 {
return nil, httperrors.NewMissingParameterError("network_id")
}
networkObj, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId)
networkObj, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId)
if err != nil {
return nil, fmt.Errorf("getting network failed")
}
@@ -829,7 +829,7 @@ func (manager *SElasticcacheManager) validateCreateData(ctx context.Context, use
if len(wire.ZoneId) > 0 {
input.ZoneId = wire.ZoneId
}
_, err = validators.ValidateModel(userCred, ZoneManager, &input.ZoneId)
_, err = validators.ValidateModel(ctx, userCred, ZoneManager, &input.ZoneId)
if err != nil {
return nil, err
}
@@ -845,7 +845,7 @@ func (manager *SElasticcacheManager) validateCreateData(ctx context.Context, use
input.CloudregionId = region.Id
provider := vpc.GetCloudprovider()
input.ManagerId = provider.Id
skuObj, err := validators.ValidateModel(userCred, ElasticcacheSkuManager, &input.InstanceType)
skuObj, err := validators.ValidateModel(ctx, userCred, ElasticcacheSkuManager, &input.InstanceType)
if err != nil {
return nil, err
}
@@ -868,7 +868,7 @@ func (manager *SElasticcacheManager) validateCreateData(ctx context.Context, use
}
for i := range input.SecgroupIds {
_, err = validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i])
_, err = validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i])
if err != nil {
return nil, err
}
@@ -1021,7 +1021,7 @@ func (self *SElasticcache) StartDeleteElasticcacheTask(ctx context.Context, user
func (self *SElasticcache) ValidatorChangeSpecData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
skuV := validators.NewModelIdOrNameValidator("sku", "elasticcachesku", self.GetOwnerId())
if err := skuV.Optional(false).Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := skuV.Optional(false).Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
@@ -1088,7 +1088,7 @@ func (self *SElasticcache) ValidatorUpdateAuthModeData(ctx context.Context, user
}
authModeV := validators.NewStringChoicesValidator("auth_mode", choices.NewChoices("on", "off"))
if err := authModeV.Optional(false).Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := authModeV.Optional(false).Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
@@ -1192,7 +1192,7 @@ func (self *SElasticcache) ValidatorSetMaintainTimeData(ctx context.Context, use
}
for _, v := range keyV {
if err := v.Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := v.Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
}
@@ -1236,7 +1236,7 @@ func (self *SElasticcache) ValidatorAllocatePublicConnectionData(ctx context.Con
portV := validators.NewRangeValidator("port", 1024, 65535)
portV.Default(6379).Optional(true)
if err := portV.Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := portV.Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
@@ -1361,7 +1361,7 @@ func (self *SElasticcache) ValidatorUpdateBackupPolicyData(ctx context.Context,
}
for _, v := range keyV {
if err := v.Validate(data.(*jsonutils.JSONDict)); err != nil {
if err := v.Validate(ctx, data.(*jsonutils.JSONDict)); err != nil {
return nil, err
}
}
@@ -1479,6 +1479,7 @@ func (self *SElasticcache) DeleteSubResources(ctx context.Context, userCred mccl
}
func (man *SElasticcacheManager) TotalCount(
ctx context.Context,
scope rbacscope.TRbacScope,
ownerId mcclient.IIdentityProvider,
rangeObjs []db.IStandaloneModel,
@@ -1486,7 +1487,7 @@ func (man *SElasticcacheManager) TotalCount(
policyResult rbacutils.SPolicyResult,
) (int, error) {
q := man.Query()
q = db.ObjectIdQueryWithPolicyResult(q, man, policyResult)
q = db.ObjectIdQueryWithPolicyResult(ctx, q, man, policyResult)
vpcs := VpcManager.Query().SubQuery()
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = scopeOwnerIdFilter(q, scope, ownerId)
@@ -1827,7 +1828,7 @@ func (self *SElasticcache) validateSecgroupInput(secgroups []string) error {
func (self *SElasticcache) checkingSecgroupIds(ctx context.Context, userCred mcclient.TokenCredential, secgroupIds []string) ([]string, error) {
for i := range secgroupIds {
_, err := validators.ValidateModel(userCred, SecurityGroupManager, &secgroupIds[i])
_, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &secgroupIds[i])
if err != nil {
return nil, err
}
@@ -191,8 +191,8 @@ func (manager *SElasticcacheParameterManager) FetchOwnerId(ctx context.Context,
return elasticcacheSubResourceFetchOwnerId(ctx, data)
}
func (manager *SElasticcacheParameterManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(q, ownerId, scope)
func (manager *SElasticcacheParameterManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery {
return elasticcacheSubResourceFetchOwner(ctx, q, ownerId, scope)
}
func (self *SElasticcacheParameter) GetOwnerId() mcclient.IIdentityProvider {
+1 -1
View File
@@ -641,7 +641,7 @@ func (manager *SElasticcacheSkuManager) PerformActionSync(ctx context.Context, u
}
for _, v := range keyV {
if err := v.Validate(data); err != nil {
if err := v.Validate(ctx, data); err != nil {
return nil, err
}
}
+3 -3
View File
@@ -42,8 +42,8 @@ type SElasticcacheResourceBaseManager struct {
SZoneResourceBaseManager
}
func ValidateElasticcacheResourceInput(userCred mcclient.TokenCredential, input api.ELasticcacheResourceInput) (*SElasticcache, api.ELasticcacheResourceInput, error) {
cacheObj, err := ElasticcacheManager.FetchByIdOrName(userCred, input.ElasticcacheId)
func ValidateElasticcacheResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.ELasticcacheResourceInput) (*SElasticcache, api.ELasticcacheResourceInput, error) {
cacheObj, err := ElasticcacheManager.FetchByIdOrName(ctx, userCred, input.ElasticcacheId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ElasticcacheManager.Keyword(), input.ElasticcacheId)
@@ -137,7 +137,7 @@ func (manager *SElasticcacheResourceBaseManager) ListItemFilter(
query api.ElasticcacheFilterListInput,
) (*sqlchemy.SQuery, error) {
if len(query.ElasticcacheId) > 0 {
dbObj, _, err := ValidateElasticcacheResourceInput(userCred, query.ELasticcacheResourceInput)
dbObj, _, err := ValidateElasticcacheResourceInput(ctx, userCred, query.ELasticcacheResourceInput)
if err != nil {
return nil, errors.Wrap(err, "ValidateElasticcacheResourceInput")
}
+21 -17
View File
@@ -150,7 +150,7 @@ func (manager *SElasticipManager) ListItemFilter(
q = q.Equals("status", api.EIP_STATUS_READY)
switch associateType {
case api.EIP_ASSOCIATE_TYPE_SERVER:
serverObj, err := GuestManager.FetchByIdOrName(userCred, associateId)
serverObj, err := GuestManager.FetchByIdOrName(ctx, userCred, associateId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError("server %s not found", associateId)
@@ -181,7 +181,7 @@ func (manager *SElasticipManager) ListItemFilter(
q = q.IsNullOrEmpty("manager_id")
}
case api.EIP_ASSOCIATE_TYPE_INSTANCE_GROUP:
groupObj, err := GroupManager.FetchByIdOrName(userCred, associateId)
groupObj, err := GroupManager.FetchByIdOrName(ctx, userCred, associateId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(GroupManager.Keyword(), associateId)
@@ -207,7 +207,7 @@ func (manager *SElasticipManager) ListItemFilter(
q = q.Filter(sqlchemy.NotEquals(q.Field("network_id"), net.Id))
q = q.IsNullOrEmpty("manager_id")
case api.EIP_ASSOCIATE_TYPE_NAT_GATEWAY:
_nat, err := validators.ValidateModel(userCred, NatGatewayManager, &query.UsableEipForAssociateId)
_nat, err := validators.ValidateModel(ctx, userCred, NatGatewayManager, &query.UsableEipForAssociateId)
if err != nil {
return nil, err
}
@@ -227,7 +227,7 @@ func (manager *SElasticipManager) ListItemFilter(
),
)
case api.EIP_ASSOCIATE_TYPE_LOADBALANCER:
_lb, err := validators.ValidateModel(userCred, LoadbalancerManager, &query.UsableEipForAssociateId)
_lb, err := validators.ValidateModel(ctx, userCred, LoadbalancerManager, &query.UsableEipForAssociateId)
if err != nil {
return nil, err
}
@@ -969,7 +969,7 @@ func (manager *SElasticipManager) ValidateCreateData(ctx context.Context, userCr
if input.CloudregionId == "" {
input.CloudregionId = api.DEFAULT_REGION_ID
}
obj, err := CloudregionManager.FetchByIdOrName(nil, input.CloudregionId)
obj, err := CloudregionManager.FetchByIdOrName(ctx, nil, input.CloudregionId)
if err != nil {
if err != sql.ErrNoRows {
return input, httperrors.NewGeneralError(err)
@@ -1005,7 +1005,7 @@ func (manager *SElasticipManager) ValidateCreateData(ctx context.Context, userCr
var provider *SCloudprovider = nil
if input.ManagerId != "" {
providerObj, err := CloudproviderManager.FetchByIdOrName(nil, input.ManagerId)
providerObj, err := CloudproviderManager.FetchByIdOrName(ctx, nil, input.ManagerId)
if err != nil {
if err != sql.ErrNoRows {
return input, httperrors.NewGeneralError(err)
@@ -1128,7 +1128,7 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient.
switch input.InstanceType {
case api.EIP_ASSOCIATE_TYPE_SERVER:
vmObj, err := GuestManager.FetchByIdOrName(userCred, input.InstanceId)
vmObj, err := GuestManager.FetchByIdOrName(ctx, userCred, input.InstanceId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError("server %s not found", input.InstanceId)
@@ -1201,7 +1201,7 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient.
}
input.InstanceExternalId = server.ExternalId
case api.EIP_ASSOCIATE_TYPE_INSTANCE_GROUP:
grpObj, err := GroupManager.FetchByIdOrName(userCred, input.InstanceId)
grpObj, err := GroupManager.FetchByIdOrName(ctx, userCred, input.InstanceId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError("instance group %s not found", input.InstanceId)
@@ -1230,7 +1230,7 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient.
}
case api.EIP_ASSOCIATE_TYPE_NAT_GATEWAY:
natgwObj, err := NatGatewayManager.FetchByIdOrName(userCred, input.InstanceId)
natgwObj, err := NatGatewayManager.FetchByIdOrName(ctx, userCred, input.InstanceId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError("nat gateway %s not found", input.InstanceId)
@@ -1242,7 +1242,7 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient.
lockman.LockObject(ctx, natgw)
defer lockman.ReleaseObject(ctx, natgw)
case api.EIP_ASSOCIATE_TYPE_LOADBALANCER:
obj, err := LoadbalancerManager.FetchByIdOrName(userCred, input.InstanceId)
obj, err := LoadbalancerManager.FetchByIdOrName(ctx, userCred, input.InstanceId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return input, httperrors.NewResourceNotFoundError("loadbalancer %s not found", input.InstanceId)
@@ -1660,7 +1660,7 @@ func (manager *SElasticipManager) NewEipForVMOnHost(ctx context.Context, userCre
wireq := WireManager.Query().SubQuery()
scope, _ := policy.PolicyManager.AllowScope(userCred, consts.GetServiceType(), NetworkManager.KeywordPlural(), policy.PolicyActionList)
q = NetworkManager.FilterByOwner(q, NetworkManager, userCred, userCred, scope)
q = NetworkManager.FilterByOwner(ctx, q, NetworkManager, userCred, userCred, scope)
q = q.Join(wireq, sqlchemy.Equals(wireq.Field("id"), q.Field("wire_id"))).
Filter(sqlchemy.Equals(wireq.Field("zone_id"), zoneId))
@@ -1842,7 +1842,9 @@ func (manager *SElasticipManager) usageQByRanges(q *sqlchemy.SQuery, rangeObjs [
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)
}
func (manager *SElasticipManager) usageQ(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) *sqlchemy.SQuery {
func (manager *SElasticipManager) usageQ(
ctx context.Context,
scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) *sqlchemy.SQuery {
q = manager.usageQByRanges(q, rangeObjs)
q = manager.usageQByCloudEnv(q, providers, brands, cloudEnv)
switch scope {
@@ -1853,29 +1855,31 @@ func (manager *SElasticipManager) usageQ(scope rbacscope.TRbacScope, ownerId mcc
case rbacscope.ScopeProject:
q = q.Equals("tenant_id", ownerId.GetProjectId())
}
q = db.ObjectIdQueryWithPolicyResult(q, manager, policyResult)
q = db.ObjectIdQueryWithPolicyResult(ctx, q, manager, policyResult)
return q
}
func (manager *SElasticipManager) TotalCount(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) EipUsage {
func (manager *SElasticipManager) TotalCount(
ctx context.Context,
scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) EipUsage {
usage := EipUsage{}
q1sq := manager.Query().SubQuery()
q1 := q1sq.Query(
sqlchemy.COUNT("public_ip_count", q1sq.Field("id")),
sqlchemy.SUM("public_ip_bandwidth", q1sq.Field("bandwidth")),
).Equals("mode", api.EIP_MODE_INSTANCE_PUBLICIP)
q1 = manager.usageQ(scope, ownerId, q1, rangeObjs, providers, brands, cloudEnv, policyResult)
q1 = manager.usageQ(ctx, scope, ownerId, q1, rangeObjs, providers, brands, cloudEnv, policyResult)
q2sq := manager.Query().SubQuery()
q2 := q2sq.Query(
sqlchemy.COUNT("eip_count", q2sq.Field("id")),
sqlchemy.SUM("eip_bandwidth", q2sq.Field("bandwidth")),
).Equals("mode", api.EIP_MODE_STANDALONE_EIP)
q2 = manager.usageQ(scope, ownerId, q2, rangeObjs, providers, brands, cloudEnv, policyResult)
q2 = manager.usageQ(ctx, scope, ownerId, q2, rangeObjs, providers, brands, cloudEnv, policyResult)
q3sq := manager.Query().SubQuery()
q3 := q3sq.Query(
sqlchemy.COUNT("eip_used_count", q3sq.Field("id")),
).Equals("mode", api.EIP_MODE_STANDALONE_EIP).IsNotEmpty("associate_type")
q3 = manager.usageQ(scope, ownerId, q3, rangeObjs, providers, brands, cloudEnv, policyResult)
q3 = manager.usageQ(ctx, scope, ownerId, q3, rangeObjs, providers, brands, cloudEnv, policyResult)
err := q1.First(&usage)
if err != nil {
+4 -4
View File
@@ -87,7 +87,7 @@ func (manager *SExternalProjectManager) ValidateCreateData(
if len(input.CloudaccountId) == 0 {
return input, httperrors.NewMissingParameterError("cloudaccount_id")
}
_account, err := validators.ValidateModel(userCred, CloudaccountManager, &input.CloudaccountId)
_account, err := validators.ValidateModel(ctx, userCred, CloudaccountManager, &input.CloudaccountId)
if err != nil {
return input, err
}
@@ -97,7 +97,7 @@ func (manager *SExternalProjectManager) ValidateCreateData(
if len(input.ManagerId) == 0 {
return input, httperrors.NewMissingParameterError("manager_id")
}
_, err := validators.ValidateModel(userCred, CloudproviderManager, &input.ManagerId)
_, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.ManagerId)
if err != nil {
return input, err
}
@@ -718,7 +718,7 @@ func (manager *SExternalProjectManager) ListItemFilter(
if len(managerStr) == 0 {
continue
}
providerObj, err := manager.FetchByIdOrName(userCred, managerStr)
providerObj, err := manager.FetchByIdOrName(ctx, userCred, managerStr)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
@@ -736,7 +736,7 @@ func (manager *SExternalProjectManager) ListItemFilter(
if len(query.CloudaccountId) > 0 {
accountIds := []string{}
for _, _account := range query.CloudaccountId {
account, err := CloudaccountManager.FetchByIdOrName(userCred, _account)
account, err := CloudaccountManager.FetchByIdOrName(ctx, userCred, _account)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudaccount", _account)
+2 -2
View File
@@ -133,7 +133,7 @@ func (manager *SFileSystemManager) ListItemFilter(
func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.FileSystemCreateInput) (api.FileSystemCreateInput, error) {
var err error
if len(input.NetworkId) > 0 {
net, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId)
net, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId)
if err != nil {
return input, err
}
@@ -148,7 +148,7 @@ func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred
if len(input.ZoneId) == 0 {
return input, httperrors.NewMissingParameterError("zone_id")
}
_zone, err := validators.ValidateModel(userCred, ZoneManager, &input.ZoneId)
_zone, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.ZoneId)
if err != nil {
return input, err
}
+3 -3
View File
@@ -37,8 +37,8 @@ type SGlobalVpcResourceBase struct {
type SGlobalVpcResourceBaseManager struct{}
func ValidateGlobalvpcResourceInput(userCred mcclient.TokenCredential, input api.GlobalVpcResourceInput) (*SGlobalVpc, api.GlobalVpcResourceInput, error) {
gvpcObj, err := GlobalVpcManager.FetchByIdOrName(userCred, input.GlobalvpcId)
func ValidateGlobalvpcResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.GlobalVpcResourceInput) (*SGlobalVpc, api.GlobalVpcResourceInput, error) {
gvpcObj, err := GlobalVpcManager.FetchByIdOrName(ctx, userCred, input.GlobalvpcId)
if err != nil {
if errors.Cause(err) == sql.ErrNoRows {
return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", GlobalVpcManager.Keyword(), input.GlobalvpcId)
@@ -100,7 +100,7 @@ func (manager *SGlobalVpcResourceBaseManager) ListItemFilter(
query api.GlobalVpcResourceListInput,
) (*sqlchemy.SQuery, error) {
if len(query.GlobalvpcId) > 0 {
globalVpcObj, _, err := ValidateGlobalvpcResourceInput(userCred, query.GlobalVpcResourceInput)
globalVpcObj, _, err := ValidateGlobalvpcResourceInput(ctx, userCred, query.GlobalVpcResourceInput)
if err != nil {
return nil, errors.Wrap(err, "ValidateGlobalvpcResourceInput")
}
+1 -1
View File
@@ -134,7 +134,7 @@ func (manager *SGlobalVpcManager) ValidateCreateData(
if len(input.CloudproviderId) == 0 {
return input, httperrors.NewMissingParameterError("cloudprovider_id")
}
_, err = validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId)
_, err = validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId)
if err != nil {
return input, err
}

Some files were not shown because too many files have changed in this diff Show More