From 81a12d1f16d07fb9ce130c44a931d3559d6d9dac Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Mon, 5 Feb 2024 20:06:40 +0800 Subject: [PATCH] feature: allow manager to preapre query context (#19451) Co-authored-by: Qiu Jian --- pkg/ansibleserver/models/ansibleplaybooks.go | 4 +- .../models/ansibleplaybooks_validator.go | 2 +- pkg/cloudcommon/db/apply_manager_method.go | 5 +- pkg/cloudcommon/db/context.go | 52 +++ pkg/cloudcommon/db/db_dispatcher.go | 17 +- pkg/cloudcommon/db/db_joint_dispatcher.go | 60 ++-- pkg/cloudcommon/db/domain.go | 12 +- pkg/cloudcommon/db/domainresource.go | 2 +- pkg/cloudcommon/db/fetch.go | 12 +- pkg/cloudcommon/db/infraresource.go | 4 +- pkg/cloudcommon/db/interface.go | 7 +- pkg/cloudcommon/db/metadata.go | 12 +- pkg/cloudcommon/db/metadataresource.go | 30 +- pkg/cloudcommon/db/modelbase.go | 10 +- pkg/cloudcommon/db/namevalidator.go | 28 +- pkg/cloudcommon/db/opslog.go | 2 +- pkg/cloudcommon/db/project.go | 16 +- pkg/cloudcommon/db/proxy/proxysetting.go | 4 +- pkg/cloudcommon/db/scoperesource.go | 2 +- pkg/cloudcommon/db/sharablebase.go | 16 +- pkg/cloudcommon/db/sharablevirtual.go | 4 +- pkg/cloudcommon/db/standalone.go | 10 +- pkg/cloudcommon/db/standalone_anon.go | 6 +- .../db/statusinfrasuserresource.go | 2 +- pkg/cloudcommon/db/taskman/tasks.go | 2 +- pkg/cloudcommon/db/userresources.go | 10 +- pkg/cloudcommon/db/virtualjointbase.go | 6 +- pkg/cloudcommon/db/virtualresource.go | 10 +- pkg/cloudcommon/validators/misc.go | 6 +- pkg/cloudcommon/validators/validators.go | 45 +-- .../validators/validators_actor.go | 3 +- pkg/cloudcommon/validators/validators_cert.go | 10 +- .../validators/validators_cert_test.go | 3 +- .../validators/validators_sshkey.go | 4 +- .../validators/validators_string.go | 4 +- pkg/cloudcommon/validators/validators_test.go | 5 +- pkg/cloudevent/models/cloudevents.go | 4 +- pkg/cloudid/models/cloudaccountresource.go | 2 +- pkg/cloudid/models/cloudgroupjoints.go | 2 +- pkg/cloudid/models/cloudgroupresource.go | 2 +- pkg/cloudid/models/cloudpolicycaches.go | 4 +- pkg/cloudid/models/cloudpolicyresource.go | 2 +- pkg/cloudid/models/cloudproviderresource.go | 2 +- pkg/cloudid/models/clouduserresource.go | 2 +- pkg/cloudid/models/saml_provider.go | 2 +- pkg/cloudid/models/samluser.go | 4 +- pkg/cloudnet/models/ifaces.go | 2 +- pkg/cloudnet/models/routers.go | 10 +- pkg/cloudnet/models/routes.go | 8 +- pkg/cloudnet/models/rules.go | 6 +- pkg/cloudproxy/models/forwards.go | 6 +- pkg/cloudproxy/models/proxy_agents.go | 4 +- pkg/cloudproxy/models/proxy_endpoints.go | 6 +- pkg/cloudproxy/models/proxy_matches.go | 6 +- pkg/compute/guestdrivers/aws.go | 2 +- pkg/compute/guestdrivers/baremetals.go | 4 +- pkg/compute/guestdrivers/kvm.go | 4 +- pkg/compute/guestdrivers/managedvirtual.go | 4 +- .../guestdrivers/types/guest_forward.go | 14 +- pkg/compute/guestdrivers/virtualization.go | 4 +- pkg/compute/models/access_group_resource.go | 2 +- pkg/compute/models/access_group_rules.go | 6 +- pkg/compute/models/access_groups.go | 4 +- pkg/compute/models/baremetalagents.go | 4 +- pkg/compute/models/buckets.go | 8 +- pkg/compute/models/cachedimages.go | 10 +- pkg/compute/models/capabilities.go | 63 ++-- pkg/compute/models/cdn_domains.go | 2 +- pkg/compute/models/cloudaccounts.go | 22 +- pkg/compute/models/cloudaccounts_prepare.go | 18 +- pkg/compute/models/cloudproviders.go | 42 +-- pkg/compute/models/cloudregionresource.go | 10 +- pkg/compute/models/cloudregions.go | 8 +- pkg/compute/models/dbinstance_accounts.go | 4 +- pkg/compute/models/dbinstance_backups.go | 2 +- pkg/compute/models/dbinstance_databases.go | 4 +- pkg/compute/models/dbinstance_privileges.go | 2 +- pkg/compute/models/dbinstance_skus.go | 6 +- pkg/compute/models/dbinstanceresource.go | 6 +- pkg/compute/models/dbinstances.go | 23 +- pkg/compute/models/diskbackups.go | 4 +- pkg/compute/models/diskresource.go | 6 +- pkg/compute/models/disks.go | 36 +- pkg/compute/models/dnsrecords.go | 6 +- pkg/compute/models/dnszoneresource.go | 2 +- pkg/compute/models/dnszones.go | 8 +- pkg/compute/models/dynamicschedtags.go | 16 +- pkg/compute/models/elastic_search.go | 3 +- pkg/compute/models/elasticcache_accounts.go | 8 +- pkg/compute/models/elasticcache_acls.go | 10 +- pkg/compute/models/elasticcache_backups.go | 8 +- pkg/compute/models/elasticcache_instances.go | 27 +- pkg/compute/models/elasticcache_parameters.go | 4 +- pkg/compute/models/elasticcache_skus.go | 2 +- pkg/compute/models/elasticcacheresource.go | 6 +- pkg/compute/models/elasticips.go | 38 ++- pkg/compute/models/external_projects.go | 8 +- pkg/compute/models/filesystem.go | 4 +- pkg/compute/models/globalvpcresource.go | 6 +- pkg/compute/models/globalvpcs.go | 2 +- pkg/compute/models/groupresource.go | 6 +- pkg/compute/models/groups.go | 8 +- pkg/compute/models/guest_actions.go | 70 ++-- pkg/compute/models/guest_convert.go | 4 +- pkg/compute/models/guest_migrate_network.go | 6 +- pkg/compute/models/guest_secgroups.go | 8 +- pkg/compute/models/guest_template.go | 6 +- pkg/compute/models/guestnetworks.go | 4 +- pkg/compute/models/guestresource.go | 6 +- pkg/compute/models/guests.go | 51 +-- pkg/compute/models/guesttemplate_resource.go | 2 +- pkg/compute/models/helper.go | 10 +- pkg/compute/models/hostresource.go | 8 +- pkg/compute/models/hosts.go | 45 +-- pkg/compute/models/hoststorages.go | 4 +- pkg/compute/models/infrasquota.go | 4 +- pkg/compute/models/instance_backup.go | 2 +- pkg/compute/models/instance_snapshots.go | 6 +- pkg/compute/models/inter_vpc_network.go | 4 +- .../models/inter_vpc_network_routeset.go | 2 +- pkg/compute/models/intervpcnetworkresource.go | 2 +- pkg/compute/models/isolated_device_models.go | 4 +- pkg/compute/models/isolated_devices.go | 16 +- pkg/compute/models/kafka.go | 3 +- pkg/compute/models/keypairs.go | 4 +- pkg/compute/models/kube_clusters.go | 4 +- pkg/compute/models/kube_node_pools.go | 8 +- pkg/compute/models/kube_nodes.go | 2 +- pkg/compute/models/loadbalanceraclresource.go | 2 +- pkg/compute/models/loadbalanceracls.go | 2 +- pkg/compute/models/loadbalanceragents.go | 12 +- .../models/loadbalanceragents_deploy.go | 4 +- .../loadbalancerbackendgroupresource.go | 2 +- .../models/loadbalancerbackendgroups.go | 10 +- pkg/compute/models/loadbalancerbackends.go | 10 +- pkg/compute/models/loadbalancercachedacls.go | 2 +- .../models/loadbalancercachedcertificates.go | 2 +- .../models/loadbalancercertificateresource.go | 2 +- .../models/loadbalancercertificates.go | 2 +- .../models/loadbalancerclusterresource.go | 6 +- pkg/compute/models/loadbalancerclusters.go | 6 +- .../models/loadbalancerlistenerresource.go | 2 +- .../models/loadbalancerlistenerrules.go | 8 +- pkg/compute/models/loadbalancerlisteners.go | 16 +- pkg/compute/models/loadbalancernetworks.go | 2 +- pkg/compute/models/loadbalancerresource.go | 6 +- pkg/compute/models/loadbalancers.go | 27 +- pkg/compute/models/managedresource.go | 22 +- pkg/compute/models/modelarts_pools.go | 4 +- pkg/compute/models/mongodb.go | 3 +- pkg/compute/models/mount_targets.go | 10 +- pkg/compute/models/natdtable.go | 2 +- pkg/compute/models/natgatewayresource.go | 6 +- pkg/compute/models/natgateways.go | 13 +- pkg/compute/models/natstable.go | 6 +- pkg/compute/models/net_tap_flows.go | 12 +- pkg/compute/models/net_tap_services.go | 6 +- pkg/compute/models/netinterfaces.go | 4 +- pkg/compute/models/network_ip_mac.go | 14 +- pkg/compute/models/networkaddresses.go | 28 +- pkg/compute/models/networkinterfacenetwork.go | 2 +- pkg/compute/models/networkresource.go | 6 +- pkg/compute/models/networks.go | 103 +++--- .../models/networks_used_addresses_query.go | 37 ++- .../models/policy_definition_resource.go | 2 +- .../models/project_mapping_resource.go | 4 +- pkg/compute/models/quotas.go | 2 +- pkg/compute/models/regionquota.go | 16 +- pkg/compute/models/reservedips.go | 4 +- pkg/compute/models/routetable_routesets.go | 6 +- pkg/compute/models/routetableresource.go | 2 +- pkg/compute/models/routetables.go | 12 +- pkg/compute/models/scaling_activity.go | 2 +- pkg/compute/models/scaling_group.go | 10 +- pkg/compute/models/scaling_group_resource.go | 2 +- pkg/compute/models/scaling_policy.go | 2 +- pkg/compute/models/schedpolicies.go | 10 +- pkg/compute/models/schedtagresource.go | 6 +- pkg/compute/models/schedtags.go | 10 +- pkg/compute/models/secgroupresource.go | 6 +- pkg/compute/models/secgrouprules.go | 6 +- pkg/compute/models/secgroups.go | 14 +- pkg/compute/models/server_skus.go | 8 +- pkg/compute/models/service_catalog.go | 6 +- pkg/compute/models/snapshotpolicy.go | 6 +- pkg/compute/models/snapshots.go | 8 +- pkg/compute/models/storagecachedimages.go | 2 +- pkg/compute/models/storagecacheresource.go | 6 +- pkg/compute/models/storagecaches.go | 2 +- pkg/compute/models/storageresource.go | 6 +- pkg/compute/models/storages.go | 51 +-- pkg/compute/models/vpc_peering_connections.go | 6 +- pkg/compute/models/vpcresource.go | 2 +- pkg/compute/models/vpcs.go | 21 +- pkg/compute/models/waf_instances.go | 8 +- pkg/compute/models/waf_rules.go | 12 +- pkg/compute/models/wireresource.go | 6 +- pkg/compute/models/wires.go | 89 ++--- pkg/compute/models/zoneresource.go | 6 +- pkg/compute/models/zones.go | 14 +- pkg/compute/regiondrivers/aliyun.go | 4 +- pkg/compute/regiondrivers/aws.go | 2 +- pkg/compute/regiondrivers/azure.go | 2 +- pkg/compute/regiondrivers/ctyun.go | 2 +- pkg/compute/regiondrivers/google.go | 6 +- pkg/compute/regiondrivers/huawei.go | 6 +- pkg/compute/regiondrivers/kvm.go | 14 +- pkg/compute/regiondrivers/managedvirtual.go | 14 +- pkg/compute/regiondrivers/openstack.go | 2 +- pkg/compute/regiondrivers/qcloud.go | 4 +- pkg/compute/regiondrivers/ucloud.go | 2 +- pkg/compute/regiondrivers/volcengine.go | 2 +- pkg/compute/regiondrivers/zstack.go | 2 +- pkg/compute/storagedrivers/slvm.go | 2 +- .../tasks/cloud_provider_sync_info_task.go | 8 +- pkg/compute/tasks/eip_associate_task.go | 14 +- .../tasks/networks_under_wire_merge_task.go | 2 +- pkg/compute/usages/handler.go | 310 +++++++++--------- pkg/compute/usages/history.go | 20 +- pkg/dns/dns.go | 3 +- pkg/image/models/image_guest.go | 6 +- pkg/image/models/images.go | 18 +- pkg/image/models/quotas.go | 2 +- pkg/image/usages/handler.go | 12 +- pkg/keystone/driver/cas/class.go | 2 +- pkg/keystone/driver/oidc/class.go | 2 +- pkg/keystone/driver/saml/class.go | 2 +- pkg/keystone/driver/utils/validate.go | 7 +- pkg/keystone/models/credentials.go | 4 +- pkg/keystone/models/domains.go | 8 +- pkg/keystone/models/endpoints.go | 6 +- pkg/keystone/models/groupresource.go | 2 +- pkg/keystone/models/groups.go | 10 +- pkg/keystone/models/identitybase.go | 8 +- pkg/keystone/models/organization_nodes.go | 2 +- pkg/keystone/models/policies.go | 10 +- pkg/keystone/models/projectresource.go | 2 +- pkg/keystone/models/projects.go | 26 +- pkg/keystone/models/regionresource.go | 2 +- pkg/keystone/models/rolepolicies.go | 21 +- pkg/keystone/models/roleresource.go | 2 +- pkg/keystone/models/roles.go | 18 +- pkg/keystone/models/servicecertificates.go | 12 +- pkg/keystone/models/serviceresource.go | 2 +- pkg/keystone/models/usages.go | 16 +- pkg/keystone/models/userresource.go | 2 +- pkg/keystone/models/users.go | 24 +- pkg/keystone/service/localpolicy.go | 2 +- pkg/keystone/service/override.go | 4 +- pkg/keystone/tokens/policy.go | 4 +- pkg/keystone/usages/handler.go | 2 +- pkg/monitor/models/alertrecord.go | 6 +- pkg/monitor/models/alertresource_alert.go | 4 +- pkg/monitor/models/metric.go | 2 +- pkg/monitor/models/metric_field.go | 4 +- pkg/monitor/models/metric_joint.go | 4 +- pkg/monitor/models/monitor_resource.go | 2 +- pkg/monitor/models/monitor_resource_alert.go | 6 +- pkg/monitor/models/monitorscoperesource.go | 2 +- pkg/monitor/models/nodealert.go | 2 +- pkg/notify/models/config.go | 2 +- pkg/notify/models/notification.go | 4 +- pkg/notify/models/receiver.go | 8 +- pkg/notify/models/subscriber.go | 2 +- .../models/scheduledtask_activity.go | 2 +- .../algorithm/predicates/quota_predicate.go | 6 +- pkg/scheduler/api/sched.go | 2 +- pkg/scheduler/handler/handler.go | 2 +- pkg/yunionconf/models/parameters.go | 2 +- pkg/yunionconf/models/scopedpolicybindings.go | 2 +- 270 files changed, 1460 insertions(+), 1323 deletions(-) create mode 100644 pkg/cloudcommon/db/context.go diff --git a/pkg/ansibleserver/models/ansibleplaybooks.go b/pkg/ansibleserver/models/ansibleplaybooks.go index 0967dc5d4b..8f4c26dde2 100644 --- a/pkg/ansibleserver/models/ansibleplaybooks.go +++ b/pkg/ansibleserver/models/ansibleplaybooks.go @@ -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 diff --git a/pkg/ansibleserver/models/ansibleplaybooks_validator.go b/pkg/ansibleserver/models/ansibleplaybooks_validator.go index 6a24acb15d..3afe5ece08 100644 --- a/pkg/ansibleserver/models/ansibleplaybooks_validator.go +++ b/pkg/ansibleserver/models/ansibleplaybooks_validator.go @@ -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 { diff --git a/pkg/cloudcommon/db/apply_manager_method.go b/pkg/cloudcommon/db/apply_manager_method.go index a50d8722ed..e653e33674 100644 --- a/pkg/cloudcommon/db/apply_manager_method.go +++ b/pkg/cloudcommon/db/apply_manager_method.go @@ -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 } diff --git a/pkg/cloudcommon/db/context.go b/pkg/cloudcommon/db/context.go new file mode 100644 index 0000000000..075581cf4b --- /dev/null +++ b/pkg/cloudcommon/db/context.go @@ -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) +} diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 0e74733d4e..1639a037c6 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -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 } diff --git a/pkg/cloudcommon/db/db_joint_dispatcher.go b/pkg/cloudcommon/db/db_joint_dispatcher.go index a5cca6a52f..d3cd414ebe 100644 --- a/pkg/cloudcommon/db/db_joint_dispatcher.go +++ b/pkg/cloudcommon/db/db_joint_dispatcher.go @@ -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 { diff --git a/pkg/cloudcommon/db/domain.go b/pkg/cloudcommon/db/domain.go index 9297ce5411..c0eb905130 100644 --- a/pkg/cloudcommon/db/domain.go +++ b/pkg/cloudcommon/db/domain.go @@ -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 } diff --git a/pkg/cloudcommon/db/domainresource.go b/pkg/cloudcommon/db/domainresource.go index 5badcacfd8..5259bce695 100644 --- a/pkg/cloudcommon/db/domainresource.go +++ b/pkg/cloudcommon/db/domainresource.go @@ -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() diff --git a/pkg/cloudcommon/db/fetch.go b/pkg/cloudcommon/db/fetch.go index c54ff5b6d6..70be13bf03 100644 --- a/pkg/cloudcommon/db/fetch.go +++ b/pkg/cloudcommon/db/fetch.go @@ -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 { diff --git a/pkg/cloudcommon/db/infraresource.go b/pkg/cloudcommon/db/infraresource.go index d4e7312d1e..c0cacae6e2 100644 --- a/pkg/cloudcommon/db/infraresource.go +++ b/pkg/cloudcommon/db/infraresource.go @@ -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 { diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index 532785b2c3..62b9b52191 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -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 { diff --git a/pkg/cloudcommon/db/metadata.go b/pkg/cloudcommon/db/metadata.go index 59baa44694..2e517304c3 100644 --- a/pkg/cloudcommon/db/metadata.go +++ b/pkg/cloudcommon/db/metadata.go @@ -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 diff --git a/pkg/cloudcommon/db/metadataresource.go b/pkg/cloudcommon/db/metadataresource.go index ea592c2d5e..1028642c24 100644 --- a/pkg/cloudcommon/db/metadataresource.go +++ b/pkg/cloudcommon/db/metadataresource.go @@ -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)) diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 6c6aac4956..8e80ea40f7 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -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 } diff --git a/pkg/cloudcommon/db/namevalidator.go b/pkg/cloudcommon/db/namevalidator.go index 8b59ee3d22..71169db5cd 100644 --- a/pkg/cloudcommon/db/namevalidator.go +++ b/pkg/cloudcommon/db/namevalidator.go @@ -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 diff --git a/pkg/cloudcommon/db/opslog.go b/pkg/cloudcommon/db/opslog.go index 65953a8caf..6cc44b03d7 100644 --- a/pkg/cloudcommon/db/opslog.go +++ b/pkg/cloudcommon/db/opslog.go @@ -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: diff --git a/pkg/cloudcommon/db/project.go b/pkg/cloudcommon/db/project.go index f859a39456..06fa803a21 100644 --- a/pkg/cloudcommon/db/project.go +++ b/pkg/cloudcommon/db/project.go @@ -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 } diff --git a/pkg/cloudcommon/db/proxy/proxysetting.go b/pkg/cloudcommon/db/proxy/proxysetting.go index 548df07708..56cf6cf853 100644 --- a/pkg/cloudcommon/db/proxy/proxysetting.go +++ b/pkg/cloudcommon/db/proxy/proxysetting.go @@ -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) diff --git a/pkg/cloudcommon/db/scoperesource.go b/pkg/cloudcommon/db/scoperesource.go index 934fe35d5b..136fca3e3f 100644 --- a/pkg/cloudcommon/db/scoperesource.go +++ b/pkg/cloudcommon/db/scoperesource.go @@ -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 } diff --git a/pkg/cloudcommon/db/sharablebase.go b/pkg/cloudcommon/db/sharablebase.go index ff34a20990..e4f66a4387 100644 --- a/pkg/cloudcommon/db/sharablebase.go +++ b/pkg/cloudcommon/db/sharablebase.go @@ -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) } } } diff --git a/pkg/cloudcommon/db/sharablevirtual.go b/pkg/cloudcommon/db/sharablevirtual.go index 2f3d507025..888836ff32 100644 --- a/pkg/cloudcommon/db/sharablevirtual.go +++ b/pkg/cloudcommon/db/sharablevirtual.go @@ -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 { diff --git a/pkg/cloudcommon/db/standalone.go b/pkg/cloudcommon/db/standalone.go index adf95fb530..088fa43157 100644 --- a/pkg/cloudcommon/db/standalone.go +++ b/pkg/cloudcommon/db/standalone.go @@ -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") } diff --git a/pkg/cloudcommon/db/standalone_anon.go b/pkg/cloudcommon/db/standalone_anon.go index 8b92e1e41a..089a837737 100644 --- a/pkg/cloudcommon/db/standalone_anon.go +++ b/pkg/cloudcommon/db/standalone_anon.go @@ -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 } diff --git a/pkg/cloudcommon/db/statusinfrasuserresource.go b/pkg/cloudcommon/db/statusinfrasuserresource.go index 9c47f9ab3b..937aa6ed8b 100644 --- a/pkg/cloudcommon/db/statusinfrasuserresource.go +++ b/pkg/cloudcommon/db/statusinfrasuserresource.go @@ -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: diff --git a/pkg/cloudcommon/db/taskman/tasks.go b/pkg/cloudcommon/db/taskman/tasks.go index b5e1b6a13e..13ecbd7b8f 100644 --- a/pkg/cloudcommon/db/taskman/tasks.go +++ b/pkg/cloudcommon/db/taskman/tasks.go @@ -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: diff --git a/pkg/cloudcommon/db/userresources.go b/pkg/cloudcommon/db/userresources.go index e89908808c..08b0abe319 100644 --- a/pkg/cloudcommon/db/userresources.go +++ b/pkg/cloudcommon/db/userresources.go @@ -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) { diff --git a/pkg/cloudcommon/db/virtualjointbase.go b/pkg/cloudcommon/db/virtualjointbase.go index 19afe5add2..deccf47311 100644 --- a/pkg/cloudcommon/db/virtualjointbase.go +++ b/pkg/cloudcommon/db/virtualjointbase.go @@ -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()) diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index ddd5f885ca..42bff407c7 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -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() diff --git a/pkg/cloudcommon/validators/misc.go b/pkg/cloudcommon/validators/misc.go index 81fe95986e..56691cecfa 100644 --- a/pkg/cloudcommon/validators/misc.go +++ b/pkg/cloudcommon/validators/misc.go @@ -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 } diff --git a/pkg/cloudcommon/validators/validators.go b/pkg/cloudcommon/validators/validators.go index b61848cf81..a24d077d36 100644 --- a/pkg/cloudcommon/validators/validators.go +++ b/pkg/cloudcommon/validators/validators.go @@ -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) diff --git a/pkg/cloudcommon/validators/validators_actor.go b/pkg/cloudcommon/validators/validators_actor.go index 41888cfe4a..18138cebbf 100644 --- a/pkg/cloudcommon/validators/validators_actor.go +++ b/pkg/cloudcommon/validators/validators_actor.go @@ -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 } diff --git a/pkg/cloudcommon/validators/validators_cert.go b/pkg/cloudcommon/validators/validators_cert.go index e9cdf9f82a..a925865658 100644 --- a/pkg/cloudcommon/validators/validators_cert.go +++ b/pkg/cloudcommon/validators/validators_cert.go @@ -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 } } diff --git a/pkg/cloudcommon/validators/validators_cert_test.go b/pkg/cloudcommon/validators/validators_cert_test.go index c0c6e804d9..07aed79f12 100644 --- a/pkg/cloudcommon/validators/validators_cert_test.go +++ b/pkg/cloudcommon/validators/validators_cert_test.go @@ -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) } }) diff --git a/pkg/cloudcommon/validators/validators_sshkey.go b/pkg/cloudcommon/validators/validators_sshkey.go index 944ec1aee3..7d6381ab00 100644 --- a/pkg/cloudcommon/validators/validators_sshkey.go +++ b/pkg/cloudcommon/validators/validators_sshkey.go @@ -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 } diff --git a/pkg/cloudcommon/validators/validators_string.go b/pkg/cloudcommon/validators/validators_string.go index d7411e9baa..98ca4d15cb 100644 --- a/pkg/cloudcommon/validators/validators_string.go +++ b/pkg/cloudcommon/validators/validators_string.go @@ -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 } diff --git a/pkg/cloudcommon/validators/validators_test.go b/pkg/cloudcommon/validators/validators_test.go index af9b66d447..6ecb029bbf 100644 --- a/pkg/cloudcommon/validators/validators_test.go +++ b/pkg/cloudcommon/validators/validators_test.go @@ -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) diff --git a/pkg/cloudevent/models/cloudevents.go b/pkg/cloudevent/models/cloudevents.go index 8bbe5913d6..b98b55e181 100644 --- a/pkg/cloudevent/models/cloudevents.go +++ b/pkg/cloudevent/models/cloudevents.go @@ -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) { diff --git a/pkg/cloudid/models/cloudaccountresource.go b/pkg/cloudid/models/cloudaccountresource.go index b2659ffc0e..b4d780f7d1 100644 --- a/pkg/cloudid/models/cloudaccountresource.go +++ b/pkg/cloudid/models/cloudaccountresource.go @@ -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) diff --git a/pkg/cloudid/models/cloudgroupjoints.go b/pkg/cloudid/models/cloudgroupjoints.go index a3b1765bea..d6e0a82ada 100644 --- a/pkg/cloudid/models/cloudgroupjoints.go +++ b/pkg/cloudid/models/cloudgroupjoints.go @@ -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) diff --git a/pkg/cloudid/models/cloudgroupresource.go b/pkg/cloudid/models/cloudgroupresource.go index 8fae2b75c9..e891fada2b 100644 --- a/pkg/cloudid/models/cloudgroupresource.go +++ b/pkg/cloudid/models/cloudgroupresource.go @@ -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) diff --git a/pkg/cloudid/models/cloudpolicycaches.go b/pkg/cloudid/models/cloudpolicycaches.go index fc8e9f3b01..d1f707fa2b 100644 --- a/pkg/cloudid/models/cloudpolicycaches.go +++ b/pkg/cloudid/models/cloudpolicycaches.go @@ -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) diff --git a/pkg/cloudid/models/cloudpolicyresource.go b/pkg/cloudid/models/cloudpolicyresource.go index 3ca5835055..21e6f03baa 100644 --- a/pkg/cloudid/models/cloudpolicyresource.go +++ b/pkg/cloudid/models/cloudpolicyresource.go @@ -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) diff --git a/pkg/cloudid/models/cloudproviderresource.go b/pkg/cloudid/models/cloudproviderresource.go index 3ad29afa7d..71dcd546ab 100644 --- a/pkg/cloudid/models/cloudproviderresource.go +++ b/pkg/cloudid/models/cloudproviderresource.go @@ -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) diff --git a/pkg/cloudid/models/clouduserresource.go b/pkg/cloudid/models/clouduserresource.go index 97fa7a7e2d..7d3f6d0fec 100644 --- a/pkg/cloudid/models/clouduserresource.go +++ b/pkg/cloudid/models/clouduserresource.go @@ -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) diff --git a/pkg/cloudid/models/saml_provider.go b/pkg/cloudid/models/saml_provider.go index 7c7825f415..942d81d8a9 100644 --- a/pkg/cloudid/models/saml_provider.go +++ b/pkg/cloudid/models/saml_provider.go @@ -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 } diff --git a/pkg/cloudid/models/samluser.go b/pkg/cloudid/models/samluser.go index 7606f69eaf..df5d8f2920 100644 --- a/pkg/cloudid/models/samluser.go +++ b/pkg/cloudid/models/samluser.go @@ -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 } diff --git a/pkg/cloudnet/models/ifaces.go b/pkg/cloudnet/models/ifaces.go index 609ed1c824..e172d20896 100644 --- a/pkg/cloudnet/models/ifaces.go +++ b/pkg/cloudnet/models/ifaces.go @@ -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 { diff --git a/pkg/cloudnet/models/routers.go b/pkg/cloudnet/models/routers.go index 15a0db201e..218ce1700b 100644 --- a/pkg/cloudnet/models/routers.go +++ b/pkg/cloudnet/models/routers.go @@ -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) diff --git a/pkg/cloudnet/models/routes.go b/pkg/cloudnet/models/routes.go index a220f7f4c3..3c0ae648f0 100644 --- a/pkg/cloudnet/models/routes.go +++ b/pkg/cloudnet/models/routes.go @@ -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 } } diff --git a/pkg/cloudnet/models/rules.go b/pkg/cloudnet/models/rules.go index 6173d80498..47b1f4bc99 100644 --- a/pkg/cloudnet/models/rules.go +++ b/pkg/cloudnet/models/rules.go @@ -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 { diff --git a/pkg/cloudproxy/models/forwards.go b/pkg/cloudproxy/models/forwards.go index c718aa20fb..64fcb7f78e 100644 --- a/pkg/cloudproxy/models/forwards.go +++ b/pkg/cloudproxy/models/forwards.go @@ -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 } } diff --git a/pkg/cloudproxy/models/proxy_agents.go b/pkg/cloudproxy/models/proxy_agents.go index b487ec9b83..98b13e9266 100644 --- a/pkg/cloudproxy/models/proxy_agents.go +++ b/pkg/cloudproxy/models/proxy_agents.go @@ -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 } } diff --git a/pkg/cloudproxy/models/proxy_endpoints.go b/pkg/cloudproxy/models/proxy_endpoints.go index 843503d775..3a382f62b1 100644 --- a/pkg/cloudproxy/models/proxy_endpoints.go +++ b/pkg/cloudproxy/models/proxy_endpoints.go @@ -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 } } diff --git a/pkg/cloudproxy/models/proxy_matches.go b/pkg/cloudproxy/models/proxy_matches.go index 1dbc2c11bb..0277ac64e0 100644 --- a/pkg/cloudproxy/models/proxy_matches.go +++ b/pkg/cloudproxy/models/proxy_matches.go @@ -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 } diff --git a/pkg/compute/guestdrivers/aws.go b/pkg/compute/guestdrivers/aws.go index 43532c3f9c..3871621f71 100644 --- a/pkg/compute/guestdrivers/aws.go +++ b/pkg/compute/guestdrivers/aws.go @@ -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") } diff --git a/pkg/compute/guestdrivers/baremetals.go b/pkg/compute/guestdrivers/baremetals.go index 6bdf55e415..538715f99f 100644 --- a/pkg/compute/guestdrivers/baremetals.go +++ b/pkg/compute/guestdrivers/baremetals.go @@ -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) diff --git a/pkg/compute/guestdrivers/kvm.go b/pkg/compute/guestdrivers/kvm.go index 288237b257..12d2a984f1 100644 --- a/pkg/compute/guestdrivers/kvm.go +++ b/pkg/compute/guestdrivers/kvm.go @@ -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 } diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index e992187609..7f7a121d1e 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -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 } diff --git a/pkg/compute/guestdrivers/types/guest_forward.go b/pkg/compute/guestdrivers/types/guest_forward.go index 575aaabec1..0dc4e2e5b5 100644 --- a/pkg/compute/guestdrivers/types/guest_forward.go +++ b/pkg/compute/guestdrivers/types/guest_forward.go @@ -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 } } diff --git a/pkg/compute/guestdrivers/virtualization.go b/pkg/compute/guestdrivers/virtualization.go index a7165c71e9..f864860a01 100644 --- a/pkg/compute/guestdrivers/virtualization.go +++ b/pkg/compute/guestdrivers/virtualization.go @@ -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) diff --git a/pkg/compute/models/access_group_resource.go b/pkg/compute/models/access_group_resource.go index e6284bff38..baa10d51c4 100644 --- a/pkg/compute/models/access_group_resource.go +++ b/pkg/compute/models/access_group_resource.go @@ -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 } diff --git a/pkg/compute/models/access_group_rules.go b/pkg/compute/models/access_group_rules.go index 7c89b9c2e4..69c7400b6a 100644 --- a/pkg/compute/models/access_group_rules.go +++ b/pkg/compute/models/access_group_rules.go @@ -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 } diff --git a/pkg/compute/models/access_groups.go b/pkg/compute/models/access_groups.go index 3d7e596e15..07ae8b0cbd 100644 --- a/pkg/compute/models/access_groups.go +++ b/pkg/compute/models/access_groups.go @@ -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 } diff --git a/pkg/compute/models/baremetalagents.go b/pkg/compute/models/baremetalagents.go index 4bfc65d80b..950015a241 100644 --- a/pkg/compute/models/baremetalagents.go +++ b/pkg/compute/models/baremetalagents.go @@ -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") } diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index cb30673478..7dd461d236 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -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( diff --git a/pkg/compute/models/cachedimages.go b/pkg/compute/models/cachedimages.go index 96b2cf6cfc..9be61fdb0f 100644 --- a/pkg/compute/models/cachedimages.go +++ b/pkg/compute/models/cachedimages.go @@ -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") } diff --git a/pkg/compute/models/capabilities.go b/pkg/compute/models/capabilities.go index 5afa01c623..552f80da33 100644 --- a/pkg/compute/models/capabilities.go +++ b/pkg/compute/models/capabilities.go @@ -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 } diff --git a/pkg/compute/models/cdn_domains.go b/pkg/compute/models/cdn_domains.go index 6996d2b259..8578e815b1 100644 --- a/pkg/compute/models/cdn_domains.go +++ b/pkg/compute/models/cdn_domains.go @@ -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 } diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 67ae88c4ed..55377fee79 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -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") } diff --git a/pkg/compute/models/cloudaccounts_prepare.go b/pkg/compute/models/cloudaccounts_prepare.go index 0c1e4c0ac9..b444200bc5 100644 --- a/pkg/compute/models/cloudaccounts_prepare.go +++ b/pkg/compute/models/cloudaccounts_prepare.go @@ -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 } diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index ec00acc333..c3c34468e6 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -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 } diff --git a/pkg/compute/models/cloudregionresource.go b/pkg/compute/models/cloudregionresource.go index cf5181ed78..8aa6b3ffc2 100644 --- a/pkg/compute/models/cloudregionresource.go +++ b/pkg/compute/models/cloudregionresource.go @@ -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( diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index 6117cc6031..8e3c299bef 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -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 { diff --git a/pkg/compute/models/dbinstance_accounts.go b/pkg/compute/models/dbinstance_accounts.go index 79c646eba6..5ebf77e651 100644 --- a/pkg/compute/models/dbinstance_accounts.go +++ b/pkg/compute/models/dbinstance_accounts.go @@ -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) diff --git a/pkg/compute/models/dbinstance_backups.go b/pkg/compute/models/dbinstance_backups.go index 2bc424bdc5..8a3fbbe290 100644 --- a/pkg/compute/models/dbinstance_backups.go +++ b/pkg/compute/models/dbinstance_backups.go @@ -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) diff --git a/pkg/compute/models/dbinstance_databases.go b/pkg/compute/models/dbinstance_databases.go index f5a1966edb..123488b098 100644 --- a/pkg/compute/models/dbinstance_databases.go +++ b/pkg/compute/models/dbinstance_databases.go @@ -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) diff --git a/pkg/compute/models/dbinstance_privileges.go b/pkg/compute/models/dbinstance_privileges.go index 4d1fa0172e..0204c96f3c 100644 --- a/pkg/compute/models/dbinstance_privileges.go +++ b/pkg/compute/models/dbinstance_privileges.go @@ -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}, }) diff --git a/pkg/compute/models/dbinstance_skus.go b/pkg/compute/models/dbinstance_skus.go index b19447bd8c..8e68cc6603 100644 --- a/pkg/compute/models/dbinstance_skus.go +++ b/pkg/compute/models/dbinstance_skus.go @@ -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) diff --git a/pkg/compute/models/dbinstanceresource.go b/pkg/compute/models/dbinstanceresource.go index 7491736f29..9f641ac042 100644 --- a/pkg/compute/models/dbinstanceresource.go +++ b/pkg/compute/models/dbinstanceresource.go @@ -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") } diff --git a/pkg/compute/models/dbinstances.go b/pkg/compute/models/dbinstances.go index d649c9828c..0f06e999c5 100644 --- a/pkg/compute/models/dbinstances.go +++ b/pkg/compute/models/dbinstances.go @@ -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 } diff --git a/pkg/compute/models/diskbackups.go b/pkg/compute/models/diskbackups.go index c1a10185b1..10f3d17fcc 100644 --- a/pkg/compute/models/diskbackups.go +++ b/pkg/compute/models/diskbackups.go @@ -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) diff --git a/pkg/compute/models/diskresource.go b/pkg/compute/models/diskresource.go index c530dda680..f63b867e4b 100644 --- a/pkg/compute/models/diskresource.go +++ b/pkg/compute/models/diskresource.go @@ -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") } diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 9bf9caf1dd..f7f0cdccb3 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -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 } diff --git a/pkg/compute/models/dnsrecords.go b/pkg/compute/models/dnsrecords.go index 262f299e64..ec535a7784 100644 --- a/pkg/compute/models/dnsrecords.go +++ b/pkg/compute/models/dnsrecords.go @@ -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()) } diff --git a/pkg/compute/models/dnszoneresource.go b/pkg/compute/models/dnszoneresource.go index af95fa3071..132bcfe712 100644 --- a/pkg/compute/models/dnszoneresource.go +++ b/pkg/compute/models/dnszoneresource.go @@ -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 } diff --git a/pkg/compute/models/dnszones.go b/pkg/compute/models/dnszones.go index 4df3e32491..a868550611 100644 --- a/pkg/compute/models/dnszones.go +++ b/pkg/compute/models/dnszones.go @@ -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 } diff --git a/pkg/compute/models/dynamicschedtags.go b/pkg/compute/models/dynamicschedtags.go index 75b60140ef..7979d60c98 100644 --- a/pkg/compute/models/dynamicschedtags.go +++ b/pkg/compute/models/dynamicschedtags.go @@ -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) diff --git a/pkg/compute/models/elastic_search.go b/pkg/compute/models/elastic_search.go index 8a93334e6b..825ecd50e8 100644 --- a/pkg/compute/models/elastic_search.go +++ b/pkg/compute/models/elastic_search.go @@ -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"), diff --git a/pkg/compute/models/elasticcache_accounts.go b/pkg/compute/models/elasticcache_accounts.go index aef4071a18..a93c229197 100644 --- a/pkg/compute/models/elasticcache_accounts.go +++ b/pkg/compute/models/elasticcache_accounts.go @@ -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 diff --git a/pkg/compute/models/elasticcache_acls.go b/pkg/compute/models/elasticcache_acls.go index 7bcbcb65a2..457c3538e5 100644 --- a/pkg/compute/models/elasticcache_acls.go +++ b/pkg/compute/models/elasticcache_acls.go @@ -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 } } diff --git a/pkg/compute/models/elasticcache_backups.go b/pkg/compute/models/elasticcache_backups.go index c4819a7c55..29b4b01829 100644 --- a/pkg/compute/models/elasticcache_backups.go +++ b/pkg/compute/models/elasticcache_backups.go @@ -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") } diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index 45d9d5bcd1..ac74eb5af7 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -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 } diff --git a/pkg/compute/models/elasticcache_parameters.go b/pkg/compute/models/elasticcache_parameters.go index 95fd728607..c56a279c24 100644 --- a/pkg/compute/models/elasticcache_parameters.go +++ b/pkg/compute/models/elasticcache_parameters.go @@ -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 { diff --git a/pkg/compute/models/elasticcache_skus.go b/pkg/compute/models/elasticcache_skus.go index 977e1ac64f..a7eb4ab447 100644 --- a/pkg/compute/models/elasticcache_skus.go +++ b/pkg/compute/models/elasticcache_skus.go @@ -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 } } diff --git a/pkg/compute/models/elasticcacheresource.go b/pkg/compute/models/elasticcacheresource.go index 8a683784be..124b163f20 100644 --- a/pkg/compute/models/elasticcacheresource.go +++ b/pkg/compute/models/elasticcacheresource.go @@ -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") } diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index fa31853213..b5ca5ad07e 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -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 { diff --git a/pkg/compute/models/external_projects.go b/pkg/compute/models/external_projects.go index 378081842a..bc3390635b 100644 --- a/pkg/compute/models/external_projects.go +++ b/pkg/compute/models/external_projects.go @@ -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) diff --git a/pkg/compute/models/filesystem.go b/pkg/compute/models/filesystem.go index ecc27994b2..0fa80a969b 100644 --- a/pkg/compute/models/filesystem.go +++ b/pkg/compute/models/filesystem.go @@ -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 } diff --git a/pkg/compute/models/globalvpcresource.go b/pkg/compute/models/globalvpcresource.go index 267d86ecbf..5b9304737c 100644 --- a/pkg/compute/models/globalvpcresource.go +++ b/pkg/compute/models/globalvpcresource.go @@ -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") } diff --git a/pkg/compute/models/globalvpcs.go b/pkg/compute/models/globalvpcs.go index a12826a4bd..3dcc18836b 100644 --- a/pkg/compute/models/globalvpcs.go +++ b/pkg/compute/models/globalvpcs.go @@ -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 } diff --git a/pkg/compute/models/groupresource.go b/pkg/compute/models/groupresource.go index 09d3cb0e82..611e677b9a 100644 --- a/pkg/compute/models/groupresource.go +++ b/pkg/compute/models/groupresource.go @@ -39,8 +39,8 @@ type SGroupResourceBase struct { type SGroupResourceBaseManager struct { } -func ValidateGroupResourceInput(userCred mcclient.TokenCredential, input api.GroupResourceInput) (*SGroup, api.GroupResourceInput, error) { - groupObj, err := GroupManager.FetchByIdOrName(userCred, input.GroupId) +func ValidateGroupResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.GroupResourceInput) (*SGroup, api.GroupResourceInput, error) { + groupObj, err := GroupManager.FetchByIdOrName(ctx, userCred, input.GroupId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", GroupManager.Keyword(), input.GroupId) @@ -100,7 +100,7 @@ func (manager *SGroupResourceBaseManager) ListItemFilter( query api.GroupFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.GroupId) > 0 { - groupObj, _, err := ValidateGroupResourceInput(userCred, query.GroupResourceInput) + groupObj, _, err := ValidateGroupResourceInput(ctx, userCred, query.GroupResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateGroupResourceInput") } diff --git a/pkg/compute/models/groups.go b/pkg/compute/models/groups.go index d0b8bce8d2..482049ecd8 100644 --- a/pkg/compute/models/groups.go +++ b/pkg/compute/models/groups.go @@ -118,7 +118,7 @@ func (sm *SGroupManager) ListItemFilter( guestFilter := input.ServerId if len(guestFilter) != 0 { - guestObj, err := GuestManager.FetchByIdOrName(userCred, guestFilter) + guestObj, err := GuestManager.FetchByIdOrName(ctx, userCred, guestFilter) if err != nil { return nil, err } @@ -385,7 +385,7 @@ func (group *SGroup) checkGuests(ctx context.Context, userCred mcclient.TokenCre hostIdSet := sets.NewString() for i := range guestIdArr { guestIdStr, _ := guestIdArr[i].GetString() - model, err := GuestManager.FetchByIdOrName(userCred, guestIdStr) + model, err := GuestManager.FetchByIdOrName(ctx, userCred, guestIdStr) if err == sql.ErrNoRows { return nil, nil, httperrors.NewInputParameterError("no such model %s", guestIdStr) } @@ -570,7 +570,7 @@ func (grp *SGroup) PerformAttachnetwork(ctx context.Context, userCred mcclient.T } if len(input.NetworkId) > 0 { - netObj, err := NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + netObj, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(NetworkManager.Keyword(), input.NetworkId) @@ -733,7 +733,7 @@ func (grp *SGroup) PerformAssociateEip(ctx context.Context, userCred mcclient.To if len(eipStr) == 0 { return nil, httperrors.NewMissingParameterError("eip_id") } - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, eipStr) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, eipStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("eip %s not found", eipStr) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 279ff2999c..1e465de4e2 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -388,7 +388,7 @@ func (self *SGuest) validateMigrate( } if utils.IsInStringArray(self.Status, []string{api.VM_RUNNING, api.VM_SUSPEND}) { if len(liveMigrateInput.PreferHostId) > 0 { - iHost, _ := HostManager.FetchByIdOrName(userCred, liveMigrateInput.PreferHostId) + iHost, _ := HostManager.FetchByIdOrName(ctx, userCred, liveMigrateInput.PreferHostId) if iHost == nil { return httperrors.NewBadRequestError("Host %s not found", liveMigrateInput.PreferHostId) } @@ -410,7 +410,7 @@ func (self *SGuest) validateMigrate( return err } if len(migrateInput.PreferHostId) > 0 { - iHost, _ := HostManager.FetchByIdOrName(userCred, migrateInput.PreferHostId) + iHost, _ := HostManager.FetchByIdOrName(ctx, userCred, migrateInput.PreferHostId) if iHost == nil { return httperrors.NewBadRequestError("Host %s not found", migrateInput.PreferHostId) } @@ -427,7 +427,7 @@ func (self *SGuest) validateConvertToKvm( migrateInput *api.GuestMigrateInput, ) error { if len(migrateInput.PreferHostId) > 0 { - iHost, _ := HostManager.FetchByIdOrName(userCred, migrateInput.PreferHostId) + iHost, _ := HostManager.FetchByIdOrName(ctx, userCred, migrateInput.PreferHostId) if iHost == nil { return httperrors.NewBadRequestError("Host %s not found", migrateInput.PreferHostId) } @@ -674,7 +674,7 @@ func (self *SGuest) PerformClone(ctx context.Context, userCred mcclient.TokenCre if len(cloneInput.Name) == 0 { return nil, httperrors.NewMissingParameterError("name") } - err = db.NewNameValidator(GuestManager, userCred, cloneInput.Name, nil) + err = db.NewNameValidator(ctx, GuestManager, userCred, cloneInput.Name, nil) if err != nil { return nil, err } @@ -686,7 +686,7 @@ func (self *SGuest) PerformClone(ctx context.Context, userCred mcclient.TokenCre createInput.EipBw = cloneInput.EipBw createInput.Eip = cloneInput.Eip createInput.EipChargeType = cloneInput.EipChargeType - if err := GuestManager.validateEip(userCred, createInput, createInput.PreferRegion, createInput.PreferManager); err != nil { + if err := GuestManager.validateEip(ctx, userCred, createInput, createInput.PreferRegion, createInput.PreferManager); err != nil { return nil, err } @@ -785,7 +785,7 @@ func (self *SGuest) PerformDeploy( if input.DeleteKeypair || len(input.KeypairId) > 0 { if len(input.KeypairId) > 0 { - _, err := validators.ValidateModel(userCred, KeypairManager, &input.KeypairId) + _, err := validators.ValidateModel(ctx, userCred, KeypairManager, &input.KeypairId) if err != nil { return nil, err } @@ -906,7 +906,7 @@ func (self *SGuest) PerformAttachdisk(ctx context.Context, userCred mcclient.Tok } } - diskObj, err := validators.ValidateModel(userCred, DiskManager, &input.DiskId) + diskObj, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.DiskId) if err != nil { return nil, err } @@ -1683,7 +1683,7 @@ func (self *SGuest) PerformRebuildRoot( } if len(input.KeypairId) > 0 { - _, err := validators.ValidateModel(userCred, KeypairManager, &input.KeypairId) + _, err := validators.ValidateModel(ctx, userCred, KeypairManager, &input.KeypairId) if err != nil { return nil, err } @@ -1854,7 +1854,7 @@ func (self *SGuest) PerformDetachdisk(ctx context.Context, userCred mcclient.Tok if len(input.DiskId) == 0 { return nil, httperrors.NewMissingParameterError("disk_id") } - diskObj, err := validators.ValidateModel(userCred, DiskManager, &input.DiskId) + diskObj, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.DiskId) if err != nil { return nil, err } @@ -1964,7 +1964,7 @@ func (self *SGuest) PerformDetachIsolatedDevice(ctx context.Context, userCred mc } func (self *SGuest) startDetachIsolateDeviceWithoutNic(ctx context.Context, userCred mcclient.TokenCredential, device string) error { - iDev, err := IsolatedDeviceManager.FetchByIdOrName(userCred, device) + iDev, err := IsolatedDeviceManager.FetchByIdOrName(ctx, userCred, device) if err != nil { msgFmt := "Isolated device %s not found" msg := fmt.Sprintf(msgFmt, device) @@ -2109,7 +2109,7 @@ func (self *SGuest) StartAttachIsolatedDeviceGpuOrUsb(ctx context.Context, userC } func (self *SGuest) startAttachIsolatedDevGeneral(ctx context.Context, userCred mcclient.TokenCredential, device string) error { - iDev, err := IsolatedDeviceManager.FetchByIdOrName(userCred, device) + iDev, err := IsolatedDeviceManager.FetchByIdOrName(ctx, userCred, device) if err != nil { msgFmt := "Isolated device %s not found" msg := fmt.Sprintf(msgFmt, device) @@ -2531,7 +2531,7 @@ func (self *SGuest) PerformDetachnetwork( var gns []SGuestnetwork if len(input.NetId) > 0 { - netObj, err := validators.ValidateModel(userCred, NetworkManager, &input.NetId) + netObj, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetId) if err != nil { return nil, err } @@ -2645,7 +2645,7 @@ func (self *SGuest) PerformAttachnetwork( if err != nil { return nil, err } - if IsExitNetworkInfo(userCred, input.Nets[i]) { + if IsExitNetworkInfo(ctx, userCred, input.Nets[i]) { enicCnt += 1 // ebw = input.BwLimit } else { @@ -3270,7 +3270,7 @@ func (self *SGuest) PerformAssociateEip(ctx context.Context, userCred mcclient.T if len(eipStr) == 0 { return nil, httperrors.NewMissingParameterError("eip_id") } - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, eipStr) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, eipStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("eip %s not found", eipStr) @@ -3562,7 +3562,7 @@ func (self *SGuest) PerformSwitchToBackup( return nil, nil } -func (manager *SGuestManager) getGuests(userCred mcclient.TokenCredential, data jsonutils.JSONObject) ([]SGuest, error) { +func (manager *SGuestManager) getGuests(ctx context.Context, userCred mcclient.TokenCredential, data jsonutils.JSONObject) ([]SGuest, error) { _guests := []string{} data.Unmarshal(&_guests, "guests") if len(_guests) == 0 { @@ -3571,7 +3571,7 @@ func (manager *SGuestManager) getGuests(userCred mcclient.TokenCredential, data guests := []SGuest{} q1 := manager.Query().In("id", _guests) q2 := manager.Query().In("name", _guests) - q2 = manager.FilterByOwner(q2, manager, userCred, userCred, manager.NamespaceScope()) + q2 = manager.FilterByOwner(ctx, q2, manager, userCred, userCred, manager.NamespaceScope()) q2 = manager.FilterBySystemAttributes(q2, userCred, data, manager.ResourceScope()) q := sqlchemy.Union(q1, q2).Query().Distinct() err := db.FetchModelObjects(manager, q, &guests) @@ -3608,7 +3608,7 @@ func (manager *SGuestManager) getUserMetadata(data jsonutils.JSONObject) (map[st } func (manager *SGuestManager) PerformBatchUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - guests, err := manager.getGuests(userCred, data) + guests, err := manager.getGuests(ctx, userCred, data) if err != nil { return nil, err } @@ -3627,7 +3627,7 @@ func (manager *SGuestManager) PerformBatchUserMetadata(ctx context.Context, user } func (manager *SGuestManager) PerformBatchSetUserMetadata(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - guests, err := manager.getGuests(userCred, data) + guests, err := manager.getGuests(ctx, userCred, data) if err != nil { return nil, err } @@ -4171,13 +4171,13 @@ func (man *SGuestManager) PerformImport(ctx context.Context, userCred mcclient.T if len(desc.Name) == 0 { return nil, httperrors.NewInputParameterError("Server Name is empty") } - if obj, _ := man.FetchByIdOrName(userCred, desc.Id); obj != nil { + if obj, _ := man.FetchByIdOrName(ctx, userCred, desc.Id); obj != nil { return nil, httperrors.NewInputParameterError("Server %s already exists", desc.Id) } - if err := db.NewNameValidator(man, userCred, desc.Name, nil); err != nil { + if err := db.NewNameValidator(ctx, man, userCred, desc.Name, nil); err != nil { return nil, err } - if hostObj, _ := HostManager.FetchByIdOrName(userCred, desc.HostId); hostObj == nil { + if hostObj, _ := HostManager.FetchByIdOrName(ctx, userCred, desc.HostId); hostObj == nil { return nil, httperrors.NewNotFoundError("Host %s not found", desc.HostId) } else { desc.HostId = hostObj.GetId() @@ -4491,7 +4491,7 @@ func (self *SGuest) PerformSyncFixNics(ctx context.Context, return nil, httperrors.NewInputParameterError("invalid IPv4 address %s", ip) } // ip is reachable on host - net, err := host.getNetworkOfIPOnHost(ip) + net, err := host.getNetworkOfIPOnHost(ctx, ip) if err != nil { return nil, httperrors.NewInputParameterError("Unreachable IP %s: %s", ip, err) } @@ -4514,7 +4514,7 @@ func (self *SGuest) PerformSyncFixNics(ctx context.Context, if len(ip) == 0 { continue } - _, err := host.getNetworkOfIPOnHost(ip) + _, err := host.getNetworkOfIPOnHost(ctx, ip) if err != nil { errs = append(errs, errors.Wrap(err, ip)) } @@ -4583,7 +4583,7 @@ func (guest *SGuest) PerformResizeDisk(ctx context.Context, userCred mcclient.To if len(input.DiskId) == 0 { return nil, httperrors.NewMissingParameterError("disk_id") } - diskObj, err := validators.ValidateModel(userCred, DiskManager, &input.DiskId) + diskObj, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.DiskId) if err != nil { return nil, err } @@ -4743,7 +4743,7 @@ func (manager *SGuestManager) PerformBatchMigrate(ctx context.Context, userCred var preferHostId string if len(params.PreferHostId) > 0 { - iHost, _ := HostManager.FetchByIdOrName(userCred, params.PreferHostId) + iHost, _ := HostManager.FetchByIdOrName(ctx, userCred, params.PreferHostId) if iHost == nil { return nil, httperrors.NewBadRequestError("Host %s not found", params.PreferHostId) } @@ -4851,7 +4851,7 @@ func (self *SGuest) validateCreateInstanceSnapshot( return nil, input, httperrors.NewMissingParameterError("name") } - err := db.NewNameValidator(InstanceSnapshotManager, ownerId, input.Name, nil) + err := db.NewNameValidator(ctx, InstanceSnapshotManager, ownerId, input.Name, nil) if err != nil { return nil, input, errors.Wrap(err, "NewNameValidator") } @@ -4920,7 +4920,7 @@ func (self *SGuest) validateCreateInstanceBackup( return input, httperrors.NewMissingParameterError("name") } - err := db.NewNameValidator(InstanceBackupManager, ownerId, input.Name, nil) + err := db.NewNameValidator(ctx, InstanceBackupManager, ownerId, input.Name, nil) if err != nil { return input, errors.Wrap(err, "db.NewNameValidator") } @@ -4989,7 +4989,7 @@ func (self *SGuest) PerformInstanceBackup( if backupStorageId == "" { return nil, httperrors.NewMissingParameterError("backup_storage_id") } - ibs, err := BackupStorageManager.FetchByIdOrName(userCred, backupStorageId) + ibs, err := BackupStorageManager.FetchByIdOrName(ctx, userCred, backupStorageId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(BackupStorageManager.Keyword(), backupStorageId) @@ -5042,7 +5042,7 @@ func (self *SGuest) PerformInstanceSnapshotReset(ctx context.Context, userCred m return nil, httperrors.NewInvalidStatusError("guest can't do snapshot in status %s", self.Status) } - obj, err := InstanceSnapshotManager.FetchByIdOrName(userCred, input.InstanceSnapshot) + obj, err := InstanceSnapshotManager.FetchByIdOrName(ctx, userCred, input.InstanceSnapshot) if err != nil { return nil, errors.Wrapf(err, "unable to fetch instance snapshot %q", input.InstanceSnapshot) } @@ -5382,7 +5382,7 @@ func (self *SGuest) checkGroups(ctx context.Context, userCred mcclient.TokenCred groupIdSet := sets.NewString() for i := range groupIdArr { groupIdStr, _ := groupIdArr[i].GetString() - model, err := GroupManager.FetchByIdOrName(userCred, groupIdStr) + model, err := GroupManager.FetchByIdOrName(ctx, userCred, groupIdStr) if err == sql.ErrNoRows { return nil, httperrors.NewInputParameterError("no such group %s", groupIdStr) } @@ -5502,7 +5502,7 @@ func (self *SGuest) PerformRemoteUpdate(ctx context.Context, userCred mcclient.T } func (self *SGuest) PerformOpenForward(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - req, err := guestdriver_types.NewOpenForwardRequestFromJSON(data) + req, err := guestdriver_types.NewOpenForwardRequestFromJSON(ctx, data) if err != nil { return nil, err } @@ -5528,7 +5528,7 @@ func (self *SGuest) PerformOpenForward(ctx context.Context, userCred mcclient.To } func (self *SGuest) PerformCloseForward(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - req, err := guestdriver_types.NewCloseForwardRequestFromJSON(data) + req, err := guestdriver_types.NewCloseForwardRequestFromJSON(ctx, data) if err != nil { return nil, err } @@ -5549,7 +5549,7 @@ func (self *SGuest) PerformCloseForward(ctx context.Context, userCred mcclient.T } func (self *SGuest) PerformListForward(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - req, err := guestdriver_types.NewListForwardRequestFromJSON(data) + req, err := guestdriver_types.NewListForwardRequestFromJSON(ctx, data) if err != nil { return nil, err } @@ -5579,7 +5579,7 @@ func (self *SGuest) PerformChangeStorage(ctx context.Context, userCred mcclient. } // validate storage - storageObj, err := StorageManager.FetchByIdOrName(userCred, input.TargetStorageId) + storageObj, err := StorageManager.FetchByIdOrName(ctx, userCred, input.TargetStorageId) if err != nil { return nil, errors.Wrapf(err, "Found storage by %s", input.TargetStorageId) } @@ -5652,7 +5652,7 @@ func (self *SGuest) PerformChangeDiskStorage(ctx context.Context, userCred mccli } // validate storage - storageObj, err := StorageManager.FetchByIdOrName(userCred, input.TargetStorageId) + storageObj, err := StorageManager.FetchByIdOrName(ctx, userCred, input.TargetStorageId) if err != nil { return nil, errors.Wrapf(err, "Found storage by %s", input.TargetStorageId) } diff --git a/pkg/compute/models/guest_convert.go b/pkg/compute/models/guest_convert.go index e46d6c92b2..401f34f797 100644 --- a/pkg/compute/models/guest_convert.go +++ b/pkg/compute/models/guest_convert.go @@ -61,7 +61,7 @@ func (self *SGuest) PerformConvertToKvm( func (self *SGuest) ConvertCloudpodsToKvm(ctx context.Context, userCred mcclient.TokenCredential, data *api.ConvertToKvmInput) (jsonutils.JSONObject, error) { preferHost := data.PreferHost if len(preferHost) > 0 { - iHost, err := HostManager.FetchByIdOrName(userCred, preferHost) + iHost, err := HostManager.FetchByIdOrName(ctx, userCred, preferHost) if err != nil { return nil, err } @@ -99,7 +99,7 @@ func (self *SGuest) ConvertCloudpodsToKvm(ctx context.Context, userCred mcclient func (self *SGuest) ConvertEsxiToKvm(ctx context.Context, userCred mcclient.TokenCredential, data *api.ConvertToKvmInput) (jsonutils.JSONObject, error) { preferHost := data.PreferHost if len(preferHost) > 0 { - iHost, err := HostManager.FetchByIdOrName(userCred, preferHost) + iHost, err := HostManager.FetchByIdOrName(ctx, userCred, preferHost) if err != nil { return nil, err } diff --git a/pkg/compute/models/guest_migrate_network.go b/pkg/compute/models/guest_migrate_network.go index 1b2418e2f7..4b9413dbe9 100644 --- a/pkg/compute/models/guest_migrate_network.go +++ b/pkg/compute/models/guest_migrate_network.go @@ -43,7 +43,7 @@ func (guest *SGuest) PerformMigrateNetwork(ctx context.Context, userCred mcclien // first validate it against the source network, ensure the following: // 1. the network is attach to this guest - srcModel, err := NetworkManager.FetchByIdOrName(userCred, input.Src) + srcModel, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.Src) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "source network %s not found", input.Src) @@ -72,7 +72,7 @@ func (guest *SGuest) PerformMigrateNetwork(ctx context.Context, userCred mcclien // next validate against the destination network, ensure the following: // 1. the network is reachable to this server // 1. the IP address is availalble in the new network - destModel, err := NetworkManager.FetchByIdOrName(userCred, input.Dest) + destModel, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.Dest) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "destination network %s not found", input.Src) @@ -114,7 +114,7 @@ func (guest *SGuest) PerformMigrateNetwork(ctx context.Context, userCred mcclien if !destNet.IsAddressInRange(ipAddr) { return nil, errors.Wrapf(httperrors.ErrBadRequest, "ip %s not in range of destination network", ipAddr.String()) } - used, err := destNet.isAddressUsed(ipAddr.String()) + used, err := destNet.isAddressUsed(ctx, ipAddr.String()) if err != nil { return nil, errors.Wrap(err, "isAddressUsed") } diff --git a/pkg/compute/models/guest_secgroups.go b/pkg/compute/models/guest_secgroups.go index ed9ff7c1f4..e33905d299 100644 --- a/pkg/compute/models/guest_secgroups.go +++ b/pkg/compute/models/guest_secgroups.go @@ -73,7 +73,7 @@ func (self *SGuest) PerformAddSecgroup( secgroupNames := []string{} for i := range input.SecgroupIds { - secObj, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i]) + secObj, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i]) if err != nil { return nil, err } @@ -145,7 +145,7 @@ func (self *SGuest) PerformRevokeSecgroup( secgroupNames := []string{} for i := range input.SecgroupIds { - secObj, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i]) + secObj, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i]) if err != nil { return nil, err } @@ -252,7 +252,7 @@ func (self *SGuest) performAssignSecgroup( return nil, errors.Wrapf(err, "GetVpc") } - secObj, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupId) + secObj, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupId) if err != nil { return nil, err } @@ -304,7 +304,7 @@ func (self *SGuest) PerformSetSecgroup( secgroupIds := []string{} secgroupNames := []string{} for i := range input.SecgroupIds { - secObj, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupIds[i]) + secObj, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupIds[i]) if err != nil { return nil, err } diff --git a/pkg/compute/models/guest_template.go b/pkg/compute/models/guest_template.go index f5eeb9d567..a6a6954a14 100644 --- a/pkg/compute/models/guest_template.go +++ b/pkg/compute/models/guest_template.go @@ -390,7 +390,7 @@ func (gt *SGuestTemplate) getMoreDetails(ctx context.Context, userCred mcclient. // keypair if len(input.KeypairId) > 0 { - model, err := KeypairManager.FetchByIdOrName(userCred, input.KeypairId) + model, err := KeypairManager.FetchByIdOrName(ctx, userCred, input.KeypairId) if err == nil { keypair := model.(*SKeypair) configInfo.Keypair = keypair.GetName() @@ -520,7 +520,7 @@ func (gt *SGuestTemplate) PerformPublic( // check if secgroup is public if len(input.SecgroupId) > 0 { - model, err := SecurityGroupManager.FetchByIdOrName(userCred, input.SecgroupId) + model, err := SecurityGroupManager.FetchByIdOrName(ctx, userCred, input.SecgroupId) if err != nil { return nil, httperrors.NewResourceNotFoundError("there is no such secgroup %s descripted by guest template", input.SecgroupId) @@ -536,7 +536,7 @@ func (gt *SGuestTemplate) PerformPublic( if len(input.Networks) > 0 { for i := range input.Networks { str := input.Networks[i].Network - model, err := NetworkManager.FetchByIdOrName(userCred, str) + model, err := NetworkManager.FetchByIdOrName(ctx, userCred, str) if err != nil { return nil, httperrors.NewResourceNotFoundError( "there is no such secgroup %s descripted by guest template", str) diff --git a/pkg/compute/models/guestnetworks.go b/pkg/compute/models/guestnetworks.go index 2e712a0d3a..ab8f3b2322 100644 --- a/pkg/compute/models/guestnetworks.go +++ b/pkg/compute/models/guestnetworks.go @@ -336,7 +336,7 @@ func (manager *SGuestnetworkManager) newGuestNetwork( // * IP地址为空并且 !options.Options.EnablePreAllocateIpAddr 时,不需要分配IP,等创建后自动同步过来 // * 否则,还是需要先分配了 if provider == api.CLOUD_PROVIDER_ONECLOUD || options.Options.EnablePreAllocateIpAddr || (!options.Options.EnablePreAllocateIpAddr && len(address) > 0) { - addrTable := network.GetUsedAddresses() + addrTable := network.GetUsedAddresses(ctx) recentAddrTable := manager.getRecentlyReleasedIPAddresses(network.Id, network.getAllocTimoutDuration()) ipAddr, err := network.GetFreeIP(ctx, userCred, addrTable, recentAddrTable, address, allocDir, reserved, api.AddressTypeIPv4) if err != nil { @@ -379,7 +379,7 @@ func (manager *SGuestnetworkManager) newGuestNetwork( if !virtual { if len(address6) > 0 || requireIPv6 { if provider == api.CLOUD_PROVIDER_ONECLOUD || options.Options.EnablePreAllocateIpAddr || (!options.Options.EnablePreAllocateIpAddr && len(address6) > 0) { - addrTable := network.GetUsedAddresses6() + addrTable := network.GetUsedAddresses6(ctx) recentAddrTable := manager.getRecentlyReleasedIPAddresses6(network.Id, network.getAllocTimoutDuration()) derived := false diff --git a/pkg/compute/models/guestresource.go b/pkg/compute/models/guestresource.go index 1c8a7afac7..d1e3e049ef 100644 --- a/pkg/compute/models/guestresource.go +++ b/pkg/compute/models/guestresource.go @@ -39,8 +39,8 @@ type SGuestResourceBaseManager struct { SHostResourceBaseManager } -func ValidateGuestResourceInput(userCred mcclient.TokenCredential, input api.ServerResourceInput) (*SGuest, api.ServerResourceInput, error) { - srvObj, err := GuestManager.FetchByIdOrName(userCred, input.ServerId) +func ValidateGuestResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerResourceInput) (*SGuest, api.ServerResourceInput, error) { + srvObj, err := GuestManager.FetchByIdOrName(ctx, userCred, input.ServerId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", GuestManager.Keyword(), input.ServerId) @@ -134,7 +134,7 @@ func (manager *SGuestResourceBaseManager) ListItemFilter( ) (*sqlchemy.SQuery, error) { var err error if len(query.ServerId) > 0 { - guestObj, _, err := ValidateGuestResourceInput(userCred, query.ServerResourceInput) + guestObj, _, err := ValidateGuestResourceInput(ctx, userCred, query.ServerResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateGuestResourceInput") } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 7340c11bda..2123d55670 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -307,7 +307,7 @@ func (manager *SGuestManager) ListItemFilter( hostFilter := query.GetAllGuestsOnHost if len(hostFilter) > 0 { - host, _ := HostManager.FetchByIdOrName(nil, hostFilter) + host, _ := HostManager.FetchByIdOrName(ctx, nil, hostFilter) if host == nil { return nil, httperrors.NewResourceNotFoundError("host %s not found", hostFilter) } @@ -368,7 +368,7 @@ func (manager *SGuestManager) ListItemFilter( var eipMode string usableServerForEipFilter := query.UsableServerForEip if len(usableServerForEipFilter) > 0 { - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, usableServerForEipFilter) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, usableServerForEipFilter) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("eip %s not found", usableServerForEipFilter) @@ -478,7 +478,7 @@ func (manager *SGuestManager) ListItemFilter( diskFilter := query.AttachableServersForDisk if len(diskFilter) > 0 { - diskI, _ := DiskManager.FetchByIdOrName(userCred, diskFilter) + diskI, _ := DiskManager.FetchByIdOrName(ctx, userCred, diskFilter) if diskI == nil { return nil, httperrors.NewResourceNotFoundError("disk %s not found", diskFilter) } @@ -624,7 +624,7 @@ func (manager *SGuestManager) ListItemFilter( groupFilter := query.GroupId if len(groupFilter) != 0 { - groupObj, err := GroupManager.FetchByIdOrName(userCred, groupFilter) + groupObj, err := GroupManager.FetchByIdOrName(ctx, userCred, groupFilter) if err != nil { return nil, httperrors.NewNotFoundError("group %s not found", groupFilter) } @@ -1337,8 +1337,8 @@ func (manager *SGuestManager) BatchPreValidate( return nil } -func parseInstanceSnapshot(input *api.ServerCreateInput) (*api.ServerCreateInput, error) { - ispi, err := InstanceSnapshotManager.FetchByIdOrName(nil, input.InstanceSnapshotId) +func parseInstanceSnapshot(ctx context.Context, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { + ispi, err := InstanceSnapshotManager.FetchByIdOrName(ctx, nil, input.InstanceSnapshotId) if err == sql.ErrNoRows { return nil, httperrors.NewBadRequestError("can't find instance snapshot %s", input.InstanceSnapshotId) } @@ -1356,8 +1356,8 @@ func parseInstanceSnapshot(input *api.ServerCreateInput) (*api.ServerCreateInput return input, nil } -func parseInstanceBackup(input *api.ServerCreateInput) (*api.ServerCreateInput, error) { - ispi, err := InstanceBackupManager.FetchByIdOrName(nil, input.InstanceBackupId) +func parseInstanceBackup(ctx context.Context, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { + ispi, err := InstanceBackupManager.FetchByIdOrName(ctx, nil, input.InstanceBackupId) if err == sql.ErrNoRows { return nil, httperrors.NewBadRequestError("can't find instance backup %s", input.InstanceBackupId) } @@ -1419,7 +1419,7 @@ func (manager *SGuestManager) validateCreateData( inputMem := input.VmemSize inputCpu := input.VcpuCount inputInstaceType := input.InstanceType - input, err = parseInstanceSnapshot(input) + input, err = parseInstanceSnapshot(ctx, input) if err != nil { return nil, err } @@ -1437,7 +1437,7 @@ func (manager *SGuestManager) validateCreateData( inputMem := input.VmemSize inputCpu := input.VcpuCount inputInstaceType := input.InstanceType - input, err = parseInstanceBackup(input) + input, err = parseInstanceBackup(ctx, input) if err != nil { return nil, err } @@ -1481,7 +1481,7 @@ func (manager *SGuestManager) validateCreateData( if input.InstanceGroupIds != nil && len(input.InstanceGroupIds) != 0 { newGroupIds := make([]string, len(input.InstanceGroupIds)) for index, id := range input.InstanceGroupIds { - model, err := GroupManager.FetchByIdOrName(userCred, id) + model, err := GroupManager.FetchByIdOrName(ctx, userCred, id) if err != nil { return nil, httperrors.NewResourceNotFoundError("no such group %s", id) } @@ -1902,7 +1902,7 @@ func (manager *SGuestManager) validateCreateData( keypairId := input.KeypairId if len(keypairId) > 0 { - keypairObj, err := KeypairManager.FetchByIdOrName(userCred, keypairId) + keypairObj, err := KeypairManager.FetchByIdOrName(ctx, userCred, keypairId) if err != nil { return nil, httperrors.NewResourceNotFoundError("Keypair %s not found", keypairId) } @@ -1911,7 +1911,7 @@ func (manager *SGuestManager) validateCreateData( secGrpIds := []string{} for _, secgroup := range input.Secgroups { - secGrpObj, err := SecurityGroupManager.FetchByIdOrName(userCred, secgroup) + secGrpObj, err := SecurityGroupManager.FetchByIdOrName(ctx, userCred, secgroup) if err != nil { return nil, httperrors.NewResourceNotFoundError("Secgroup %s not found", secgroup) } @@ -1924,7 +1924,7 @@ func (manager *SGuestManager) validateCreateData( input.Secgroups = secGrpIds[1:] } else if input.SecgroupId != "" { secGrpId := input.SecgroupId - secGrpObj, err := SecurityGroupManager.FetchByIdOrName(userCred, secGrpId) + secGrpObj, err := SecurityGroupManager.FetchByIdOrName(ctx, userCred, secGrpId) if err != nil { return nil, httperrors.NewResourceNotFoundError("Secgroup %s not found", secGrpId) } @@ -1942,7 +1942,7 @@ func (manager *SGuestManager) validateCreateData( } preferRegionId, _ := data.GetString("prefer_region_id") - if err := manager.validateEip(userCred, input, preferRegionId, input.PreferManager); err != nil { + if err := manager.validateEip(ctx, userCred, input, preferRegionId, input.PreferManager); err != nil { return nil, err } @@ -2078,7 +2078,7 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m return input.JSON(input), nil } -func (manager *SGuestManager) validateEip(userCred mcclient.TokenCredential, input *api.ServerCreateInput, +func (manager *SGuestManager) validateEip(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerCreateInput, preferRegionId string, preferManagerId string) error { if input.PublicIpBw > 0 { if !GetDriver(input.Hypervisor).IsSupportPublicIp() { @@ -2102,7 +2102,7 @@ func (manager *SGuestManager) validateEip(userCred mcclient.TokenCredential, inp return httperrors.NewNotImplementedError("eip not supported for %s", input.Hypervisor) } if len(eipStr) > 0 { - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, eipStr) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, eipStr) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(ElasticipManager.Keyword(), eipStr) @@ -2239,7 +2239,7 @@ func getGuestResourceRequirements( eBw := 0 iBw := 0 for _, netConfig := range input.Networks { - if IsExitNetworkInfo(userCred, netConfig) { + if IsExitNetworkInfo(ctx, userCred, netConfig) { eNicCnt += 1 eBw += netConfig.BwLimit } else { @@ -3270,6 +3270,7 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient. } func (manager *SGuestManager) TotalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -3279,7 +3280,7 @@ func (manager *SGuestManager) TotalCount( since *time.Time, policyResult rbacutils.SPolicyResult, ) SGuestCountStat { - return usageTotalGuestResouceCount(scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, policyResult) + return usageTotalGuestResouceCount(ctx, scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, policyResult) } func (self *SGuest) detachNetworks(ctx context.Context, userCred mcclient.TokenCredential, gns []SGuestnetwork, reserve bool) error { @@ -3593,7 +3594,7 @@ func getCloudNicNetwork(ctx context.Context, vnic cloudprovider.ICloudNic, host } } // find network by IP - return host.getNetworkOfIPOnHost(ip) + return host.getNetworkOfIPOnHost(ctx, ip) } localNetObj, err := db.FetchByExternalIdAndManagerId(NetworkManager, vnetId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { // vpc := VpcManager.Query().SubQuery() @@ -3962,6 +3963,7 @@ type SGuestCountStat struct { } func usageTotalGuestResouceCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -3975,7 +3977,9 @@ func usageTotalGuestResouceCount( since *time.Time, policyResult rbacutils.SPolicyResult, ) SGuestCountStat { - q, guests := _guestResourceCountQuery(scope, ownerId, rangeObjs, status, hypervisors, + q, guests := _guestResourceCountQuery( + ctx, + scope, ownerId, rangeObjs, status, hypervisors, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, policyResult, ) @@ -3997,6 +4001,7 @@ func usageTotalGuestResouceCount( } func _guestResourceCountQuery( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -4069,7 +4074,7 @@ func _guestResourceCountQuery( gq = gq.Filter(sqlchemy.GT(gq.Field("created_at"), *since)) } - gq = db.ObjectIdQueryWithPolicyResult(gq, GuestManager, policyResult) + gq = db.ObjectIdQueryWithPolicyResult(ctx, gq, GuestManager, policyResult) guests := gq.SubQuery() @@ -4436,7 +4441,7 @@ func (self *SGuest) createDiskOnHost( err error ) if len(diskConfig.Storage) > 0 { - _storage, err := StorageManager.FetchByIdOrName(userCred, diskConfig.Storage) + _storage, err := StorageManager.FetchByIdOrName(ctx, userCred, diskConfig.Storage) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("storage", diskConfig.Storage) diff --git a/pkg/compute/models/guesttemplate_resource.go b/pkg/compute/models/guesttemplate_resource.go index 3030765a65..47226fa071 100644 --- a/pkg/compute/models/guesttemplate_resource.go +++ b/pkg/compute/models/guesttemplate_resource.go @@ -89,7 +89,7 @@ func (manager *SGuestTemplateResourceBaseManager) ListItemFilter( query api.GuestTemplateFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.GuestTemplateId) > 0 { - guestTemplateObj, err := GuestTemplateManager.FetchByIdOrName(userCred, query.GuestTemplateId) + guestTemplateObj, err := GuestTemplateManager.FetchByIdOrName(ctx, userCred, query.GuestTemplateId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GuestTemplateManager.Keyword(), query.GuestTemplateId) diff --git a/pkg/compute/models/helper.go b/pkg/compute/models/helper.go index c8801ffb16..1f52d9059a 100644 --- a/pkg/compute/models/helper.go +++ b/pkg/compute/models/helper.go @@ -65,7 +65,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred if (input.PreferHost != "") && hypervisor != api.HYPERVISOR_CONTAINER { bmName := input.PreferHost - bmObj, err := HostManager.FetchByIdOrName(nil, bmName) + bmObj, err := HostManager.FetchByIdOrName(ctx, nil, bmName) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("Host %s not found", bmName) @@ -117,7 +117,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred input.PreferRegion = region.Id } else { if len(input.Schedtags) > 0 { - input.Schedtags, err = SchedtagManager.ValidateSchedtags(userCred, input.Schedtags) + input.Schedtags, err = SchedtagManager.ValidateSchedtags(ctx, userCred, input.Schedtags) if err != nil { return nil, httperrors.NewInputParameterError("invalid aggregate_strategy: %s", err) } @@ -125,7 +125,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred if input.PreferWire != "" { wireStr := input.PreferWire - wireObj, err := WireManager.FetchByIdOrName(userCred, wireStr) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, wireStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("Wire %s not found", wireStr) @@ -141,7 +141,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred input.PreferRegion = region.Id } else if input.PreferZone != "" { zoneStr := input.PreferZone - zoneObj, err := ZoneManager.FetchByIdOrName(userCred, zoneStr) + zoneObj, err := ZoneManager.FetchByIdOrName(ctx, userCred, zoneStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("Zone %s not found", zoneStr) @@ -155,7 +155,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred input.PreferRegion = region.Id } else if input.PreferRegion != "" { regionStr := input.PreferRegion - regionObj, err := CloudregionManager.FetchByIdOrName(userCred, regionStr) + regionObj, err := CloudregionManager.FetchByIdOrName(ctx, userCred, regionStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("Region %s not found", regionStr) diff --git a/pkg/compute/models/hostresource.go b/pkg/compute/models/hostresource.go index 63402d3149..ba43d88f2f 100644 --- a/pkg/compute/models/hostresource.go +++ b/pkg/compute/models/hostresource.go @@ -41,8 +41,8 @@ type SHostResourceBaseManager struct { hostIdFieldName string } -func ValidateHostResourceInput(userCred mcclient.TokenCredential, input api.HostResourceInput) (*SHost, api.HostResourceInput, error) { - hostObj, err := HostManager.FetchByIdOrName(userCred, input.HostId) +func ValidateHostResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.HostResourceInput) (*SHost, api.HostResourceInput, error) { + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, input.HostId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", HostManager.Keyword(), input.HostId) @@ -135,7 +135,7 @@ func (manager *SHostResourceBaseManager) ListItemFilter( query api.HostFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.HostId) > 0 { - hostObj, _, err := ValidateHostResourceInput(userCred, query.HostResourceInput) + hostObj, _, err := ValidateHostResourceInput(ctx, userCred, query.HostResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateHostResourceInput") } @@ -146,7 +146,7 @@ func (manager *SHostResourceBaseManager) ListItemFilter( q = q.In(manager.getHostIdFieldName(), sq) } if len(query.HostWireId) > 0 { - wireObj, err := WireManager.FetchByIdOrName(userCred, query.HostWireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, query.HostWireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), query.HostWireId) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index f1f6a988eb..62e36ee2ac 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -297,7 +297,7 @@ func (manager *SHostManager) ListItemFilter( schedTagStr := query.SchedtagId if len(schedTagStr) > 0 { - schedTag, _ := SchedtagManager.FetchByIdOrName(nil, schedTagStr) + schedTag, _ := SchedtagManager.FetchByIdOrName(ctx, nil, schedTagStr) if schedTag == nil { return nil, httperrors.NewResourceNotFoundError("Schedtag %s not found", schedTagStr) } @@ -308,7 +308,7 @@ func (manager *SHostManager) ListItemFilter( wireStr := query.WireId if len(wireStr) > 0 { - wire, _ := WireManager.FetchByIdOrName(nil, wireStr) + wire, _ := WireManager.FetchByIdOrName(ctx, nil, wireStr) if wire == nil { return nil, httperrors.NewResourceNotFoundError("Wire %s not found", wireStr) } @@ -319,7 +319,7 @@ func (manager *SHostManager) ListItemFilter( storageStr := query.StorageId if len(storageStr) > 0 { - storage, _ := StorageManager.FetchByIdOrName(nil, storageStr) + storage, _ := StorageManager.FetchByIdOrName(ctx, nil, storageStr) if storage == nil { return nil, httperrors.NewResourceNotFoundError("Storage %s not found", storageStr) } @@ -2666,10 +2666,10 @@ func (hh *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCredent return syncVMPairs, syncResult } -func (hh *SHost) getNetworkOfIPOnHost(ipAddr string) (*SNetwork, error) { +func (hh *SHost) getNetworkOfIPOnHost(ctx context.Context, ipAddr string) (*SNetwork, error) { netInterfaces := hh.GetHostNetInterfaces() for _, netInterface := range netInterfaces { - network, err := netInterface.GetCandidateNetworkForIp(nil, nil, rbacscope.ScopeNone, ipAddr) + network, err := netInterface.GetCandidateNetworkForIp(ctx, nil, nil, rbacscope.ScopeNone, ipAddr) if err == nil && network != nil { return network, nil } @@ -2805,6 +2805,7 @@ func (manager *SHostManager) FetchHostByHostname(hostname string) *SHost { } func (manager *SHostManager) totalCountQ( + ctx context.Context, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, @@ -2855,7 +2856,7 @@ func (manager *SHostManager) totalCountQ( } } - q = db.ObjectIdQueryWithPolicyResult(q, HostManager, policyResult) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, HostManager, policyResult) isolatedDevices := IsolatedDeviceManager.Query().SubQuery() iq := isolatedDevices.Query( @@ -2977,6 +2978,7 @@ func (manager *SHostManager) calculateCount(q *sqlchemy.SQuery) HostsCountStat { } func (manager *SHostManager) TotalCount( + ctx context.Context, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, @@ -2989,6 +2991,7 @@ func (manager *SHostManager) TotalCount( ) HostsCountStat { return manager.calculateCount( manager.totalCountQ( + ctx, userCred, scope, rangeObjs, @@ -3591,7 +3594,7 @@ func (manager *SHostManager) ValidateCreateData( var err error 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") } @@ -3672,7 +3675,7 @@ func (manager *SHostManager) ValidateCreateData( } else { accessNetStr := input.AccessNet // data.GetString("access_net") if len(accessNetStr) > 0 { - netObj, err := NetworkManager.FetchByIdOrName(userCred, accessNetStr) + netObj, err := NetworkManager.FetchByIdOrName(ctx, userCred, accessNetStr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("network", accessNetStr) @@ -3684,7 +3687,7 @@ func (manager *SHostManager) ValidateCreateData( } else { accessWireStr := input.AccessWire // data.GetString("access_wire") if len(accessWireStr) > 0 { - wireObj, err := WireManager.FetchByIdOrName(userCred, accessWireStr) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, accessWireStr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("wire", accessWireStr) @@ -3695,7 +3698,7 @@ func (manager *SHostManager) ValidateCreateData( wire := wireObj.(*SWire) lockman.LockObject(ctx, wire) defer lockman.ReleaseObject(ctx, wire) - net, err := wire.GetCandidatePrivateNetwork(userCred, userCred, NetworkManager.AllowScope(userCred), false, []string{api.NETWORK_TYPE_PXE, api.NETWORK_TYPE_BAREMETAL, api.NETWORK_TYPE_GUEST}) + net, err := wire.GetCandidatePrivateNetwork(ctx, userCred, userCred, NetworkManager.AllowScope(userCred), false, []string{api.NETWORK_TYPE_PXE, api.NETWORK_TYPE_BAREMETAL, api.NETWORK_TYPE_GUEST}) if err != nil { return input, httperrors.NewGeneralError(err) } @@ -4518,7 +4521,7 @@ func (hh *SHost) PerformInitialize( if err != nil || hh.GetBaremetalServer() != nil { return nil, nil } - err = db.NewNameValidator(GuestManager, userCred, name, nil) + err = db.NewNameValidator(ctx, GuestManager, userCred, name, nil) if err != nil { return nil, err } @@ -4552,7 +4555,7 @@ func (hh *SHost) PerformInitialize( if err != nil { log.Errorf("Host perform initialize failed on create disk %s", err) } - net, err := hh.getNetworkOfIPOnHost(hh.AccessIp) + net, err := hh.getNetworkOfIPOnHost(ctx, hh.AccessIp) if err != nil { log.Errorf("host perfrom initialize failed fetch net of access ip %s", err) } else { @@ -4603,7 +4606,7 @@ func (h *SHost) PerformAddNetif( wire := input.WireId if len(input.WireId) > 0 { - wireObj, err := WireManager.FetchByIdOrName(userCred, input.WireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, input.WireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), input.WireId) @@ -4650,7 +4653,7 @@ func (h *SHost) addNetif(ctx context.Context, userCred mcclient.TokenCredential, ) error { var sw *SWire if len(wire) > 0 { - iWire, err := WireManager.FetchByIdOrName(userCred, wire) + iWire, err := WireManager.FetchByIdOrName(ctx, userCred, wire) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(WireManager.Keyword(), wire) @@ -4665,7 +4668,7 @@ func (h *SHost) addNetif(ctx context.Context, userCred mcclient.TokenCredential, return httperrors.NewInputParameterError("invalid ipaddr %s", ipAddr) } findAddr := false - swNets, err := sw.getNetworks(userCred, userCred, NetworkManager.AllowScope(userCred)) + swNets, err := sw.getNetworks(ctx, userCred, userCred, NetworkManager.AllowScope(userCred)) if err != nil { return httperrors.NewInputParameterError("no networks on wire %s", wire) } @@ -4818,7 +4821,7 @@ func (h *SHost) EnableNetif(ctx context.Context, userCred mcclient.TokenCredenti var net *SNetwork var err error if len(ipAddr) > 0 { - net, err = netif.GetCandidateNetworkForIp(userCred, userCred, NetworkManager.AllowScope(userCred), ipAddr) + net, err = netif.GetCandidateNetworkForIp(ctx, userCred, userCred, NetworkManager.AllowScope(userCred), ipAddr) if net != nil { log.Infof("find network %s for ip %s", net.GetName(), ipAddr) } else if requireDesignatedIp { @@ -4843,7 +4846,7 @@ func (h *SHost) EnableNetif(ctx context.Context, userCred mcclient.TokenCredenti } if net == nil { if len(network) > 0 { - iNet, err := NetworkManager.FetchByIdOrName(userCred, network) + iNet, err := NetworkManager.FetchByIdOrName(ctx, userCred, network) if err != nil { return fmt.Errorf("Network %s not found: %s", network, err) } @@ -4858,12 +4861,12 @@ func (h *SHost) EnableNetif(ctx context.Context, userCred mcclient.TokenCredenti } else { netTypes = []string{api.NETWORK_TYPE_BAREMETAL} } - net, err = wire.GetCandidatePrivateNetwork(userCred, userCred, NetworkManager.AllowScope(userCred), false, netTypes) + net, err = wire.GetCandidatePrivateNetwork(ctx, userCred, userCred, NetworkManager.AllowScope(userCred), false, netTypes) if err != nil { return fmt.Errorf("fail to find private network %s", err) } if net == nil { - net, err = wire.GetCandidateAutoAllocNetwork(userCred, userCred, NetworkManager.AllowScope(userCred), false, netTypes) + net, err = wire.GetCandidateAutoAllocNetwork(ctx, userCred, userCred, NetworkManager.AllowScope(userCred), false, netTypes) if err != nil { return fmt.Errorf("fail to find public network %s", err) } @@ -5013,7 +5016,7 @@ func (hh *SHost) Attach2Network( lockman.LockObject(ctx, net) defer lockman.ReleaseObject(ctx, net) - usedAddrs := net.GetUsedAddresses() + usedAddrs := net.GetUsedAddresses(ctx) if ipAddr != "" { // converted baremetal can resuse related guest network ip if err := hh.IsIpAddrWithinConvertedGuest(ctx, userCred, ipAddr, netif); err == nil { @@ -5848,7 +5851,7 @@ func (host *SHost) PerformHostMaintenance(ctx context.Context, userCred mcclient var preferHostId string preferHost, _ := data.GetString("prefer_host") if len(preferHost) > 0 { - iHost, _ := HostManager.FetchByIdOrName(userCred, preferHost) + iHost, _ := HostManager.FetchByIdOrName(ctx, userCred, preferHost) if iHost == nil { return nil, httperrors.NewBadRequestError("Host %s not found", preferHost) } diff --git a/pkg/compute/models/hoststorages.go b/pkg/compute/models/hoststorages.go index 1503b5e0de..2d743997e0 100644 --- a/pkg/compute/models/hoststorages.go +++ b/pkg/compute/models/hoststorages.go @@ -144,12 +144,12 @@ func (self *SHoststorage) GetStorage() *SStorage { } func (manager *SHoststorageManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.HostStorageCreateInput) (api.HostStorageCreateInput, error) { - storageObj, err := validators.ValidateModel(userCred, StorageManager, &input.StorageId) + storageObj, err := validators.ValidateModel(ctx, userCred, StorageManager, &input.StorageId) if err != nil { return input, err } storage := storageObj.(*SStorage) - hostObj, err := validators.ValidateModel(userCred, HostManager, &input.HostId) + hostObj, err := validators.ValidateModel(ctx, userCred, HostManager, &input.HostId) if err != nil { return input, err } diff --git a/pkg/compute/models/infrasquota.go b/pkg/compute/models/infrasquota.go index 4d33b14bbf..cfcd197eba 100644 --- a/pkg/compute/models/infrasquota.go +++ b/pkg/compute/models/infrasquota.go @@ -143,9 +143,9 @@ func (self *SInfrasQuota) FetchUsage(ctx context.Context) error { brands = []string{regionKeys.Brand} } - hostStat := HostManager.TotalCount(ownerId, scope, rangeObjs, "", "", nil, nil, providers, brands, regionKeys.CloudEnv, tristate.None, tristate.None, rbacutils.SPolicyResult{}) + hostStat := HostManager.TotalCount(ctx, ownerId, scope, rangeObjs, "", "", nil, nil, providers, brands, regionKeys.CloudEnv, tristate.None, tristate.None, rbacutils.SPolicyResult{}) self.Host = int(hostStat.Count) - self.Vpc = VpcManager.totalCount(ownerId, scope, rangeObjs, providers, brands, regionKeys.CloudEnv) + self.Vpc = VpcManager.totalCount(ctx, ownerId, scope, rangeObjs, providers, brands, regionKeys.CloudEnv) return nil } diff --git a/pkg/compute/models/instance_backup.go b/pkg/compute/models/instance_backup.go index 9b73a60cbc..81125f7f2a 100644 --- a/pkg/compute/models/instance_backup.go +++ b/pkg/compute/models/instance_backup.go @@ -105,7 +105,7 @@ func (manager *SInstanceBackupManager) ListItemFilter(ctx context.Context, q *sq guestStr := query.ServerId if len(guestStr) > 0 { - guestObj, err := GuestManager.FetchByIdOrName(userCred, guestStr) + guestObj, err := GuestManager.FetchByIdOrName(ctx, userCred, guestStr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("guests", guestStr) diff --git a/pkg/compute/models/instance_snapshots.go b/pkg/compute/models/instance_snapshots.go index d673814728..adf8bed501 100644 --- a/pkg/compute/models/instance_snapshots.go +++ b/pkg/compute/models/instance_snapshots.go @@ -134,7 +134,7 @@ func (manager *SInstanceSnapshotManager) ListItemFilter( guestStr := query.ServerId if len(guestStr) > 0 { - guestObj, err := GuestManager.FetchByIdOrName(userCred, guestStr) + guestObj, err := GuestManager.FetchByIdOrName(ctx, userCred, guestStr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("guests", guestStr) @@ -553,7 +553,7 @@ func (self *SInstanceSnapshot) GetUsages() []db.IUsage { } } -func TotalInstanceSnapshotCount(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (int, error) { +func TotalInstanceSnapshotCount(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (int, error) { q := InstanceSnapshotManager.Query() switch scope { @@ -564,7 +564,7 @@ func TotalInstanceSnapshotCount(scope rbacscope.TRbacScope, ownerId mcclient.IId q = q.Equals("tenant_id", ownerId.GetProjectId()) } - q = db.ObjectIdQueryWithPolicyResult(q, InstanceSnapshotManager, policyResult) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, InstanceSnapshotManager, policyResult) q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil) q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv) diff --git a/pkg/compute/models/inter_vpc_network.go b/pkg/compute/models/inter_vpc_network.go index 52c6d236a8..b327f566c5 100644 --- a/pkg/compute/models/inter_vpc_network.go +++ b/pkg/compute/models/inter_vpc_network.go @@ -289,7 +289,7 @@ func (self *SInterVpcNetwork) PerformAddvpc(ctx context.Context, userCred mcclie if len(input.VpcId) == 0 { return nil, httperrors.NewMissingParameterError("vpc_id") } - _vpc, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) + _vpc, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return nil, err } @@ -342,7 +342,7 @@ func (self *SInterVpcNetwork) PerformRemovevpc(ctx context.Context, userCred mcc return nil, httperrors.NewMissingParameterError("vpc_id") } // get vpc - _vpc, err := VpcManager.FetchByIdOrName(userCred, input.VpcId) + _vpc, err := VpcManager.FetchByIdOrName(ctx, userCred, input.VpcId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("vpc", input.VpcId) diff --git a/pkg/compute/models/inter_vpc_network_routeset.go b/pkg/compute/models/inter_vpc_network_routeset.go index b29461475c..715bfcc1b8 100644 --- a/pkg/compute/models/inter_vpc_network_routeset.go +++ b/pkg/compute/models/inter_vpc_network_routeset.go @@ -106,7 +106,7 @@ func (manager *SInterVpcNetworkRouteSetManager) ListItemFilter( return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter") } if len(query.InterVpcNetworkId) > 0 { - vpcNetwork, err := InterVpcNetworkManager.FetchByIdOrName(userCred, query.InterVpcNetworkId) + vpcNetwork, err := InterVpcNetworkManager.FetchByIdOrName(ctx, userCred, query.InterVpcNetworkId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("inter_vpc_network_id", query.InterVpcNetworkId) diff --git a/pkg/compute/models/intervpcnetworkresource.go b/pkg/compute/models/intervpcnetworkresource.go index b435644111..00913ef645 100644 --- a/pkg/compute/models/intervpcnetworkresource.go +++ b/pkg/compute/models/intervpcnetworkresource.go @@ -39,7 +39,7 @@ func (manager *SInterVpcNetworkResourceBaseManager) ListItemFilter( query api.InterVpcNetworkFilterListBase, ) (*sqlchemy.SQuery, error) { if len(query.InterVpcNetworkId) > 0 { - network, err := InterVpcNetworkManager.FetchByIdOrName(userCred, query.InterVpcNetworkId) + network, err := InterVpcNetworkManager.FetchByIdOrName(ctx, userCred, query.InterVpcNetworkId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("inter_vpc_network", query.InterVpcNetworkId) diff --git a/pkg/compute/models/isolated_device_models.go b/pkg/compute/models/isolated_device_models.go index 4f19fbd98e..1bcb10593b 100644 --- a/pkg/compute/models/isolated_device_models.go +++ b/pkg/compute/models/isolated_device_models.go @@ -106,7 +106,7 @@ func (self *SIsolatedDeviceModel) PostCreate(ctx context.Context, userCred mccli defer self.RemoveMetadata(ctx, api.MEAT_PROBED_HOST_COUNT, userCred) for i := range input.Hosts { - iHost, err := HostManager.FetchByIdOrName(userCred, input.Hosts[i]) + iHost, err := HostManager.FetchByIdOrName(ctx, userCred, input.Hosts[i]) if err != nil { log.Errorf("failed fetch host %s: %s", input.Hosts[i], err) continue @@ -140,7 +140,7 @@ func (self *SIsolatedDeviceModel) PostDelete(ctx context.Context, userCred mccli } go func() { for i := range hosts { - iHost, err := HostManager.FetchByIdOrName(userCred, hosts[i]) + iHost, err := HostManager.FetchByIdOrName(ctx, userCred, hosts[i]) if err != nil { log.Errorf("failed fetch host %s: %s", hosts[i], err) continue diff --git a/pkg/compute/models/isolated_devices.go b/pkg/compute/models/isolated_devices.go index e70acfa8da..70d369393a 100644 --- a/pkg/compute/models/isolated_devices.go +++ b/pkg/compute/models/isolated_devices.go @@ -159,7 +159,7 @@ func (manager *SIsolatedDeviceManager) ValidateCreateData(ctx context.Context, ) (api.IsolatedDeviceCreateInput, error) { var err error var host *SHost - host, input.HostResourceInput, err = ValidateHostResourceInput(userCred, input.HostResourceInput) + host, input.HostResourceInput, err = ValidateHostResourceInput(ctx, userCred, input.HostResourceInput) if err != nil { return input, errors.Wrap(err, "ValidateHostResourceInput") } @@ -327,7 +327,7 @@ func (manager *SIsolatedDeviceManager) ListItemFilter( } if query.GuestId != "" { - obj, err := GuestManager.FetchByIdOrName(userCred, query.GuestId) + obj, err := GuestManager.FetchByIdOrName(ctx, userCred, query.GuestId) if err != nil { return nil, errors.Wrapf(err, "Fetch guest by %q", query.GuestId) } @@ -703,6 +703,7 @@ func (manager *SIsolatedDeviceManager) ReleaseDevicesOfGuest(ctx context.Context } func (manager *SIsolatedDeviceManager) totalCountQ( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, devType []string, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, @@ -713,7 +714,7 @@ func (manager *SIsolatedDeviceManager) totalCountQ( if scope == rbacscope.ScopeDomain { hq = hq.Filter(sqlchemy.Equals(hq.Field("domain_id"), ownerId.GetProjectDomainId())) } - hq = db.ObjectIdQueryWithPolicyResult(hq, HostManager, policyResult) + hq = db.ObjectIdQueryWithPolicyResult(ctx, hq, HostManager, policyResult) hosts := hq.SubQuery() devs := manager.Query().SubQuery() q := devs.Query().Join(hosts, sqlchemy.Equals(devs.Field("host_id"), hosts.Field("id"))) @@ -730,6 +731,7 @@ type IsolatedDeviceCountStat struct { } func (manager *SIsolatedDeviceManager) totalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, devType, @@ -742,6 +744,7 @@ func (manager *SIsolatedDeviceManager) totalCount( policyResult rbacutils.SPolicyResult, ) (int, error) { return manager.totalCountQ( + ctx, scope, ownerId, devType, @@ -756,6 +759,7 @@ func (manager *SIsolatedDeviceManager) totalCount( } func (manager *SIsolatedDeviceManager) TotalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, hostType []string, @@ -768,6 +772,7 @@ func (manager *SIsolatedDeviceManager) TotalCount( ) (IsolatedDeviceCountStat, error) { stat := IsolatedDeviceCountStat{} devCnt, err := manager.totalCount( + ctx, scope, ownerId, nil, hostType, resourceTypes, providers, brands, cloudEnv, rangeObjs, policyResult) @@ -775,6 +780,7 @@ func (manager *SIsolatedDeviceManager) TotalCount( return stat, err } gpuCnt, err := manager.totalCount( + ctx, scope, ownerId, VALID_GPU_TYPES, hostType, resourceTypes, providers, brands, cloudEnv, rangeObjs, policyResult) @@ -1060,12 +1066,12 @@ func (manager *SIsolatedDeviceManager) ResourceScope() rbacscope.TRbacScope { return rbacscope.ScopeDomain } -func (manager *SIsolatedDeviceManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SIsolatedDeviceManager) 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: hostsQ := HostManager.Query("id") - hostsQ = HostManager.FilterByOwner(hostsQ, HostManager, userCred, owner, scope) + hostsQ = HostManager.FilterByOwner(ctx, hostsQ, HostManager, userCred, owner, scope) hosts := hostsQ.SubQuery() q = q.Join(hosts, sqlchemy.Equals(q.Field("host_id"), hosts.Field("id"))) } diff --git a/pkg/compute/models/kafka.go b/pkg/compute/models/kafka.go index 223d02d846..4fba13269a 100644 --- a/pkg/compute/models/kafka.go +++ b/pkg/compute/models/kafka.go @@ -327,6 +327,7 @@ type SKafkaCountStat struct { } func (man *SKafkaManager) TotalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -337,7 +338,7 @@ func (man *SKafkaManager) TotalCount( kq = scopeOwnerIdFilter(kq, scope, ownerId) kq = CloudProviderFilter(kq, kq.Field("manager_id"), providers, brands, cloudEnv) kq = RangeObjectsFilter(kq, rangeObjs, kq.Field("cloudregion_id"), nil, kq.Field("manager_id"), nil, nil) - kq = db.ObjectIdQueryWithPolicyResult(kq, man, policyResult) + kq = db.ObjectIdQueryWithPolicyResult(ctx, kq, man, policyResult) sq := kq.SubQuery() q := sq.Query(sqlchemy.COUNT("total_kafka_count"), diff --git a/pkg/compute/models/keypairs.go b/pkg/compute/models/keypairs.go index 425194595e..bb640d4150 100644 --- a/pkg/compute/models/keypairs.go +++ b/pkg/compute/models/keypairs.go @@ -289,8 +289,8 @@ func totalKeypairCount(userId string) (int, error) { return q.CountWithError() } -func (manager *SKeypairManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { - return db.SharableManagerFilterByOwner(manager.GetISharableVirtualModelManager(), q, userCred, owner, scope) +func (manager *SKeypairManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { + return db.SharableManagerFilterByOwner(ctx, manager.GetISharableVirtualModelManager(), q, userCred, owner, scope) } func (keypair *SKeypair) GetDetailsPrivatekey(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { diff --git a/pkg/compute/models/kube_clusters.go b/pkg/compute/models/kube_clusters.go index 68cf74ce06..5666106bb3 100644 --- a/pkg/compute/models/kube_clusters.go +++ b/pkg/compute/models/kube_clusters.go @@ -459,7 +459,7 @@ func (manager *SKubeClusterManager) ValidateCreateData( if len(input.VpcId) == 0 { return nil, httperrors.NewMissingParameterError("vpc_id") } - vpcObj, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) + vpcObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return nil, err } @@ -478,7 +478,7 @@ func (manager *SKubeClusterManager) ValidateCreateData( return nil, httperrors.NewMissingParameterError("network_ids") } for i := range input.NetworkIds { - _, err = validators.ValidateModel(userCred, NetworkManager, &input.NetworkIds[i]) + _, err = validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkIds[i]) if err != nil { return nil, err } diff --git a/pkg/compute/models/kube_node_pools.go b/pkg/compute/models/kube_node_pools.go index 6de4783cf5..a94239eef4 100644 --- a/pkg/compute/models/kube_node_pools.go +++ b/pkg/compute/models/kube_node_pools.go @@ -162,7 +162,7 @@ func (manager *SKubeNodePoolManager) FetchOwnerId(ctx context.Context, data json return db.FetchProjectInfo(ctx, data) } -func (manager *SKubeNodePoolManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SKubeNodePoolManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := KubeClusterManager.Query("id") switch scope { @@ -301,13 +301,13 @@ func (manager *SKubeNodePoolManager) ValidateCreateData(ctx context.Context, use if err != nil { return nil, err } - clusterObj, err := validators.ValidateModel(userCred, KubeClusterManager, &input.CloudKubeClusterId) + clusterObj, err := validators.ValidateModel(ctx, userCred, KubeClusterManager, &input.CloudKubeClusterId) if err != nil { return nil, err } cluster := clusterObj.(*SKubeCluster) for i := range input.NetworkIds { - _, err = validators.ValidateModel(userCred, NetworkManager, &input.NetworkIds[i]) + _, err = validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkIds[i]) if err != nil { return nil, err } @@ -320,7 +320,7 @@ func (manager *SKubeNodePoolManager) ValidateCreateData(ctx context.Context, use } if len(input.KeypairId) > 0 { - keypairObj, err := validators.ValidateModel(userCred, KeypairManager, &input.KeypairId) + keypairObj, err := validators.ValidateModel(ctx, userCred, KeypairManager, &input.KeypairId) if err != nil { return nil, err } diff --git a/pkg/compute/models/kube_nodes.go b/pkg/compute/models/kube_nodes.go index e83a0ad5b8..65b983b386 100644 --- a/pkg/compute/models/kube_nodes.go +++ b/pkg/compute/models/kube_nodes.go @@ -110,7 +110,7 @@ func (manager *SKubeNodeManager) FetchOwnerId(ctx context.Context, data jsonutil return db.FetchProjectInfo(ctx, data) } -func (manager *SKubeNodeManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SKubeNodeManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := KubeClusterManager.Query("id") switch scope { diff --git a/pkg/compute/models/loadbalanceraclresource.go b/pkg/compute/models/loadbalanceraclresource.go index 4abaf71257..ed2557421e 100644 --- a/pkg/compute/models/loadbalanceraclresource.go +++ b/pkg/compute/models/loadbalanceraclresource.go @@ -87,7 +87,7 @@ func (manager *SLoadbalancerAclResourceBaseManager) ListItemFilter( query api.LoadbalancerAclFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.AclId) > 0 { - _, err := validators.ValidateModel(userCred, LoadbalancerAclManager, &query.AclId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerAclManager, &query.AclId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalanceracls.go b/pkg/compute/models/loadbalanceracls.go index 960c9d531e..ef93761e3d 100644 --- a/pkg/compute/models/loadbalanceracls.go +++ b/pkg/compute/models/loadbalanceracls.go @@ -180,7 +180,7 @@ func (manager *SLoadbalancerAclManager) FetchCustomizeColumns( return rows } - q = LoadbalancerListenerManager.FilterByOwner(q, LoadbalancerListenerManager, userCred, ownerId, queryScope) + q = LoadbalancerListenerManager.FilterByOwner(ctx, q, LoadbalancerListenerManager, userCred, ownerId, queryScope) rows[i].LbListenerCount, _ = q.CountWithError() } diff --git a/pkg/compute/models/loadbalanceragents.go b/pkg/compute/models/loadbalanceragents.go index f708037846..fec0cf2f11 100644 --- a/pkg/compute/models/loadbalanceragents.go +++ b/pkg/compute/models/loadbalanceragents.go @@ -381,7 +381,7 @@ func (man *SLoadbalancerAgentManager) GetPropertyDefaultParams(ctx context.Conte { clusterV := validators.NewModelIdOrNameValidator("cluster", "loadbalancercluster", userCred) clusterV.Optional(true) - if err := clusterV.Validate(query.(*jsonutils.JSONDict)); err != nil { + if err := clusterV.Validate(ctx, query.(*jsonutils.JSONDict)); err != nil { return nil, err } if clusterV.Model != nil { @@ -411,7 +411,7 @@ func (man *SLoadbalancerAgentManager) ValidateCreateData(ctx context.Context, us // "cluster": clusterV, } for _, v := range keyV { - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -522,7 +522,7 @@ func (lbagent *SLoadbalancerAgent) ValidateUpdateData(ctx context.Context, userC "hb_timeout": validators.NewNonNegativeValidator("hb_timeout").Optional(true), } for _, v := range keyV { - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -660,7 +660,7 @@ func (lbagent *SLoadbalancerAgent) PerformHb(ctx context.Context, userCred mccli } for _, v := range keyV { v.Optional(true) - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -711,7 +711,7 @@ func (lbagent *SLoadbalancerAgent) PerformJoinCluster( if len(lbagent.ClusterId) > 0 { return nil, errors.Wrap(httperrors.ErrConflict, "lbagent has been join cluster") } - clusterObj, err := LoadbalancerClusterManager.FetchByIdOrName(userCred, input.ClusterId) + clusterObj, err := LoadbalancerClusterManager.FetchByIdOrName(ctx, userCred, input.ClusterId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrNotFound, "%s %s", LoadbalancerClusterManager.Keyword(), input.ClusterId) @@ -806,7 +806,7 @@ func (lbagent *SLoadbalancerAgent) PerformParamsPatch(ctx context.Context, userC d := jsonutils.NewDict() d.Set("params", data) paramsV := validators.NewStructValidator("params", ¶ms) - if err := paramsV.Validate(d); err != nil { + if err := paramsV.Validate(ctx, d); err != nil { return nil, err } { diff --git a/pkg/compute/models/loadbalanceragents_deploy.go b/pkg/compute/models/loadbalanceragents_deploy.go index e7e53416b2..813dd6e778 100644 --- a/pkg/compute/models/loadbalanceragents_deploy.go +++ b/pkg/compute/models/loadbalanceragents_deploy.go @@ -246,7 +246,7 @@ func (lbagent *SLoadbalancerAgent) validateHost(ctx context.Context, userCred mc case regutils.MatchIP4Addr(name): case strings.HasPrefix(name, "host:"): name = strings.TrimSpace(name[len("host:"):]) - obj, err := db.FetchByIdOrName(HostManager, userCred, name) + obj, err := db.FetchByIdOrName(ctx, HostManager, userCred, name) if err != nil { return httperrors.NewNotFoundError("find host %s: %v", name, err) } @@ -258,7 +258,7 @@ func (lbagent *SLoadbalancerAgent) validateHost(ctx context.Context, userCred mc name = name[len("server:"):] fallthrough default: - obj, err := db.FetchByIdOrName(GuestManager, userCred, name) + obj, err := db.FetchByIdOrName(ctx, GuestManager, userCred, name) if err != nil { return httperrors.NewNotFoundError("find guest %s: %v", name, err) } diff --git a/pkg/compute/models/loadbalancerbackendgroupresource.go b/pkg/compute/models/loadbalancerbackendgroupresource.go index a4a922e393..32318bc855 100644 --- a/pkg/compute/models/loadbalancerbackendgroupresource.go +++ b/pkg/compute/models/loadbalancerbackendgroupresource.go @@ -147,7 +147,7 @@ func (manager *SLoadbalancerBackendgroupResourceBaseManager) ListItemFilter( query api.LoadbalancerBackendGroupFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.BackendGroupId) > 0 { - _, err := validators.ValidateModel(userCred, LoadbalancerBackendGroupManager, &query.BackendGroupId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerBackendGroupManager, &query.BackendGroupId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalancerbackendgroups.go b/pkg/compute/models/loadbalancerbackendgroups.go index 637a426e00..f97c9e0b7f 100644 --- a/pkg/compute/models/loadbalancerbackendgroups.go +++ b/pkg/compute/models/loadbalancerbackendgroups.go @@ -92,7 +92,7 @@ func (manager *SLoadbalancerBackendGroupManager) FetchOwnerId(ctx context.Contex return db.FetchProjectInfo(ctx, data) } -func (manager *SLoadbalancerBackendGroupManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SLoadbalancerBackendGroupManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerManager.Query("id") switch scope { @@ -207,7 +207,7 @@ func (manager *SLoadbalancerBackendGroupManager) FilterByUniqValues(q *sqlchemy. } func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input *api.LoadbalancerBackendGroupCreateInput) (*api.LoadbalancerBackendGroupCreateInput, error) { - lbObj, err := validators.ValidateModel(userCred, LoadbalancerManager, &input.LoadbalancerId) + lbObj, err := validators.ValidateModel(ctx, userCred, LoadbalancerManager, &input.LoadbalancerId) if err != nil { return nil, err } @@ -240,7 +240,7 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont switch input.Backends[i].BackendType { case api.LB_BACKEND_GUEST: - guestObj, err := validators.ValidateModel(userCred, GuestManager, &input.Backends[i].Id) + guestObj, err := validators.ValidateModel(ctx, userCred, GuestManager, &input.Backends[i].Id) if err != nil { return nil, err } @@ -265,7 +265,7 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont if db.IsAdminAllowCreate(userCred, man).Result.IsDeny() { return nil, httperrors.NewForbiddenError("only sysadmin can specify host as backend") } - hostObj, err := validators.ValidateModel(userCred, HostManager, &input.Backends[i].Id) + hostObj, err := validators.ValidateModel(ctx, userCred, HostManager, &input.Backends[i].Id) if err != nil { return nil, err } @@ -477,7 +477,7 @@ func (man *SLoadbalancerBackendGroupManager) FetchCustomizeColumns( return rows } - q = LoadbalancerListenerManager.FilterByOwner(q, LoadbalancerListenerManager, userCred, ownerId, queryScope) + q = LoadbalancerListenerManager.FilterByOwner(ctx, q, LoadbalancerListenerManager, userCred, ownerId, queryScope) rows[i].LbListenerCount, _ = q.CountWithError() } diff --git a/pkg/compute/models/loadbalancerbackends.go b/pkg/compute/models/loadbalancerbackends.go index 1348dd643b..71df579638 100644 --- a/pkg/compute/models/loadbalancerbackends.go +++ b/pkg/compute/models/loadbalancerbackends.go @@ -101,7 +101,7 @@ func (manager *SLoadbalancerBackendManager) FetchOwnerId(ctx context.Context, da return db.FetchProjectInfo(ctx, data) } -func (man *SLoadbalancerBackendManager) FilterByOwner(q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (man *SLoadbalancerBackendManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerBackendGroupManager.Query("id") lb := LoadbalancerManager.Query().SubQuery() @@ -139,7 +139,7 @@ func (man *SLoadbalancerBackendManager) ListItemFilter( } data := jsonutils.Marshal(query).(*jsonutils.JSONDict) - q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{ + q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{ {Key: "backend", ModelKeyword: "server", OwnerId: userCred}, // NOTE extend this when new backend_type was added }) if err != nil { @@ -250,7 +250,7 @@ func (man *SLoadbalancerBackendManager) ValidateBackendVpc(lb *SLoadbalancer, gu func (man *SLoadbalancerBackendManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input *api.LoadbalancerBackendCreateInput) (*api.LoadbalancerBackendCreateInput, error) { - lbbgObj, err := validators.ValidateModel(userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) + lbbgObj, err := validators.ValidateModel(ctx, userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) if err != nil { return nil, err } @@ -284,7 +284,7 @@ func (man *SLoadbalancerBackendManager) ValidateCreateData(ctx context.Context, baseName := "" switch input.BackendType { case api.LB_BACKEND_GUEST: - guestObj, err := validators.ValidateModel(userCred, GuestManager, &input.BackendId) + guestObj, err := validators.ValidateModel(ctx, userCred, GuestManager, &input.BackendId) if err != nil { return nil, err } @@ -316,7 +316,7 @@ func (man *SLoadbalancerBackendManager) ValidateCreateData(ctx context.Context, host.Name, host.ManagerId, lb.Name, lb.ManagerId) } case api.LB_BACKEND_HOST: - hostObj, err := validators.ValidateModel(userCred, HostManager, &input.BackendId) + hostObj, err := validators.ValidateModel(ctx, userCred, HostManager, &input.BackendId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalancercachedacls.go b/pkg/compute/models/loadbalancercachedacls.go index 849cc31549..b6ecbf246f 100644 --- a/pkg/compute/models/loadbalancercachedacls.go +++ b/pkg/compute/models/loadbalancercachedacls.go @@ -93,7 +93,7 @@ func (manager *SCachedLoadbalancerAclManager) FetchOwnerId(ctx context.Context, return db.FetchProjectInfo(ctx, data) } -func (manager *SCachedLoadbalancerAclManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SCachedLoadbalancerAclManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerAclManager.Query("id") switch scope { diff --git a/pkg/compute/models/loadbalancercachedcertificates.go b/pkg/compute/models/loadbalancercachedcertificates.go index 4e90b84a95..55cd862c8c 100644 --- a/pkg/compute/models/loadbalancercachedcertificates.go +++ b/pkg/compute/models/loadbalancercachedcertificates.go @@ -94,7 +94,7 @@ func (manager *SCachedLoadbalancerCertificateManager) FetchOwnerId(ctx context.C return db.FetchProjectInfo(ctx, data) } -func (manager *SCachedLoadbalancerCertificateManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SCachedLoadbalancerCertificateManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerCertificateManager.Query("id") switch scope { diff --git a/pkg/compute/models/loadbalancercertificateresource.go b/pkg/compute/models/loadbalancercertificateresource.go index 664dd1c1ea..0f8d38b47b 100644 --- a/pkg/compute/models/loadbalancercertificateresource.go +++ b/pkg/compute/models/loadbalancercertificateresource.go @@ -87,7 +87,7 @@ func (manager *SLoadbalancerCertificateResourceBaseManager) ListItemFilter( query api.LoadbalancerCertificateFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.CertificateId) > 0 { - _, err := validators.ValidateModel(userCred, LoadbalancerCertificateManager, &query.CertificateId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerCertificateManager, &query.CertificateId) if err != nil { return q, err } diff --git a/pkg/compute/models/loadbalancercertificates.go b/pkg/compute/models/loadbalancercertificates.go index 342443c54d..94d127a631 100644 --- a/pkg/compute/models/loadbalancercertificates.go +++ b/pkg/compute/models/loadbalancercertificates.go @@ -121,7 +121,7 @@ func (manager *SLoadbalancerCertificateManager) FetchCustomizeColumns( return rows } - q = LoadbalancerListenerManager.FilterByOwner(q, LoadbalancerListenerManager, userCred, ownerId, queryScope) + q = LoadbalancerListenerManager.FilterByOwner(ctx, q, LoadbalancerListenerManager, userCred, ownerId, queryScope) rows[i].LbListenerCount, _ = q.CountWithError() } diff --git a/pkg/compute/models/loadbalancerclusterresource.go b/pkg/compute/models/loadbalancerclusterresource.go index c3cfdad459..3295eec57e 100644 --- a/pkg/compute/models/loadbalancerclusterresource.go +++ b/pkg/compute/models/loadbalancerclusterresource.go @@ -41,8 +41,8 @@ type SLoadbalancerClusterResourceBaseManager struct { SWireResourceBaseManager } -func ValidateLoadbalancerClusterResourceInput(userCred mcclient.TokenCredential, input api.LoadbalancerClusterResourceInput) (*SLoadbalancerCluster, api.LoadbalancerClusterResourceInput, error) { - clusterObj, err := LoadbalancerClusterManager.FetchByIdOrName(userCred, input.ClusterId) +func ValidateLoadbalancerClusterResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.LoadbalancerClusterResourceInput) (*SLoadbalancerCluster, api.LoadbalancerClusterResourceInput, error) { + clusterObj, err := LoadbalancerClusterManager.FetchByIdOrName(ctx, userCred, input.ClusterId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", LoadbalancerClusterManager.Keyword(), input.ClusterId) @@ -122,7 +122,7 @@ func (manager *SLoadbalancerClusterResourceBaseManager) ListItemFilter( query api.LoadbalancerClusterFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.ClusterId) > 0 { - clusterObj, _, err := ValidateLoadbalancerClusterResourceInput(userCred, query.LoadbalancerClusterResourceInput) + clusterObj, _, err := ValidateLoadbalancerClusterResourceInput(ctx, userCred, query.LoadbalancerClusterResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateLoadbalancerClusterResourceInput") } diff --git a/pkg/compute/models/loadbalancerclusters.go b/pkg/compute/models/loadbalancerclusters.go index 881746a316..7b72d342c1 100644 --- a/pkg/compute/models/loadbalancerclusters.go +++ b/pkg/compute/models/loadbalancerclusters.go @@ -154,7 +154,7 @@ func (man *SLoadbalancerClusterManager) ValidateCreateData( wireV.Optional(true), } for _, v := range vs { - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -207,7 +207,7 @@ func (lbc *SLoadbalancerCluster) ValidateUpdateData( ) (*jsonutils.JSONDict, error) { wireV := validators.NewModelIdOrNameValidator("wire", "wire", lbc.GetOwnerId()) wireV.Optional(true) - if err := wireV.Validate(data); err != nil { + if err := wireV.Validate(ctx, data); err != nil { return nil, err } if wireV.Model != nil { @@ -563,7 +563,7 @@ func (cluster *SLoadbalancerCluster) PerformParamsPatch(ctx context.Context, use d := jsonutils.NewDict() d.Set("params", data) paramsV := validators.NewStructValidator("params", ¶ms) - if err := paramsV.Validate(d); err != nil { + if err := paramsV.Validate(ctx, d); err != nil { return nil, err } // new vrrp virtual_router_id should be unique across clusters diff --git a/pkg/compute/models/loadbalancerlistenerresource.go b/pkg/compute/models/loadbalancerlistenerresource.go index 7f24eb8bc5..dcf7119cdb 100644 --- a/pkg/compute/models/loadbalancerlistenerresource.go +++ b/pkg/compute/models/loadbalancerlistenerresource.go @@ -123,7 +123,7 @@ func (manager *SLoadbalancerListenerResourceBaseManager) ListItemFilter( query api.LoadbalancerListenerFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.ListenerId) > 0 { - _, err := validators.ValidateModel(userCred, LoadbalancerListenerManager, &query.ListenerId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerListenerManager, &query.ListenerId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalancerlistenerrules.go b/pkg/compute/models/loadbalancerlistenerrules.go index 627b399ddf..351f948edf 100644 --- a/pkg/compute/models/loadbalancerlistenerrules.go +++ b/pkg/compute/models/loadbalancerlistenerrules.go @@ -102,7 +102,7 @@ func (manager *SLoadbalancerListenerRuleManager) FetchOwnerId(ctx context.Contex return db.FetchProjectInfo(ctx, data) } -func (man *SLoadbalancerListenerRuleManager) FilterByOwner(q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (man *SLoadbalancerListenerRuleManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerListenerManager.Query("id") lb := LoadbalancerManager.Query().SubQuery() @@ -424,7 +424,7 @@ func (man *SLoadbalancerListenerRuleManager) ListItemFilter( // userProjId := userCred.GetProjectId() data := jsonutils.Marshal(query).(*jsonutils.JSONDict) - q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{ + q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{ // {Key: "listener", ModelKeyword: "loadbalancerlistener", OwnerId: userCred}, {Key: "backend_group", ModelKeyword: "loadbalancerbackendgroup", OwnerId: userCred}, }) @@ -522,7 +522,7 @@ func (man *SLoadbalancerListenerRuleManager) ValidateCreateData(ctx context.Cont if len(input.Status) == 0 { input.Status = api.LB_STATUS_ENABLED } - listenerObj, err := validators.ValidateModel(userCred, LoadbalancerListenerManager, &input.ListenerId) + listenerObj, err := validators.ValidateModel(ctx, userCred, LoadbalancerListenerManager, &input.ListenerId) if err != nil { return nil, err } @@ -535,7 +535,7 @@ func (man *SLoadbalancerListenerRuleManager) ValidateCreateData(ctx context.Cont return nil, err } if region.GetDriver().IsSupportLoadbalancerListenerRuleRedirect() { - _, err := validators.ValidateModel(userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalancerlisteners.go b/pkg/compute/models/loadbalancerlisteners.go index 01ffa6ab52..8776ff44af 100644 --- a/pkg/compute/models/loadbalancerlisteners.go +++ b/pkg/compute/models/loadbalancerlisteners.go @@ -183,7 +183,7 @@ func (manager *SLoadbalancerListenerManager) FetchOwnerId(ctx context.Context, d return db.FetchProjectInfo(ctx, data) } -func (man *SLoadbalancerListenerManager) FilterByOwner(q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (man *SLoadbalancerListenerManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId != nil { sq := LoadbalancerManager.Query("id") switch scope { @@ -219,7 +219,7 @@ func (man *SLoadbalancerListenerManager) ListItemFilter( } if len(query.BackendGroup) > 0 { - _, err := validators.ValidateModel(userCred, LoadbalancerBackendGroupManager, &query.BackendGroup) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerBackendGroupManager, &query.BackendGroup) if err != nil { return nil, err } @@ -319,12 +319,12 @@ func (manager *SLoadbalancerListenerManager) FilterByUniqValues(q *sqlchemy.SQue } func (man *SLoadbalancerListenerManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input *api.LoadbalancerListenerCreateInput) (*api.LoadbalancerListenerCreateInput, error) { - lbObj, err := validators.ValidateModel(userCred, LoadbalancerManager, &input.LoadbalancerId) + lbObj, err := validators.ValidateModel(ctx, userCred, LoadbalancerManager, &input.LoadbalancerId) if err != nil { return nil, err } lb := lbObj.(*SLoadbalancer) - lbbgObj, err := validators.ValidateModel(userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) + lbbgObj, err := validators.ValidateModel(ctx, userCred, LoadbalancerBackendGroupManager, &input.BackendGroupId) if err != nil { return nil, err } @@ -350,7 +350,7 @@ func (man *SLoadbalancerListenerManager) ValidateCreateData(ctx context.Context, if len(input.AclId) == 0 { return nil, httperrors.NewMissingParameterError("acl_id") } - _, err := validators.ValidateModel(userCred, LoadbalancerAclManager, &input.AclId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerAclManager, &input.AclId) if err != nil { return nil, err } @@ -359,7 +359,7 @@ func (man *SLoadbalancerListenerManager) ValidateCreateData(ctx context.Context, if len(input.CertificateId) == 0 { return nil, httperrors.NewMissingParameterError("certificate_id") } - _, err := validators.ValidateModel(userCred, LoadbalancerCertificateManager, &input.CertificateId) + _, err := validators.ValidateModel(ctx, userCred, LoadbalancerCertificateManager, &input.CertificateId) if err != nil { return nil, err } @@ -442,13 +442,13 @@ func (lblis *SLoadbalancerListener) ValidateUpdateData(ctx context.Context, user if input.AclId == nil { return nil, httperrors.NewMissingParameterError("acl_id") } - _, err = validators.ValidateModel(userCred, LoadbalancerAclManager, input.AclId) + _, err = validators.ValidateModel(ctx, userCred, LoadbalancerAclManager, input.AclId) if err != nil { return nil, err } } if lblis.ListenerType == api.LB_LISTENER_TYPE_HTTPS && input.CertificateId != nil && len(*input.CertificateId) > 0 { - _, err = validators.ValidateModel(userCred, LoadbalancerCertificateManager, input.CertificateId) + _, err = validators.ValidateModel(ctx, userCred, LoadbalancerCertificateManager, input.CertificateId) if err != nil { return nil, err } diff --git a/pkg/compute/models/loadbalancernetworks.go b/pkg/compute/models/loadbalancernetworks.go index b7ebd23bf9..ee6f4ebe0d 100644 --- a/pkg/compute/models/loadbalancernetworks.go +++ b/pkg/compute/models/loadbalancernetworks.go @@ -122,7 +122,7 @@ func (m *SLoadbalancernetworkManager) NewLoadbalancerNetwork(ctx context.Context ln.MacAddr = macAddr } - usedMap := network.GetUsedAddresses() + usedMap := network.GetUsedAddresses(ctx) var recentReclaimed map[string]bool ipAddr, err := network.GetFreeIP(ctx, userCred, usedMap, recentReclaimed, req.Address, req.strategy, req.reserved, api.AddressTypeIPv4) diff --git a/pkg/compute/models/loadbalancerresource.go b/pkg/compute/models/loadbalancerresource.go index 73b892c5be..b41a189f05 100644 --- a/pkg/compute/models/loadbalancerresource.go +++ b/pkg/compute/models/loadbalancerresource.go @@ -41,8 +41,8 @@ type SLoadbalancerResourceBaseManager struct { SZoneResourceBaseManager } -func ValidateLoadbalancerResourceInput(userCred mcclient.TokenCredential, input api.LoadbalancerResourceInput) (*SLoadbalancer, api.LoadbalancerResourceInput, error) { - lbObj, err := LoadbalancerManager.FetchByIdOrName(userCred, input.LoadbalancerId) +func ValidateLoadbalancerResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.LoadbalancerResourceInput) (*SLoadbalancer, api.LoadbalancerResourceInput, error) { + lbObj, err := LoadbalancerManager.FetchByIdOrName(ctx, userCred, input.LoadbalancerId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", LoadbalancerManager.Keyword(), input.LoadbalancerId) @@ -195,7 +195,7 @@ func (manager *SLoadbalancerResourceBaseManager) ListItemFilter( query api.LoadbalancerFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.LoadbalancerId) > 0 { - lbObj, _, err := ValidateLoadbalancerResourceInput(userCred, query.LoadbalancerResourceInput) + lbObj, _, err := ValidateLoadbalancerResourceInput(ctx, userCred, query.LoadbalancerResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateLoadbalancerResourceInput") } diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 64459ad2f7..918a963b97 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -180,7 +180,7 @@ func (man *SLoadbalancerManager) ListItemFilter( ownerId := userCred data := jsonutils.Marshal(query).(*jsonutils.JSONDict) - q, err = validators.ApplyModelFilters(q, data, []*validators.ModelFilterOptions{ + q, err = validators.ApplyModelFilters(ctx, q, data, []*validators.ModelFilterOptions{ // {Key: "network", ModelKeyword: "network", OwnerId: ownerId}, {Key: "cluster", ModelKeyword: "loadbalancercluster", OwnerId: ownerId}, }) @@ -201,7 +201,7 @@ func (man *SLoadbalancerManager) ListItemFilter( // eip filters usableLbForEipFilter := query.UsableLoadbalancerForEip if len(usableLbForEipFilter) > 0 { - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, usableLbForEipFilter) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, usableLbForEipFilter) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("eip %s not found", usableLbForEipFilter) @@ -371,7 +371,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( input.Networks = networks[1:] } input.NetworkId = networks[0] - networkObj, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId) + networkObj, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId) if err != nil { return nil, err } @@ -392,7 +392,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( input.CloudproviderId = vpc.ManagerId input.CloudregionId = vpc.CloudregionId for i := range input.Networks { - netObj, err := validators.ValidateModel(userCred, NetworkManager, &input.Networks[i]) + netObj, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.Networks[i]) if err != nil { return nil, err } @@ -415,7 +415,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( } } } else if len(input.ZoneId) > 0 { - zoneObj, err := validators.ValidateModel(userCred, ZoneManager, &input.ZoneId) + zoneObj, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.ZoneId) if err != nil { return nil, err } @@ -429,7 +429,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( var cloudprovider *SCloudprovider = nil if len(input.CloudproviderId) > 0 { - managerObj, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) + managerObj, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return nil, err } @@ -438,7 +438,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( } 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 nil, err } @@ -452,7 +452,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( } if len(input.Zone1) > 0 { - _, err := validators.ValidateModel(userCred, ZoneManager, &input.Zone1) + _, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.Zone1) if err != nil { return nil, err } @@ -466,7 +466,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( } if len(input.EipId) > 0 { - eipObj, err := validators.ValidateModel(userCred, ElasticipManager, &input.EipId) + eipObj, err := validators.ValidateModel(ctx, userCred, ElasticipManager, &input.EipId) if err != nil { return nil, err } @@ -521,7 +521,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( input.Duration = billingCycle.String() } - regionObj, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + regionObj, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return nil, err } @@ -703,7 +703,7 @@ func (lb *SLoadbalancer) ValidateUpdateData(ctx context.Context, userCred mcclie ) for _, v := range keyV { v.Optional(true) - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -1327,6 +1327,7 @@ func (manager *SLoadbalancerManager) GetLbDefaultBackendGroupIds() ([]string, er } func (man *SLoadbalancerManager) TotalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -1334,7 +1335,7 @@ func (man *SLoadbalancerManager) TotalCount( policyResult rbacutils.SPolicyResult, ) (int, error) { q := man.Query() - q = db.ObjectIdQueryWithPolicyResult(q, man, policyResult) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, man, policyResult) q = scopeOwnerIdFilter(q, scope, ownerId) q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv) q = RangeObjectsFilter(q, rangeObjs, nil, q.Field("zone_id"), q.Field("manager_id"), nil, nil) @@ -1482,7 +1483,7 @@ func (lb *SLoadbalancer) PerformAssociateEip(ctx context.Context, userCred mccli if len(eipStr) == 0 { return nil, httperrors.NewMissingParameterError("eip_id") } - eipObj, err := ElasticipManager.FetchByIdOrName(userCred, eipStr) + eipObj, err := ElasticipManager.FetchByIdOrName(ctx, userCred, eipStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("eip %s not found", eipStr) diff --git a/pkg/compute/models/managedresource.go b/pkg/compute/models/managedresource.go index e497f2e96e..0ddc0013b8 100644 --- a/pkg/compute/models/managedresource.go +++ b/pkg/compute/models/managedresource.go @@ -50,8 +50,8 @@ func (self *SManagedResourceBase) GetCloudproviderId() string { return self.ManagerId } -func ValidateCloudproviderResourceInput(userCred mcclient.TokenCredential, query api.CloudproviderResourceInput) (*SCloudprovider, api.CloudproviderResourceInput, error) { - managerObj, err := CloudproviderManager.FetchByIdOrName(userCred, query.CloudproviderId) +func ValidateCloudproviderResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.CloudproviderResourceInput) (*SCloudprovider, api.CloudproviderResourceInput, error) { + managerObj, err := CloudproviderManager.FetchByIdOrName(ctx, userCred, query.CloudproviderId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", CloudproviderManager.Keyword(), query.CloudproviderId) @@ -271,7 +271,7 @@ func (manager *SManagedResourceBaseManager) ListItemFilter( userCred mcclient.TokenCredential, query api.ManagedResourceListInput, ) (*sqlchemy.SQuery, error) { - return _managedResourceFilterByAccount(manager.getManagerIdFileName(), q, query, "", nil) + return _managedResourceFilterByAccount(ctx, manager.getManagerIdFileName(), q, query, "", nil) } func (manager *SManagedResourceBaseManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) { @@ -487,18 +487,18 @@ func _filterByProviderStrs(managerIdFieldName string, q *sqlchemy.SQuery, filter return q } -func managedResourceFilterByAccount(q *sqlchemy.SQuery, input api.ManagedResourceListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { - return _managedResourceFilterByAccount("manager_id", q, input, filterField, subqFunc) +func managedResourceFilterByAccount(ctx context.Context, q *sqlchemy.SQuery, input api.ManagedResourceListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { + return _managedResourceFilterByAccount(ctx, "manager_id", q, input, filterField, subqFunc) } -func _managedResourceFilterByAccount(managerIdFieldName string, q *sqlchemy.SQuery, input api.ManagedResourceListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { +func _managedResourceFilterByAccount(ctx context.Context, managerIdFieldName string, q *sqlchemy.SQuery, input api.ManagedResourceListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { cloudproviderStrs := input.CloudproviderId managerIds := []string{} for _, cloudproviderStr := range cloudproviderStrs { if len(cloudproviderStr) == 0 { continue } - provider, err := CloudproviderManager.FetchByIdOrName(nil, cloudproviderStr) + provider, err := CloudproviderManager.FetchByIdOrName(ctx, nil, cloudproviderStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), cloudproviderStr) @@ -561,7 +561,7 @@ func _managedResourceFilterByAccount(managerIdFieldName string, q *sqlchemy.SQue return q, nil } -func managedResourceFilterByZone(q *sqlchemy.SQuery, query api.ZonalFilterListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { +func managedResourceFilterByZone(ctx context.Context, q *sqlchemy.SQuery, query api.ZonalFilterListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { zoneList := query.ZoneList() if len(query.ZoneIds) >= 1 { zoneQ := ZoneManager.Query("id") @@ -577,7 +577,7 @@ func managedResourceFilterByZone(q *sqlchemy.SQuery, query api.ZonalFilterListIn q = q.Filter(sqlchemy.In(q.Field(filterField), sq.SubQuery())) } } else if len(query.ZoneId) > 0 { - zoneObj, _, err := ValidateZoneResourceInput(nil, query.ZoneResourceInput) + zoneObj, _, err := ValidateZoneResourceInput(ctx, nil, query.ZoneResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateZoneResourceInput") } @@ -593,13 +593,13 @@ func managedResourceFilterByZone(q *sqlchemy.SQuery, query api.ZonalFilterListIn return q, nil } -func managedResourceFilterByRegion(q *sqlchemy.SQuery, query api.RegionalFilterListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { +func managedResourceFilterByRegion(ctx context.Context, q *sqlchemy.SQuery, query api.RegionalFilterListInput, filterField string, subqFunc func() *sqlchemy.SQuery) (*sqlchemy.SQuery, error) { regionIds := []string{} for _, region := range query.CloudregionId { if len(region) == 0 { continue } - regionObj, err := ValidateCloudregionId(nil, region) + regionObj, err := ValidateCloudregionId(ctx, nil, region) if err != nil { return nil, errors.Wrap(err, "ValidateCloudregionResourceInput") } diff --git a/pkg/compute/models/modelarts_pools.go b/pkg/compute/models/modelarts_pools.go index 7cef75eef3..492909eee1 100644 --- a/pkg/compute/models/modelarts_pools.go +++ b/pkg/compute/models/modelarts_pools.go @@ -164,13 +164,13 @@ func (man *SModelartsPoolManager) ValidateCreateData(ctx context.Context, userCr if err != nil { return input, httperrors.NewInputParameterError("invalid cidr: %s", input.Cidr) } - _, err = validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) + _, err = validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err } input.ManagerId = input.CloudproviderId - _, err = validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + _, err = validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return input, err } diff --git a/pkg/compute/models/mongodb.go b/pkg/compute/models/mongodb.go index 34b4a46d5a..23038a14a0 100644 --- a/pkg/compute/models/mongodb.go +++ b/pkg/compute/models/mongodb.go @@ -680,6 +680,7 @@ type SMongoDBCountStat struct { } func (man *SMongoDBManager) TotalCount( + ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -691,7 +692,7 @@ func (man *SMongoDBManager) TotalCount( mgq = scopeOwnerIdFilter(mgq, scope, ownerId) mgq = CloudProviderFilter(mgq, mgq.Field("manager_id"), providers, brands, cloudEnv) mgq = RangeObjectsFilter(mgq, rangeObjs, mgq.Field("cloudregion_id"), nil, mgq.Field("manager_id"), nil, nil) - mgq = db.ObjectIdQueryWithPolicyResult(mgq, man, policyResult) + mgq = db.ObjectIdQueryWithPolicyResult(ctx, mgq, man, policyResult) sq := mgq.SubQuery() q := sq.Query(sqlchemy.COUNT("total_mongodb_count"), diff --git a/pkg/compute/models/mount_targets.go b/pkg/compute/models/mount_targets.go index e35d8368be..8445e78f8c 100644 --- a/pkg/compute/models/mount_targets.go +++ b/pkg/compute/models/mount_targets.go @@ -87,7 +87,7 @@ func (manager *SMountTargetManager) ValidateCreateData(ctx context.Context, user if len(input.FileSystemId) == 0 { return input, httperrors.NewMissingParameterError("file_system_id") } - _fs, err := validators.ValidateModel(userCred, FileSystemManager, &input.FileSystemId) + _fs, err := validators.ValidateModel(ctx, userCred, FileSystemManager, &input.FileSystemId) if err != nil { return input, err } @@ -111,7 +111,7 @@ func (manager *SMountTargetManager) ValidateCreateData(ctx context.Context, user if len(input.NetworkId) == 0 { return input, httperrors.NewMissingParameterError("network_id") } - _network, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId) + _network, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId) if err != nil { return input, err } @@ -131,7 +131,7 @@ func (manager *SMountTargetManager) ValidateCreateData(ctx context.Context, user if len(input.AccessGroupId) == 0 { return input, httperrors.NewMissingParameterError("access_group_id") } - groupObj, err := validators.ValidateModel(userCred, AccessGroupManager, &input.AccessGroupId) + groupObj, err := validators.ValidateModel(ctx, userCred, AccessGroupManager, &input.AccessGroupId) if err != nil { return input, err } @@ -205,7 +205,7 @@ func (manager *SMountTargetManager) ListItemFilter( return nil, errors.Wrapf(err, "SNetworkResourceBaseManager.ListItemFilter") } if len(query.FileSystemId) > 0 { - _, err := validators.ValidateModel(userCred, FileSystemManager, &query.FileSystemId) + _, err := validators.ValidateModel(ctx, userCred, FileSystemManager, &query.FileSystemId) if err != nil { return nil, err } @@ -271,7 +271,7 @@ func (self *SMountTarget) GetOwnerId() mcclient.IIdentityProvider { return &db.SOwnerId{DomainId: fs.DomainId} } -func (manager *SMountTargetManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SMountTargetManager) 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 := FileSystemManager.Query("id") if scope == rbacscope.ScopeDomain && len(owner.GetProjectDomainId()) > 0 { diff --git a/pkg/compute/models/natdtable.go b/pkg/compute/models/natdtable.go index 549788ddde..0bde0112e9 100644 --- a/pkg/compute/models/natdtable.go +++ b/pkg/compute/models/natdtable.go @@ -152,7 +152,7 @@ func (man *SNatDEntryManager) ValidateCreateData(ctx context.Context, userCred m return nil, httperrors.NewInputParameterError("invalid internal ip address: %s", input.InternalIp) } - _eip, err := validators.ValidateModel(userCred, ElasticipManager, &input.Eip) + _eip, err := validators.ValidateModel(ctx, userCred, ElasticipManager, &input.Eip) if err != nil { return nil, err } diff --git a/pkg/compute/models/natgatewayresource.go b/pkg/compute/models/natgatewayresource.go index 42782e7231..c5dc00edf5 100644 --- a/pkg/compute/models/natgatewayresource.go +++ b/pkg/compute/models/natgatewayresource.go @@ -39,8 +39,8 @@ type SNatgatewayResourceBaseManager struct { SVpcResourceBaseManager } -func ValidateNatGatewayResourceInput(userCred mcclient.TokenCredential, input api.NatGatewayResourceInput) (*SNatGateway, api.NatGatewayResourceInput, error) { - natObj, err := NatGatewayManager.FetchByIdOrName(userCred, input.NatgatewayId) +func ValidateNatGatewayResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.NatGatewayResourceInput) (*SNatGateway, api.NatGatewayResourceInput, error) { + natObj, err := NatGatewayManager.FetchByIdOrName(ctx, userCred, input.NatgatewayId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", NatGatewayManager.Keyword(), input.NatgatewayId) @@ -117,7 +117,7 @@ func (manager *SNatgatewayResourceBaseManager) ListItemFilter( query api.NatGatewayFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.NatgatewayId) > 0 { - natObj, _, err := ValidateNatGatewayResourceInput(userCred, query.NatGatewayResourceInput) + natObj, _, err := ValidateNatGatewayResourceInput(ctx, userCred, query.NatGatewayResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateNatGatewayResourceInput") } diff --git a/pkg/compute/models/natgateways.go b/pkg/compute/models/natgateways.go index bfe3ca57d4..264b5ab5a8 100644 --- a/pkg/compute/models/natgateways.go +++ b/pkg/compute/models/natgateways.go @@ -154,7 +154,7 @@ func (man *SNatGatewayManager) ValidateCreateData( if len(input.NetworkId) == 0 { return input, httperrors.NewMissingParameterError("network_id") } - _network, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId) + _network, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId) if err != nil { return input, err } @@ -189,7 +189,7 @@ func (man *SNatGatewayManager) ValidateCreateData( } if len(input.Eip) > 0 || input.EipBw > 0 { if len(input.Eip) > 0 { - _eip, err := validators.ValidateModel(userCred, ElasticipManager, &input.Eip) + _eip, err := validators.ValidateModel(ctx, userCred, ElasticipManager, &input.Eip) if err != nil { return input, err } @@ -819,10 +819,11 @@ func (man *SNatEntryManager) ListItemFilter( return nil, errors.Wrap(err, "SNatgatewayResourceBaseManager.ListItemFilter") } - q, err = managedResourceFilterByAccount(q, query.ManagedResourceListInput, "natgateway_id", func() *sqlchemy.SQuery { - natgateways := NatGatewayManager.Query().SubQuery() - return natgateways.Query(natgateways.Field("id")) - }) + q, err = managedResourceFilterByAccount(ctx, + q, query.ManagedResourceListInput, "natgateway_id", func() *sqlchemy.SQuery { + natgateways := NatGatewayManager.Query().SubQuery() + return natgateways.Query(natgateways.Field("id")) + }) if err != nil { return nil, errors.Wrap(err, "managedResourceFilterByAccount") } diff --git a/pkg/compute/models/natstable.go b/pkg/compute/models/natstable.go index b88a164943..c4845f899a 100644 --- a/pkg/compute/models/natstable.go +++ b/pkg/compute/models/natstable.go @@ -177,7 +177,7 @@ func (man *SNatSEntryManager) ValidateCreateData(ctx context.Context, userCred m return nil, httperrors.NewInputParameterError("source_cidr and network_id conflict") } - _nat, err := validators.ValidateModel(userCred, NatGatewayManager, &input.NatgatewayId) + _nat, err := validators.ValidateModel(ctx, userCred, NatGatewayManager, &input.NatgatewayId) if err != nil { return nil, err } @@ -201,7 +201,7 @@ func (man *SNatSEntryManager) ValidateCreateData(ctx context.Context, userCred m return nil, httperrors.NewInputParameterError("cidr %s is not in range vpc %s", input.SourceCidr, vpc.CidrBlock) } } else { - _network, err := validators.ValidateModel(userCred, NetworkManager, &input.NetworkId) + _network, err := validators.ValidateModel(ctx, userCred, NetworkManager, &input.NetworkId) if err != nil { return nil, err } @@ -215,7 +215,7 @@ func (man *SNatSEntryManager) ValidateCreateData(ctx context.Context, userCred m } } - _eip, err := validators.ValidateModel(userCred, ElasticipManager, &input.Eip) + _eip, err := validators.ValidateModel(ctx, userCred, ElasticipManager, &input.Eip) if err != nil { return nil, err } diff --git a/pkg/compute/models/net_tap_flows.go b/pkg/compute/models/net_tap_flows.go index dde7ce64bf..27c9912c08 100644 --- a/pkg/compute/models/net_tap_flows.go +++ b/pkg/compute/models/net_tap_flows.go @@ -83,7 +83,7 @@ func (man *SNetTapFlowManager) ListItemFilter( return nil, errors.Wrap(err, "SEnabledStatusInfrasResourceBaseManager.ListItemFilter") } if len(query.TapId) > 0 { - tapObj, err := NetTapServiceManager.FetchByIdOrName(userCred, query.TapId) + tapObj, err := NetTapServiceManager.FetchByIdOrName(ctx, userCred, query.TapId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s not found", NetTapServiceManager.Keyword(), query.TapId) @@ -94,7 +94,7 @@ func (man *SNetTapFlowManager) ListItemFilter( q = q.Equals("tap_id", tapObj.GetId()) } if len(query.HostId) > 0 { - hostObj, err := HostManager.FetchByIdOrName(userCred, query.HostId) + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, query.HostId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(HostManager.Keyword(), query.HostId) @@ -245,7 +245,7 @@ func (manager *SNetTapFlowManager) ValidateCreateData( if err != nil { return input, errors.Wrap(err, "SEnabledStatusInfrasResourceBaseManager.ValidateCreateData(") } - tapObj, err := NetTapServiceManager.FetchByIdOrName(userCred, input.TapId) + tapObj, err := NetTapServiceManager.FetchByIdOrName(ctx, userCred, input.TapId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2(NetTapServiceManager.Keyword(), input.TapId) @@ -257,7 +257,7 @@ func (manager *SNetTapFlowManager) ValidateCreateData( input.TapId = tap.Id switch input.Type { case api.TapFlowVSwitch: - hostObj, err := HostManager.FetchByIdOrName(userCred, input.HostId) + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, input.HostId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2(HostManager.Keyword(), input.HostId) @@ -265,7 +265,7 @@ func (manager *SNetTapFlowManager) ValidateCreateData( return input, errors.Wrap(err, "HostManager.FetchByIdOrName") } } - wireObj, err := WireManager.FetchByIdOrName(userCred, input.WireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, input.WireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), input.WireId) @@ -300,7 +300,7 @@ func (manager *SNetTapFlowManager) ValidateCreateData( return input, errors.Wrapf(httperrors.ErrInputParameter, "invalid vlan id %d", *input.VlanId) } case api.TapFlowGuestNic: - guestObj, err := GuestManager.FetchByIdOrName(userCred, input.GuestId) + guestObj, err := GuestManager.FetchByIdOrName(ctx, userCred, input.GuestId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2(GuestManager.Keyword(), input.GuestId) diff --git a/pkg/compute/models/net_tap_services.go b/pkg/compute/models/net_tap_services.go index 83936d6bef..7005d307e5 100644 --- a/pkg/compute/models/net_tap_services.go +++ b/pkg/compute/models/net_tap_services.go @@ -81,7 +81,7 @@ func (man *SNetTapServiceManager) ListItemFilter( } if len(query.HostId) > 0 { - hostObj, err := HostManager.FetchByIdOrName(userCred, query.HostId) + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, query.HostId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(HostManager.Keyword(), query.HostId) @@ -242,7 +242,7 @@ func (manager *SNetTapServiceManager) ValidateCreateData( } switch input.Type { case api.TapServiceHost: - hostObj, err := HostManager.FetchByIdOrName(userCred, input.TargetId) + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, input.TargetId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", HostManager.Keyword(), input.TargetId) @@ -272,7 +272,7 @@ func (manager *SNetTapServiceManager) ValidateCreateData( } input.TargetId = hostObj.GetId() case api.TapServiceGuest: - guestObj, err := GuestManager.FetchByIdOrName(userCred, input.TargetId) + guestObj, err := GuestManager.FetchByIdOrName(ctx, userCred, input.TargetId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", GuestManager.Keyword(), input.TargetId) diff --git a/pkg/compute/models/netinterfaces.go b/pkg/compute/models/netinterfaces.go index 34685309b2..8d7639caff 100644 --- a/pkg/compute/models/netinterfaces.go +++ b/pkg/compute/models/netinterfaces.go @@ -278,13 +278,13 @@ func (netif *SNetInterface) Delete(ctx context.Context, userCred mcclient.TokenC return netif.SResourceBase.Delete(ctx, userCred) } -func (netIf *SNetInterface) GetCandidateNetworkForIp(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, ipAddr string) (*SNetwork, error) { +func (netIf *SNetInterface) GetCandidateNetworkForIp(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, ipAddr string) (*SNetwork, error) { wire := netIf.GetWire() if wire == nil { return nil, nil } log.Infof("ipAddr: %s, netiName: %s, wire: %s", ipAddr, netIf.GetName(), wire.GetName()) - return wire.GetCandidateNetworkForIp(userCred, ownerId, scope, ipAddr) + return wire.GetCandidateNetworkForIp(ctx, userCred, ownerId, scope, ipAddr) } func (netif *SNetInterface) IsUsableServernic() bool { diff --git a/pkg/compute/models/network_ip_mac.go b/pkg/compute/models/network_ip_mac.go index 99848cf6cb..31586a2ae4 100644 --- a/pkg/compute/models/network_ip_mac.go +++ b/pkg/compute/models/network_ip_mac.go @@ -117,7 +117,7 @@ func (manager *SNetworkIpMacManager) ValidateCreateData( return input, httperrors.NewMissingParameterError("mac_addr") } - iNetwork, err := NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + iNetwork, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err == sql.ErrNoRows { return input, httperrors.NewNotFoundError("network %s not found", input.NetworkId) } else if err != nil { @@ -142,7 +142,7 @@ func (self *SNetworkIpMac) ValidateUpdateData( } if input.IpAddr != "" && input.IpAddr != self.IpAddr { - iNetwork, err := NetworkManager.FetchByIdOrName(userCred, self.NetworkId) + iNetwork, err := NetworkManager.FetchByIdOrName(ctx, userCred, self.NetworkId) if err != nil { return input, errors.Wrap(err, "fetch network") } @@ -195,7 +195,7 @@ func (manager *SNetworkIpMacManager) ListItemFilter( return nil, errors.Wrap(err, "SStandaloneAnonResourceBaseManager.ListItemFilter") } if input.NetworkId != "" { - iNetwork, err := NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + iNetwork, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { return q, errors.Wrap(err, "fetch network") } @@ -251,21 +251,21 @@ func (manager *SNetworkIpMacManager) validateIpMac(ip, mac string, network *SNet } func (self *SNetworkIpMac) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { - iNetwork, _ := NetworkManager.FetchByIdOrName(userCred, self.NetworkId) + iNetwork, _ := NetworkManager.FetchByIdOrName(ctx, userCred, self.NetworkId) note := fmt.Sprintf("create ip %s mac %s bind", self.IpAddr, self.MacAddr) db.OpsLog.LogEvent(iNetwork, db.ACT_IP_MAC_BIND, note, userCred) logclient.AddActionLogWithContext(ctx, iNetwork, logclient.ACT_IP_MAC_BIND, note, userCred, true) } func (self *SNetworkIpMac) PostUpdate(ctx context.Context, userCred mcclient.TokenCredential, query, data jsonutils.JSONObject) { - iNetwork, _ := NetworkManager.FetchByIdOrName(userCred, self.NetworkId) + iNetwork, _ := NetworkManager.FetchByIdOrName(ctx, userCred, self.NetworkId) note := fmt.Sprintf("update ip %s mac %s bind", self.IpAddr, self.MacAddr) db.OpsLog.LogEvent(iNetwork, db.ACT_IP_MAC_BIND, note, userCred) logclient.AddActionLogWithContext(ctx, iNetwork, logclient.ACT_IP_MAC_BIND, note, userCred, true) } func (self *SNetworkIpMac) PostDelete(ctx context.Context, userCred mcclient.TokenCredential) { - iNetwork, _ := NetworkManager.FetchByIdOrName(userCred, self.NetworkId) + iNetwork, _ := NetworkManager.FetchByIdOrName(ctx, userCred, self.NetworkId) note := fmt.Sprintf("delete ip %s mac %s bind", self.IpAddr, self.MacAddr) db.OpsLog.LogEvent(iNetwork, db.ACT_IP_MAC_BIND, note, userCred) logclient.AddActionLogWithContext(ctx, iNetwork, logclient.ACT_IP_MAC_BIND, note, userCred, true) @@ -274,7 +274,7 @@ func (self *SNetworkIpMac) PostDelete(ctx context.Context, userCred mcclient.Tok func (manager *SNetworkIpMacManager) PerformBatchCreate( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input *api.NetworkIpMacBatchCreateInput, ) (jsonutils.JSONObject, error) { - iNetwork, err := NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + iNetwork, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { return nil, errors.Wrap(err, "fetch network") } diff --git a/pkg/compute/models/networkaddresses.go b/pkg/compute/models/networkaddresses.go index 295ba06150..8109dc99fa 100644 --- a/pkg/compute/models/networkaddresses.go +++ b/pkg/compute/models/networkaddresses.go @@ -215,7 +215,7 @@ func (man *SNetworkAddressManager) addGuestnetworkSubIPs(ctx context.Context, us lockman.LockObject(ctx, net) defer lockman.ReleaseObject(ctx, net) var ( - usedAddrMap = net.GetUsedAddresses() + usedAddrMap = net.GetUsedAddresses(ctx) ) errs := make([]error, 0) for _, ipAddr := range ipAddrs { @@ -514,15 +514,17 @@ func (man *SNetworkAddressManager) ListItemFilter(ctx context.Context, q *sqlche q = q.In("id", idq.SubQuery()) } - q, err = managedResourceFilterByAccount(q, input.ManagedResourceListInput, "network_id", func() *sqlchemy.SQuery { - networks := NetworkManager.Query().SubQuery() - wires := WireManager.Query().SubQuery() - vpcs := VpcManager.Query().SubQuery() - subq := networks.Query(networks.Field("id")) - subq = subq.Join(wires, sqlchemy.Equals(wires.Field("id"), networks.Field("wire_id"))) - subq = subq.Join(vpcs, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id"))) - return subq - }) + q, err = managedResourceFilterByAccount( + ctx, + q, input.ManagedResourceListInput, "network_id", func() *sqlchemy.SQuery { + networks := NetworkManager.Query().SubQuery() + wires := WireManager.Query().SubQuery() + vpcs := VpcManager.Query().SubQuery() + subq := networks.Query(networks.Field("id")) + subq = subq.Join(wires, sqlchemy.Equals(wires.Field("id"), networks.Field("wire_id"))) + subq = subq.Join(vpcs, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id"))) + return subq + }) if err != nil { return nil, errors.Wrap(err, "ManagedResourceFilterByAccount") } @@ -592,8 +594,8 @@ func (man *SNetworkAddressManager) FetchCustomizeColumns( return ret } -func (man *SNetworkAddressManager) FilterByOwner(q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { - q = db.ApplyFilterByOwner(q, userCred, owner, scope, +func (man *SNetworkAddressManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, manager db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { + q = db.ApplyFilterByOwner(ctx, q, userCred, owner, scope, &man.SStandaloneAnonResourceBaseManager, ) if owner != nil { @@ -665,7 +667,7 @@ func (g *SGuest) PerformAddSubIps(ctx context.Context, userCred mcclient.TokenCr lockman.LockObject(ctx, net) defer lockman.ReleaseObject(ctx, net) - addrTable := net.GetUsedAddresses() + addrTable := net.GetUsedAddresses(ctx) recentUsedAddrTable := GuestnetworkManager.getRecentlyReleasedIPAddresses(net.Id, net.getAllocTimoutDuration()) for i := 0; i < input.Count; i++ { diff --git a/pkg/compute/models/networkinterfacenetwork.go b/pkg/compute/models/networkinterfacenetwork.go index 6921a3b4df..e1621fd146 100644 --- a/pkg/compute/models/networkinterfacenetwork.go +++ b/pkg/compute/models/networkinterfacenetwork.go @@ -169,7 +169,7 @@ func (manager *SNetworkinterfacenetworkManager) newFromCloudInterfaceAddress(ctx return fmt.Errorf("ip %s not in network %s(%s) range", address.IpAddr, network.Name, network.Id) } // skip sync used ip address - if used, err := network.isAddressUsed(address.IpAddr); err != nil || used { + if used, err := network.isAddressUsed(ctx, address.IpAddr); err != nil || used { return nil } diff --git a/pkg/compute/models/networkresource.go b/pkg/compute/models/networkresource.go index 0d5601a5c3..640da6bfee 100644 --- a/pkg/compute/models/networkresource.go +++ b/pkg/compute/models/networkresource.go @@ -39,8 +39,8 @@ type SNetworkResourceBaseManager struct { SWireResourceBaseManager } -func ValidateNetworkResourceInput(userCred mcclient.TokenCredential, query api.NetworkResourceInput) (*SNetwork, api.NetworkResourceInput, error) { - netObj, err := NetworkManager.FetchByIdOrName(userCred, query.NetworkId) +func ValidateNetworkResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.NetworkResourceInput) (*SNetwork, api.NetworkResourceInput, error) { + netObj, err := NetworkManager.FetchByIdOrName(ctx, userCred, query.NetworkId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", NetworkManager.Keyword(), query.NetworkId) @@ -143,7 +143,7 @@ func (manager *SNetworkResourceBaseManager) ListItemFilter( query api.NetworkFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.NetworkId) > 0 { - netObj, _, err := ValidateNetworkResourceInput(userCred, query.NetworkResourceInput) + netObj, _, err := ValidateNetworkResourceInput(ctx, userCred, query.NetworkResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateNetworkResourceInput") } diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 79bbf3b771..db72174af0 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -258,10 +258,10 @@ func (manager *SNetworkManager) GetOrCreateClassicNetwork(ctx context.Context, w return &network, nil } -func (snet *SNetwork) GetUsedAddresses() map[string]bool { +func (snet *SNetwork) GetUsedAddresses(ctx context.Context) map[string]bool { used := make(map[string]bool) - q := snet.getUsedAddressQuery(nil, nil, rbacscope.ScopeSystem, true) + q := snet.getUsedAddressQuery(ctx, nil, nil, rbacscope.ScopeSystem, true) results, err := q.AllStringMap() if err != nil { log.Errorf("GetUsedAddresses fail %s", err) @@ -273,10 +273,10 @@ func (snet *SNetwork) GetUsedAddresses() map[string]bool { return used } -func (snet *SNetwork) GetUsedAddresses6() map[string]bool { +func (snet *SNetwork) GetUsedAddresses6(ctx context.Context) map[string]bool { used := make(map[string]bool) - q := snet.getUsedAddressQuery6(nil, nil, rbacscope.ScopeSystem, true) + q := snet.getUsedAddressQuery6(ctx, nil, nil, rbacscope.ScopeSystem, true) results, err := q.AllStringMap() if err != nil { log.Errorf("GetUsedAddresses fail %s", err) @@ -437,7 +437,7 @@ func (snet *SNetwork) GetFreeIP(ctx context.Context, userCred mcclient.TokenCred if addrType == api.AddressTypeIPv6 { if addrTable == nil { - addrTable = snet.GetUsedAddresses6() + addrTable = snet.GetUsedAddresses6(ctx) } if recentUsedAddrTable == nil { recentUsedAddrTable = GuestnetworkManager.getRecentlyReleasedIPAddresses6(snet.Id, snet.getAllocTimoutDuration()) @@ -449,7 +449,7 @@ func (snet *SNetwork) GetFreeIP(ctx context.Context, userCred mcclient.TokenCred return cand, nil } else { if addrTable == nil { - addrTable = snet.GetUsedAddresses() + addrTable = snet.GetUsedAddresses(ctx) } if recentUsedAddrTable == nil { recentUsedAddrTable = GuestnetworkManager.getRecentlyReleasedIPAddresses(snet.Id, snet.getAllocTimoutDuration()) @@ -615,16 +615,8 @@ func (snet *SNetwork) IsExitNetwork() bool { return netutils.IsExitAddress(snet.GetGuestIpv4StartAddress()) } -func (manager *SNetworkManager) getNetworksByWire(wire *SWire) ([]SNetwork, error) { - return wire.getNetworks(nil, nil, rbacscope.ScopeNone) - /* nets := make([]SNetwork, 0) - q := manager.Query().Equals("wire_id", wire.Id) - err := db.FetchModelObjects(manager, q, &nets) - if err != nil { - log.Errorf("getNetworkByWire fail %s", err) - return nil, err - } - return nets, nil */ +func (manager *SNetworkManager) getNetworksByWire(ctx context.Context, wire *SWire) ([]SNetwork, error) { + return wire.getNetworks(ctx, nil, nil, rbacscope.ScopeNone) } func (manager *SNetworkManager) SyncNetworks( @@ -644,7 +636,7 @@ func (manager *SNetworkManager) SyncNetworks( remoteNets := make([]cloudprovider.ICloudNetwork, 0) syncResult := compare.SyncResult{} - dbNets, err := manager.getNetworksByWire(wire) + dbNets, err := manager.getNetworksByWire(ctx, wire) if err != nil { syncResult.Error(err) return nil, nil, syncResult @@ -873,8 +865,8 @@ func (net *SNetwork) IsAddressInNet(address netutils.IPV4Addr) bool { return net.getNetRange().Contains(address) } -func (snet *SNetwork) isAddressUsed(address string) (bool, error) { - q := snet.getUsedAddressQuery(nil, nil, rbacscope.ScopeSystem, true) +func (snet *SNetwork) isAddressUsed(ctx context.Context, address string) (bool, error) { + q := snet.getUsedAddressQuery(ctx, nil, nil, rbacscope.ScopeSystem, true) q = q.Equals("ip_addr", address) count, err := q.CountWithError() if err != nil && errors.Cause(err) != sql.ErrNoRows { @@ -887,8 +879,8 @@ func (snet *SNetwork) isAddressUsed(address string) (bool, error) { } } -func (snet *SNetwork) isAddress6Used(address string) (bool, error) { - q := snet.getUsedAddressQuery6(nil, nil, rbacscope.ScopeSystem, true) +func (snet *SNetwork) isAddress6Used(ctx context.Context, address string) (bool, error) { + q := snet.getUsedAddressQuery6(ctx, nil, nil, rbacscope.ScopeSystem, true) q = q.Equals("ip6_addr", address) count, err := q.CountWithError() if err != nil && errors.Cause(err) != sql.ErrNoRows { @@ -955,6 +947,7 @@ func (manager *SNetworkManager) allNetworksQ(providers []string, brands []string } func (manager *SNetworkManager) totalPortCountQ( + ctx context.Context, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, providers []string, @@ -971,7 +964,7 @@ func (manager *SNetworkManager) totalPortCountQ( case rbacscope.ScopeProject: q = q.Equals("tenant_id", userCred.GetProjectId()) } - q = db.ObjectIdQueryWithPolicyResult(q, manager, policyResult) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, manager, policyResult) return manager.Query().In("id", q.Distinct().SubQuery()) } @@ -981,6 +974,7 @@ type NetworkPortStat struct { } func (manager *SNetworkManager) TotalPortCount( + ctx context.Context, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, providers []string, brands []string, cloudEnv string, @@ -989,6 +983,7 @@ func (manager *SNetworkManager) TotalPortCount( ) map[string]NetworkPortStat { nets := make([]SNetwork, 0) err := manager.totalPortCountQ( + ctx, scope, userCred, providers, brands, cloudEnv, @@ -1034,7 +1029,7 @@ type SNicConfig struct { func parseNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, info *api.NetworkConfig) (*api.NetworkConfig, error) { if info.Network != "" { - netObj, err := NetworkManager.FetchByIdOrName(userCred, info.Network) + netObj, err := NetworkManager.FetchByIdOrName(ctx, userCred, info.Network) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(NetworkManager.Keyword(), info.Network) @@ -1093,7 +1088,7 @@ func (snet *SNetwork) getFreeAddress6Count() (int, error) { func isValidNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, netConfig *api.NetworkConfig, reuseAddr string) error { if len(netConfig.Network) > 0 { - netObj, err := NetworkManager.FetchByIdOrName(userCred, netConfig.Network) + netObj, err := NetworkManager.FetchByIdOrName(ctx, userCred, netConfig.Network) if err != nil { return httperrors.NewResourceNotFoundError("Network %s not found: %v", netConfig.Network, err) } @@ -1120,7 +1115,7 @@ func isValidNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, return httperrors.NewInputParameterError("Address %s not reserved", netConfig.Address) } } else { - used, err := net.isAddressUsed(netConfig.Address) + used, err := net.isAddressUsed(ctx, netConfig.Address) if err != nil { return httperrors.NewInternalServerError("isAddressUsed fail %s", err) } @@ -1150,7 +1145,7 @@ func isValidNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, return httperrors.NewInputParameterError("Address v6 %s not reserved", netConfig.Address6) } } else { - used, err := net.isAddress6Used(netConfig.Address6) + used, err := net.isAddress6Used(ctx, netConfig.Address6) if err != nil { return httperrors.NewInternalServerError("isAddress6Used fail %s", err) } @@ -1189,9 +1184,9 @@ func isValidNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, return nil } -func IsExitNetworkInfo(userCred mcclient.TokenCredential, netConfig *api.NetworkConfig) bool { +func IsExitNetworkInfo(ctx context.Context, userCred mcclient.TokenCredential, netConfig *api.NetworkConfig) bool { if len(netConfig.Network) > 0 { - netObj, _ := NetworkManager.FetchByIdOrName(userCred, netConfig.Network) + netObj, _ := NetworkManager.FetchByIdOrName(ctx, userCred, netConfig.Network) net := netObj.(*SNetwork) if net.IsExitNetwork() { return true @@ -1432,7 +1427,7 @@ func (net *SNetwork) reserveIpWithDurationAndStatus(ctx context.Context, userCre if !net.IsAddress6InRange(addr6) { return httperrors.NewInputParameterError("Address %s not in network", ipstr) } - used, err = net.isAddress6Used(addr6.String()) + used, err = net.isAddress6Used(ctx, addr6.String()) if err != nil { return httperrors.NewInternalServerError("isAddress6Used fail %s", err) } @@ -1446,7 +1441,7 @@ func (net *SNetwork) reserveIpWithDurationAndStatus(ctx context.Context, userCre if !net.IsAddressInRange(ipAddr) { return httperrors.NewInputParameterError("Address %s not in network", ipstr) } - used, err = net.isAddressUsed(ipstr) + used, err = net.isAddressUsed(ctx, ipstr) if err != nil { return httperrors.NewInternalServerError("isAddressUsed fail %s", err) } @@ -1617,7 +1612,7 @@ func (manager *SNetworkManager) newIfnameHint(hint string) (string, error) { } func (manager *SNetworkManager) validateEnsureWire(ctx context.Context, userCred mcclient.TokenCredential, input api.NetworkCreateInput) (w *SWire, v *SVpc, cr *SCloudregion, err error) { - wObj, err := WireManager.FetchByIdOrName(userCred, input.Wire) + wObj, err := WireManager.FetchByIdOrName(ctx, userCred, input.Wire) if err != nil { err = errors.Wrapf(err, "wire %s", input.Wire) return @@ -1634,13 +1629,13 @@ func (manager *SNetworkManager) validateEnsureWire(ctx context.Context, userCred } func (manager *SNetworkManager) validateEnsureZoneVpc(ctx context.Context, userCred mcclient.TokenCredential, input api.NetworkCreateInput) (*SWire, *SVpc, *SCloudregion, error) { - zObj, err := validators.ValidateModel(userCred, ZoneManager, &input.Zone) + zObj, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.Zone) if err != nil { return nil, nil, nil, err } z := zObj.(*SZone) - vObj, err := validators.ValidateModel(userCred, VpcManager, &input.Vpc) + vObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.Vpc) if err != nil { return nil, nil, nil, err } @@ -2070,7 +2065,7 @@ func (snet *SNetwork) validateUpdateData(ctx context.Context, userCred mcclient. return input, httperrors.NewInputParameterError("Network not in range of VPC cidrblock %s", vpc.CidrBlock) } - usedMap := snet.GetUsedAddresses() + usedMap := snet.GetUsedAddresses(ctx) for usedIpStr := range usedMap { if usedIp, err := netutils.NewIPV4Addr(usedIpStr); err == nil && !netRange.Contains(usedIp) { return input, httperrors.NewInputParameterError("Address %s been assigned out of new range", usedIpStr) @@ -2130,7 +2125,7 @@ func (snet *SNetwork) validateUpdateData(ctx context.Context, userCred mcclient. return input, httperrors.NewInputParameterError("Network not in range of VPC v6 cidrblock %s", vpc.CidrBlock6) } - usedMap := snet.GetUsedAddresses6() + usedMap := snet.GetUsedAddresses6(ctx) for usedIpStr := range usedMap { if usedIp, err := netutils.NewIPV6Addr(usedIpStr); err == nil && !netRange.Contains(usedIp) { return input, httperrors.NewInputParameterError("v6 address %s been assigned out of new range", usedIpStr) @@ -2519,7 +2514,7 @@ func (manager *SNetworkManager) ListItemFilter( return nil, errors.Wrap(err, "SWireResourceBaseManager.ListItemFilter") } if len(wireFilter.WireId) > 0 { - wireObj, err := WireManager.FetchByIdOrName(userCred, wireFilter.WireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, wireFilter.WireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), wireFilter.WireId) @@ -2604,7 +2599,7 @@ func (manager *SNetworkManager) ListItemFilter( storageStr := input.StorageId if len(storageStr) > 0 { - storage, err := StorageManager.FetchByIdOrName(userCred, storageStr) + storage, err := StorageManager.FetchByIdOrName(ctx, userCred, storageStr) if err != nil { return nil, errors.Wrapf(err, "unable to fetch storage %q", storageStr) } @@ -2666,7 +2661,7 @@ func (manager *SNetworkManager) ListItemFilter( } if len(input.SchedtagId) > 0 { - schedTag, err := SchedtagManager.FetchByIdOrName(nil, input.SchedtagId) + schedTag, err := SchedtagManager.FetchByIdOrName(ctx, nil, input.SchedtagId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(SchedtagManager.Keyword(), input.SchedtagId) @@ -2756,7 +2751,7 @@ func (manager *SNetworkManager) ListItemFilter( } if len(input.HostSchedtagId) > 0 { - schedTagObj, err := SchedtagManager.FetchByIdOrName(userCred, input.HostSchedtagId) + schedTagObj, err := SchedtagManager.FetchByIdOrName(ctx, userCred, input.HostSchedtagId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", SchedtagManager.Keyword(), input.HostSchedtagId) @@ -2938,7 +2933,7 @@ func (snet *SNetwork) PerformMerge(ctx context.Context, userCred mcclient.TokenC if len(input.Target) == 0 { return nil, httperrors.NewMissingParameterError("target") } - iNet, err := NetworkManager.FetchByIdOrName(userCred, input.Target) + iNet, err := NetworkManager.FetchByIdOrName(ctx, userCred, input.Target) if err == sql.ErrNoRows { err = httperrors.NewNotFoundError("Network %s not found", input.Target) logclient.AddActionLogWithContext(ctx, snet, logclient.ACT_MERGE, err.Error(), userCred, false) @@ -3116,7 +3111,7 @@ func (snet *SNetwork) PerformSplit(ctx context.Context, userCred mcclient.TokenC defer lockman.ReleaseRawObject(ctx, NetworkManager.Keyword(), "name") if len(input.Name) > 0 { - if err := db.NewNameValidator(NetworkManager, userCred, input.Name, nil); err != nil { + if err := db.NewNameValidator(ctx, NetworkManager, userCred, input.Name, nil); err != nil { return httperrors.NewInputParameterError("Duplicate name %s", input.Name) } } else { @@ -3194,7 +3189,7 @@ func (manager *SNetworkManager) PerformTryCreateNetwork(ctx context.Context, use if err != nil { return nil, errors.Wrap(err, "query.Unmarshal") } - q, err = managedResourceFilterByAccount(q, listQuery.ManagedResourceListInput, "wire_id", func() *sqlchemy.SQuery { + q, err = managedResourceFilterByAccount(ctx, q, listQuery.ManagedResourceListInput, "wire_id", func() *sqlchemy.SQuery { wires := WireManager.Query().SubQuery() vpcs := VpcManager.Query().SubQuery() subq := wires.Query(wires.Field("id")) @@ -3343,7 +3338,7 @@ func (network *SNetwork) PerformChangeOwner(ctx context.Context, userCred mcclie return ret, nil } -func (network *SNetwork) getUsedAddressQuery(userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope, addrOnly bool) *sqlchemy.SQuery { +func (network *SNetwork) getUsedAddressQuery(ctx context.Context, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope, addrOnly bool) *sqlchemy.SQuery { var ( args = &usedAddressQueryArgs{ network: network, @@ -3357,12 +3352,12 @@ func (network *SNetwork) getUsedAddressQuery(userCred mcclient.TokenCredential, ) for _, provider := range usedAddressQueryProviders { - queries = append(queries, provider.usedAddressQuery(args)) + queries = append(queries, provider.usedAddressQuery(ctx, args)) } return sqlchemy.Union(queries...).Query() } -func (network *SNetwork) getUsedAddressQuery6(userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope, addrOnly bool) *sqlchemy.SQuery { +func (network *SNetwork) getUsedAddressQuery6(ctx context.Context, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope, addrOnly bool) *sqlchemy.SQuery { var ( args = &usedAddressQueryArgs{ network: network, @@ -3376,7 +3371,7 @@ func (network *SNetwork) getUsedAddressQuery6(userCred mcclient.TokenCredential, ) for _, provider := range usedAddress6QueryProviders { - queries = append(queries, provider.usedAddressQuery(args)) + queries = append(queries, provider.usedAddressQuery(ctx, args)) } return sqlchemy.Union(queries...).Query() } @@ -3421,7 +3416,7 @@ func (network *SNetwork) GetDetailsAddresses( return output, errors.Wrapf(httperrors.ErrNotSufficientPrivilege, "require %s allow %s", scope, allowScope) } - output, err := network.fetchAddressDetails(userCred, userCred, scope) + output, err := network.fetchAddressDetails(ctx, userCred, userCred, scope) if err != nil { return output, errors.Wrap(err, "fetchAddressDetails") } @@ -3429,11 +3424,11 @@ func (network *SNetwork) GetDetailsAddresses( return output, nil } -func (network *SNetwork) fetchAddressDetails(userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) (api.GetNetworkAddressesOutput, error) { +func (network *SNetwork) fetchAddressDetails(ctx context.Context, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) (api.GetNetworkAddressesOutput, error) { output := api.GetNetworkAddressesOutput{} { netAddrs := make([]api.SNetworkUsedAddress, 0) - q := network.getUsedAddressQuery(userCred, owner, scope, false) + q := network.getUsedAddressQuery(ctx, userCred, owner, scope, false) err := q.All(&netAddrs) if err != nil { return output, httperrors.NewGeneralError(err) @@ -3445,7 +3440,7 @@ func (network *SNetwork) fetchAddressDetails(userCred mcclient.TokenCredential, } { netAddrs6 := make([]api.SNetworkUsedAddress, 0) - q := network.getUsedAddressQuery6(userCred, owner, scope, false) + q := network.getUsedAddressQuery6(ctx, userCred, owner, scope, false) err := q.All(&netAddrs6) if err != nil { return output, httperrors.NewGeneralError(err) @@ -3467,7 +3462,7 @@ func (network *SNetwork) GetDetailsAvailableAddresses( var availables []string var availables6 []string { - addrTable := network.GetUsedAddresses() + addrTable := network.GetUsedAddresses(ctx) recentUsedAddrTable := GuestnetworkManager.getRecentlyReleasedIPAddresses(network.Id, network.getAllocTimoutDuration()) addrRange := network.getIPRange() @@ -3481,7 +3476,7 @@ func (network *SNetwork) GetDetailsAvailableAddresses( } } if network.IsSupportIPv6() { - addrTable6 := network.GetUsedAddresses6() + addrTable6 := network.GetUsedAddresses6(ctx) recentUsedAddrTable6 := GuestnetworkManager.getRecentlyReleasedIPAddresses6(network.Id, network.getAllocTimoutDuration()) addrRange6 := network.getIPRange6() for addr6 := addrRange6.StartIp(); addr6.Le(addrRange6.EndIp()) && len(availables) < maxCount; addr6 = addr6.StepUp() { @@ -3652,7 +3647,7 @@ func (net *SNetwork) PerformSwitchWire( return nil, errors.Wrap(httperrors.ErrNotSupported, "default vpc only") } - wireObj, err := WireManager.FetchByIdOrName(userCred, input.WireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, input.WireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), input.WireId) @@ -3755,7 +3750,7 @@ func (net *SNetwork) PerformSyncAdditionalWires( wireIds := make([]string, 0) errs := make([]error, 0) for _, wireId := range input.WireIds { - wireObj, err := WireManager.FetchByIdOrName(userCred, wireId) + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, wireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { errs = append(errs, httperrors.NewResourceNotFoundError2(WireManager.Keyword(), wireId)) diff --git a/pkg/compute/models/networks_used_addresses_query.go b/pkg/compute/models/networks_used_addresses_query.go index 7bb17a77de..4e377beb3b 100644 --- a/pkg/compute/models/networks_used_addresses_query.go +++ b/pkg/compute/models/networks_used_addresses_query.go @@ -15,6 +15,7 @@ package models import ( + "context" "time" "yunion.io/x/pkg/util/rbacscope" @@ -34,7 +35,7 @@ type usedAddressQueryArgs struct { } type usedAddressQueryProvider interface { - usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery + usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery } var usedAddressQueryProviders = []usedAddressQueryProvider{ @@ -54,7 +55,7 @@ var usedAddress6QueryProviders = []usedAddressQueryProvider{ ReservedipManager, } -func (manager *SGuestnetworkManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SGuestnetworkManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = GuestnetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -69,7 +70,7 @@ func (manager *SGuestnetworkManager) usedAddressQuery(args *usedAddressQueryArgs var fields []sqlchemy.IQueryField = []sqlchemy.IQueryField{ baseq.Field(field), } - ownerq := GuestManager.FilterByOwner(GuestManager.Query(), GuestManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := GuestManager.FilterByOwner(ctx, GuestManager.Query(), GuestManager, args.userCred, args.owner, args.scope).SubQuery() fields = append(fields, baseq.Field("mac_addr"), sqlchemy.NewStringField(GuestManager.KeywordPlural()).Label("owner_type"), @@ -92,7 +93,7 @@ func (manager *SGuestnetworkManager) usedAddressQuery(args *usedAddressQueryArgs return retq } -func (manager *SHostnetworkManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SHostnetworkManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = HostnetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -102,7 +103,7 @@ func (manager *SHostnetworkManager) usedAddressQuery(args *usedAddressQueryArgs) baseq.Field("ip_addr"), ) } else { - ownerq := HostManager.FilterByOwner(HostManager.Query(), HostManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := HostManager.FilterByOwner(ctx, HostManager.Query(), HostManager, args.userCred, args.owner, args.scope).SubQuery() retq = baseq.Query( baseq.Field("ip_addr"), baseq.Field("mac_addr"), @@ -124,7 +125,7 @@ func (manager *SHostnetworkManager) usedAddressQuery(args *usedAddressQueryArgs) return retq } -func (manager *SReservedipManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SReservedipManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = ReservedipManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -159,7 +160,7 @@ func (manager *SReservedipManager) usedAddressQuery(args *usedAddressQueryArgs) return retq } -func (manager *SGroupnetworkManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SGroupnetworkManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = GroupnetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -179,7 +180,7 @@ func (manager *SGroupnetworkManager) usedAddressQuery(args *usedAddressQueryArgs } else { fields = append(fields, baseq.Field("ip_addr")) } - ownerq := GroupManager.FilterByOwner(GroupManager.Query(), GroupManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := GroupManager.FilterByOwner(ctx, GroupManager.Query(), GroupManager, args.userCred, args.owner, args.scope).SubQuery() fields = append(fields, sqlchemy.NewStringField("").Label("mac_addr"), sqlchemy.NewStringField(GroupManager.KeywordPlural()).Label("owner_type"), @@ -201,7 +202,7 @@ func (manager *SGroupnetworkManager) usedAddressQuery(args *usedAddressQueryArgs return retq } -func (manager *SLoadbalancernetworkManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SLoadbalancernetworkManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = LoadbalancernetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -211,7 +212,7 @@ func (manager *SLoadbalancernetworkManager) usedAddressQuery(args *usedAddressQu baseq.Field("ip_addr"), ) } else { - ownerq := LoadbalancerManager.FilterByOwner(LoadbalancerManager.Query(), LoadbalancerManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := LoadbalancerManager.FilterByOwner(ctx, LoadbalancerManager.Query(), LoadbalancerManager, args.userCred, args.owner, args.scope).SubQuery() retq = baseq.Query( baseq.Field("ip_addr"), sqlchemy.NewStringField("").Label("mac_addr"), @@ -233,7 +234,7 @@ func (manager *SLoadbalancernetworkManager) usedAddressQuery(args *usedAddressQu return retq } -func (manager *SElasticipManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SElasticipManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = ElasticipManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -243,7 +244,7 @@ func (manager *SElasticipManager) usedAddressQuery(args *usedAddressQueryArgs) * baseq.Field("ip_addr"), ) } else { - ownerq := ElasticipManager.FilterByOwner(ElasticipManager.Query().Equals("network_id", args.network.Id), ElasticipManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := ElasticipManager.FilterByOwner(ctx, ElasticipManager.Query().Equals("network_id", args.network.Id), ElasticipManager, args.userCred, args.owner, args.scope).SubQuery() retq = baseq.Query( baseq.Field("ip_addr"), sqlchemy.NewStringField("").Label("mac_addr"), @@ -265,7 +266,7 @@ func (manager *SElasticipManager) usedAddressQuery(args *usedAddressQueryArgs) * return retq } -func (manager *SNetworkinterfacenetworkManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SNetworkinterfacenetworkManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = NetworkinterfacenetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -275,7 +276,7 @@ func (manager *SNetworkinterfacenetworkManager) usedAddressQuery(args *usedAddre baseq.Field("ip_addr"), ) } else { - ownerq := NetworkInterfaceManager.FilterByOwner(NetworkInterfaceManager.Query(), NetworkInterfaceManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := NetworkInterfaceManager.FilterByOwner(ctx, NetworkInterfaceManager.Query(), NetworkInterfaceManager, args.userCred, args.owner, args.scope).SubQuery() retq = baseq.Query( baseq.Field("ip_addr"), ownerq.Field("mac").Label("mac_addr"), @@ -297,7 +298,7 @@ func (manager *SNetworkinterfacenetworkManager) usedAddressQuery(args *usedAddre return retq } -func (manager *SDBInstanceManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SDBInstanceManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( baseq = DBInstanceNetworkManager.Query().Equals("network_id", args.network.Id).SubQuery() retq *sqlchemy.SQuery @@ -307,7 +308,7 @@ func (manager *SDBInstanceManager) usedAddressQuery(args *usedAddressQueryArgs) baseq.Field("ip_addr"), ) } else { - ownerq := DBInstanceManager.FilterByOwner(DBInstanceManager.Query(), DBInstanceManager, args.userCred, args.owner, args.scope).SubQuery() + ownerq := DBInstanceManager.FilterByOwner(ctx, DBInstanceManager.Query(), DBInstanceManager, args.userCred, args.owner, args.scope).SubQuery() retq = baseq.Query( baseq.Field("ip_addr"), sqlchemy.NewStringField("").Label("mac_addr"), @@ -329,7 +330,7 @@ func (manager *SDBInstanceManager) usedAddressQuery(args *usedAddressQueryArgs) return retq } -func (manager *SNetworkAddressManager) usedAddressQuery(args *usedAddressQueryArgs) *sqlchemy.SQuery { +func (manager *SNetworkAddressManager) usedAddressQuery(ctx context.Context, args *usedAddressQueryArgs) *sqlchemy.SQuery { var ( retq *sqlchemy.SQuery ) @@ -353,7 +354,7 @@ func (manager *SNetworkAddressManager) usedAddressQuery(args *usedAddressQueryAr baseq.Field("parent_type").Label("associate_type"), baseq.Field("created_at"), ).Join(guestNetworks, sqlchemy.Equals(guestNetworks.Field("row_id"), baseq.Field("parent_id"))).Join(guests, sqlchemy.Equals(guests.Field("id"), guestNetworks.Field("guest_id"))) - retq = NetworkAddressManager.FilterByOwner(retq, NetworkAddressManager, args.userCred, args.owner, args.scope) + retq = NetworkAddressManager.FilterByOwner(ctx, retq, NetworkAddressManager, args.userCred, args.owner, args.scope) } return retq } diff --git a/pkg/compute/models/policy_definition_resource.go b/pkg/compute/models/policy_definition_resource.go index 7d1b93eadc..cab406c5cf 100644 --- a/pkg/compute/models/policy_definition_resource.go +++ b/pkg/compute/models/policy_definition_resource.go @@ -39,7 +39,7 @@ type SPolicyDefinitionResourceBaseManager struct { func (manager *SPolicyDefinitionResourceBaseManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query api.PolicyDefinitionResourceListInput) (*sqlchemy.SQuery, error) { if len(query.Policydefinition) > 0 { - definition, err := PolicyDefinitionManager.FetchByIdOrName(userCred, query.Policydefinition) + definition, err := PolicyDefinitionManager.FetchByIdOrName(ctx, userCred, query.Policydefinition) if err != nil { if errors.Cause(err) != sql.ErrNoRows { return nil, httperrors.NewGeneralError(err) diff --git a/pkg/compute/models/project_mapping_resource.go b/pkg/compute/models/project_mapping_resource.go index 8142379958..4250a95610 100644 --- a/pkg/compute/models/project_mapping_resource.go +++ b/pkg/compute/models/project_mapping_resource.go @@ -48,7 +48,7 @@ func (manager *SProjectMappingResourceBaseManager) ValidateCreateData( input api.SProjectMappingResourceInput, ) (api.SProjectMappingResourceInput, 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 input, err } @@ -103,7 +103,7 @@ func (manager *SProjectMappingResourceBaseManager) ListItemFilter( query api.ProjectMappingFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.ProjectMappingId) > 0 { - _, err := validators.ValidateModel(userCred, ProjectMappingManager, &query.ProjectMappingId) + _, err := validators.ValidateModel(ctx, userCred, ProjectMappingManager, &query.ProjectMappingId) if err != nil { return nil, err } diff --git a/pkg/compute/models/quotas.go b/pkg/compute/models/quotas.go index 6d1b299682..88b10e2906 100644 --- a/pkg/compute/models/quotas.go +++ b/pkg/compute/models/quotas.go @@ -189,7 +189,7 @@ func (self *SQuota) FetchUsage(ctx context.Context) error { diskSize := totalDiskSize(scope, ownerId, tristate.None, tristate.None, false, false, rangeObjs, providers, brands, keys.CloudEnv, hypervisors) - guest := usageTotalGuestResouceCount(scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv, nil, rbacutils.SPolicyResult{}) + guest := usageTotalGuestResouceCount(ctx, scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv, nil, rbacutils.SPolicyResult{}) self.Count = guest.TotalGuestCount self.Cpu = guest.TotalCpuCount diff --git a/pkg/compute/models/regionquota.go b/pkg/compute/models/regionquota.go index 3391c9c0f2..96f51167a7 100644 --- a/pkg/compute/models/regionquota.go +++ b/pkg/compute/models/regionquota.go @@ -185,7 +185,7 @@ func (self *SRegionQuota) FetchUsage(ctx context.Context) error { lbnic, _ := totalLBNicCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv) - eipUsage := ElasticipManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + eipUsage := ElasticipManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.Eip = eipUsage.Total() self.Port = net.InternalNicCount + net.InternalVirtualNicCount + lbnic @@ -193,24 +193,24 @@ func (self *SRegionQuota) FetchUsage(ctx context.Context) error { // self.Bw = net.InternalBandwidth // self.Ebw = net.ExternalBandwidth - snapshotCount, _ := TotalSnapshotCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + snapshotCount, _ := TotalSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.Snapshot = snapshotCount - instanceSnapshotCount, _ := TotalInstanceSnapshotCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + instanceSnapshotCount, _ := TotalInstanceSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.InstanceSnapshot = instanceSnapshotCount - bucketUsage := BucketManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + bucketUsage := BucketManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.Bucket = bucketUsage.Buckets self.ObjectGB = int(bucketUsage.Bytes / 1000 / 1000 / 1000) self.ObjectCnt = bucketUsage.Objects - rdsUsage, _ := DBInstanceManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + rdsUsage, _ := DBInstanceManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.Rds = rdsUsage.TotalRdsCount - self.Cache, _ = ElasticcacheManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) - mongodbUsage, _ := MongoDBManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + self.Cache, _ = ElasticcacheManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + mongodbUsage, _ := MongoDBManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) self.Mongodb = mongodbUsage.TotalMongodbCount - self.Loadbalancer, _ = LoadbalancerManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) + self.Loadbalancer, _ = LoadbalancerManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, regionKeys.CloudEnv, rbacutils.SPolicyResult{}) return nil } diff --git a/pkg/compute/models/reservedips.go b/pkg/compute/models/reservedips.go index 78afe65a17..b8e1dbe4cf 100644 --- a/pkg/compute/models/reservedips.go +++ b/pkg/compute/models/reservedips.go @@ -391,12 +391,12 @@ func (manager *SReservedipManager) ResourceScope() rbacscope.TRbacScope { return rbacscope.ScopeProject } -func (manager *SReservedipManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SReservedipManager) 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: netsQ := NetworkManager.Query("id") - netsQ = NetworkManager.FilterByOwner(netsQ, NetworkManager, userCred, owner, scope) + netsQ = NetworkManager.FilterByOwner(ctx, netsQ, NetworkManager, userCred, owner, scope) netsSQ := netsQ.SubQuery() q = q.Join(netsSQ, sqlchemy.Equals(q.Field("network_id"), netsSQ.Field("id"))) } diff --git a/pkg/compute/models/routetable_routesets.go b/pkg/compute/models/routetable_routesets.go index 4c5d81530f..0aa084f45f 100644 --- a/pkg/compute/models/routetable_routesets.go +++ b/pkg/compute/models/routetable_routesets.go @@ -116,7 +116,7 @@ func (manager *SRouteTableRouteSetManager) ValidateCreateData( if len(input.RouteTableId) == 0 { return input, httperrors.NewMissingParameterError("route_table_id") } - _routeTable, err := RouteTableManager.FetchByIdOrName(userCred, input.RouteTableId) + _routeTable, err := RouteTableManager.FetchByIdOrName(ctx, userCred, input.RouteTableId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("route_table", input.RouteTableId) @@ -132,7 +132,7 @@ func (manager *SRouteTableRouteSetManager) ValidateCreateData( return input, httperrors.NewNotSupportedError("not supported next hop type %s", input.NextHopType) } if input.NextHopType == api.NEXT_HOP_TYPE_VPCPEERING { - _vpcPeer, err := VpcPeeringConnectionManager.FetchByIdOrName(userCred, input.NextHopId) + _vpcPeer, err := VpcPeeringConnectionManager.FetchByIdOrName(ctx, userCred, input.NextHopId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("netx_hop_id", input.NextHopId) @@ -222,7 +222,7 @@ func (self *SRouteTableRouteSet) ValidateUpdateData( return input, httperrors.NewNotSupportedError("not supported next hop type %s", input.NextHopType) } if input.NextHopType == api.NEXT_HOP_TYPE_VPCPEERING { - _vpcPeer, err := VpcPeeringConnectionManager.FetchByIdOrName(userCred, input.NextHopId) + _vpcPeer, err := VpcPeeringConnectionManager.FetchByIdOrName(ctx, userCred, input.NextHopId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("netx_hop_id", input.NextHopId) diff --git a/pkg/compute/models/routetableresource.go b/pkg/compute/models/routetableresource.go index b6a34159ae..cbfc9c218d 100644 --- a/pkg/compute/models/routetableresource.go +++ b/pkg/compute/models/routetableresource.go @@ -41,7 +41,7 @@ func (manager *SRouteTableResourceBaseManager) ListItemFilter( query api.RouteTableFilterList, ) (*sqlchemy.SQuery, error) { if len(query.RouteTableId) > 0 { - routeTable, err := RouteTableManager.FetchByIdOrName(userCred, query.RouteTableId) + routeTable, err := RouteTableManager.FetchByIdOrName(ctx, userCred, query.RouteTableId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("route_table", query.RouteTableId) diff --git a/pkg/compute/models/routetables.go b/pkg/compute/models/routetables.go index 81c212d0c0..0fec4a9613 100644 --- a/pkg/compute/models/routetables.go +++ b/pkg/compute/models/routetables.go @@ -131,13 +131,13 @@ func (man *SRouteTableManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field return q, httperrors.ErrNotFound } -func (man *SRouteTableManager) validateRoutes(data *jsonutils.JSONDict, update bool) (*jsonutils.JSONDict, error) { +func (man *SRouteTableManager) validateRoutes(ctx context.Context, data *jsonutils.JSONDict, update bool) (*jsonutils.JSONDict, error) { routes := api.SRoutes{} routesV := validators.NewStructValidator("routes", &routes) if update { routesV.Optional(true) } - err := routesV.Validate(data) + err := routesV.Validate(ctx, data) if err != nil { return nil, err } @@ -151,11 +151,11 @@ func (man *SRouteTableManager) ValidateCreateData( query jsonutils.JSONObject, input api.RouteTableCreateInput, ) (api.RouteTableCreateInput, error) { - _, err := man.validateRoutes(jsonutils.Marshal(input).(*jsonutils.JSONDict), false) + _, err := man.validateRoutes(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict), false) if err != nil { return input, errors.Wrap(err, "validateRoutes") } - _, err = validators.ValidateModel(userCred, VpcManager, &input.VpcId) + _, err = validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return input, err } @@ -213,7 +213,7 @@ func (rt *SRouteTable) ValidateUpdateData( query jsonutils.JSONObject, input api.RouteTableUpdateInput, ) (api.RouteTableUpdateInput, error) { - _, err := RouteTableManager.validateRoutes(jsonutils.Marshal(input).(*jsonutils.JSONDict), true) + _, err := RouteTableManager.validateRoutes(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict), true) if err != nil { return input, errors.Wrap(err, "RouteTableManager.validateRoutes") } @@ -236,7 +236,7 @@ func (rt *SRouteTable) PerformAddRoutes(ctx context.Context, userCred mcclient.T adds := api.SRoutes{} addsV := validators.NewStructValidator("routes", &adds) addsV.Optional(true) - err := addsV.Validate(data) + err := addsV.Validate(ctx, data) if err != nil { return nil, err } diff --git a/pkg/compute/models/scaling_activity.go b/pkg/compute/models/scaling_activity.go index 224ef4633a..9b798f7deb 100644 --- a/pkg/compute/models/scaling_activity.go +++ b/pkg/compute/models/scaling_activity.go @@ -190,7 +190,7 @@ func (sam *SScalingActivityManager) ResourceScope() rbacscope.TRbacScope { return rbacscope.ScopeProject } -func (sam *SScalingActivityManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (sam *SScalingActivityManager) 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: diff --git a/pkg/compute/models/scaling_group.go b/pkg/compute/models/scaling_group.go index 22843c996c..ad53f568b4 100644 --- a/pkg/compute/models/scaling_group.go +++ b/pkg/compute/models/scaling_group.go @@ -128,7 +128,7 @@ func (sgm *SScalingGroupManager) ValidateCreateData(ctx context.Context, userCre if len(input.CloudregionId) != 0 { idOrName = input.CloudregionId } - cloudregion, err := CloudregionManager.FetchByIdOrName(userCred, idOrName) + cloudregion, err := CloudregionManager.FetchByIdOrName(ctx, userCred, idOrName) if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewInputParameterError("no such cloud region %s", idOrName) } @@ -138,7 +138,7 @@ func (sgm *SScalingGroupManager) ValidateCreateData(ctx context.Context, userCre input.CloudregionId = cloudregion.GetId() // check vpc - _, err = validators.ValidateModel(userCred, VpcManager, &input.VpcId) + _, err = validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return input, err } @@ -179,7 +179,7 @@ func (sgm *SScalingGroupManager) ValidateCreateData(ctx context.Context, userCre if len(input.GuestTemplateId) != 0 { idOrName = input.GuestTemplateId } - guestTemplate, err := GuestTemplateManager.FetchByIdOrName(userCred, idOrName) + guestTemplate, err := GuestTemplateManager.FetchByIdOrName(ctx, userCred, idOrName) if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewInputParameterError("no such guest template %s", idOrName) } @@ -212,7 +212,7 @@ func (sgm *SScalingGroupManager) ValidateCreateData(ctx context.Context, userCre // check lb if len(input.LbBackendGroup) != 0 { idOrName = input.LbBackendGroup - lb, err := LoadbalancerBackendGroupManager.FetchByIdOrName(userCred, idOrName) + lb, err := LoadbalancerBackendGroupManager.FetchByIdOrName(ctx, userCred, idOrName) if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewInputParameterError("no such loadbalancer backend group '%s'", idOrName) } @@ -675,7 +675,7 @@ func (sg *SScalingGroup) PerformDisable(ctx context.Context, userCred mcclient.T func (s *SGuest) PerformDetachScalingGroup(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.SGPerformDetachScalingGroupInput) (jsonutils.JSONObject, error) { // check ScalingGroup - model, err := ScalingGroupManager.FetchByIdOrName(userCred, input.ScalingGroup) + model, err := ScalingGroupManager.FetchByIdOrName(ctx, userCred, input.ScalingGroup) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewInputParameterError("no such ScalingGroup '%s'", input.ScalingGroup) diff --git a/pkg/compute/models/scaling_group_resource.go b/pkg/compute/models/scaling_group_resource.go index 4b235e69c8..9f5271f395 100644 --- a/pkg/compute/models/scaling_group_resource.go +++ b/pkg/compute/models/scaling_group_resource.go @@ -88,7 +88,7 @@ func (manager *SScalingGroupResourceBaseManager) ListItemFilter( query api.ScalingGroupFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.ScalingGroup) > 0 { - scalingGroupObj, err := ScalingGroupManager.FetchByIdOrName(userCred, query.ScalingGroup) + scalingGroupObj, err := ScalingGroupManager.FetchByIdOrName(ctx, userCred, query.ScalingGroup) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ScalingGroupManager.Keyword(), query.ScalingGroup) diff --git a/pkg/compute/models/scaling_policy.go b/pkg/compute/models/scaling_policy.go index edd433665e..8589341f16 100644 --- a/pkg/compute/models/scaling_policy.go +++ b/pkg/compute/models/scaling_policy.go @@ -210,7 +210,7 @@ func (spm *SScalingPolicyManager) ValidateCreateData(ctx context.Context, userCr if len(input.ScalingGroupId) != 0 { idOrName = input.ScalingGroupId } - model, err := ScalingGroupManager.FetchByIdOrName(userCred, idOrName) + model, err := ScalingGroupManager.FetchByIdOrName(ctx, userCred, idOrName) if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewInputParameterError("no such scaling group %s", idOrName) } diff --git a/pkg/compute/models/schedpolicies.go b/pkg/compute/models/schedpolicies.go index ea6fbaf1d7..23d6a4a27f 100644 --- a/pkg/compute/models/schedpolicies.go +++ b/pkg/compute/models/schedpolicies.go @@ -64,8 +64,8 @@ type SSchedpolicy struct { Enabled tristate.TriState `default:"true" create:"optional" list:"user" update:"user"` } -func validateSchedpolicyInputData(data *jsonutils.JSONDict, create bool) error { - err := validateDynamicSchedtagInputData(data, create) +func validateSchedpolicyInputData(ctx context.Context, data *jsonutils.JSONDict, create bool) error { + err := validateDynamicSchedtagInputData(ctx, data, create) if err != nil { return err } @@ -83,7 +83,7 @@ func validateSchedpolicyInputData(data *jsonutils.JSONDict, create bool) error { } func (manager *SSchedpolicyManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { - err := validateSchedpolicyInputData(data, true) + err := validateSchedpolicyInputData(ctx, data, true) if err != nil { return nil, err } @@ -102,7 +102,7 @@ func (manager *SSchedpolicyManager) ValidateCreateData(ctx context.Context, user } func (self *SSchedpolicy) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { - err := validateSchedpolicyInputData(data, false) + err := validateSchedpolicyInputData(ctx, data, false) if err != nil { return nil, err } @@ -186,7 +186,7 @@ func (self *SSchedpolicy) PerformEvaluate(ctx context.Context, userCred mcclient if resMan == nil { return nil, httperrors.NewNotAcceptableError("ResourceType %q not support", resType) } - obj, err := FetchDynamicResourceObject(resMan, userCred, objectId) + obj, err := FetchDynamicResourceObject(ctx, resMan, userCred, objectId) if err != nil { return nil, err } diff --git a/pkg/compute/models/schedtagresource.go b/pkg/compute/models/schedtagresource.go index 97e647c0a7..4afc6a9280 100644 --- a/pkg/compute/models/schedtagresource.go +++ b/pkg/compute/models/schedtagresource.go @@ -38,8 +38,8 @@ type SSchedtagResourceBase struct { type SSchedtagResourceBaseManager struct{} -func ValidateSchedtagResourceInput(userCred mcclient.TokenCredential, query api.SchedtagResourceInput) (*SSchedtag, api.SchedtagResourceInput, error) { - tagObj, err := SchedtagManager.FetchByIdOrName(userCred, query.SchedtagId) +func ValidateSchedtagResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.SchedtagResourceInput) (*SSchedtag, api.SchedtagResourceInput, error) { + tagObj, err := SchedtagManager.FetchByIdOrName(ctx, userCred, query.SchedtagId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", SchedtagManager.Keyword(), query.SchedtagId) @@ -102,7 +102,7 @@ func (manager *SSchedtagResourceBaseManager) ListItemFilter( query api.SchedtagFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.SchedtagId) > 0 { - tagObj, _, err := ValidateSchedtagResourceInput(userCred, query.SchedtagResourceInput) + tagObj, _, err := ValidateSchedtagResourceInput(ctx, userCred, query.SchedtagResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateSchedtagResourceInput") } diff --git a/pkg/compute/models/schedtags.go b/pkg/compute/models/schedtags.go index d23ecc1bb6..e8b74b3331 100644 --- a/pkg/compute/models/schedtags.go +++ b/pkg/compute/models/schedtags.go @@ -146,7 +146,7 @@ type SSchedtag struct { ResourceType string `width:"16" charset:"ascii" nullable:"true" list:"user" create:"required"` // Column(VARCHAR(16, charset='ascii'), nullable=True, default='') } -func (m *SSchedtagManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (m *SSchedtagManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId == nil { return q } @@ -256,10 +256,10 @@ func (manager *SSchedtagManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fie return q, httperrors.ErrNotFound } -func (manager *SSchedtagManager) ValidateSchedtags(userCred mcclient.TokenCredential, schedtags []*api.SchedtagConfig) ([]*api.SchedtagConfig, error) { +func (manager *SSchedtagManager) ValidateSchedtags(ctx context.Context, userCred mcclient.TokenCredential, schedtags []*api.SchedtagConfig) ([]*api.SchedtagConfig, error) { ret := make([]*api.SchedtagConfig, len(schedtags)) for idx, tag := range schedtags { - schedtagObj, err := manager.FetchByIdOrName(userCred, tag.Id) + schedtagObj, err := manager.FetchByIdOrName(ctx, userCred, tag.Id) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("Invalid schedtag %s", tag.Id) @@ -564,7 +564,7 @@ func PerformSetResourceSchedtag(obj IModelWithSchedtag, ctx context.Context, use setTagsId := []string{} for idx := 0; idx < len(schedtags); idx++ { schedtagIdent, _ := schedtags[idx].GetString() - tag, err := SchedtagManager.FetchByIdOrName(userCred, schedtagIdent) + tag, err := SchedtagManager.FetchByIdOrName(ctx, userCred, schedtagIdent) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("Schedtag %s not found", schedtagIdent) @@ -668,7 +668,7 @@ func (s *SSchedtag) PerformSetResource(ctx context.Context, userCred mcclient.To // get need set resource ids for i := 0; i < len(input.ResourceIds); i++ { resId := input.ResourceIds[i] - res, err := resMan.FetchByIdOrName(userCred, resId) + res, err := resMan.FetchByIdOrName(ctx, userCred, resId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("Resource %s %s not found", s.ResourceType, resId) diff --git a/pkg/compute/models/secgroupresource.go b/pkg/compute/models/secgroupresource.go index ed53c62e19..6ede653e2d 100644 --- a/pkg/compute/models/secgroupresource.go +++ b/pkg/compute/models/secgroupresource.go @@ -38,8 +38,8 @@ type SSecurityGroupResourceBase struct { type SSecurityGroupResourceBaseManager struct{} -func ValidateSecurityGroupResourceInput(userCred mcclient.TokenCredential, query api.SecgroupResourceInput) (*SSecurityGroup, api.SecgroupResourceInput, error) { - secgrpObj, err := SecurityGroupManager.FetchByIdOrName(userCred, query.SecgroupId) +func ValidateSecurityGroupResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.SecgroupResourceInput) (*SSecurityGroup, api.SecgroupResourceInput, error) { + secgrpObj, err := SecurityGroupManager.FetchByIdOrName(ctx, userCred, query.SecgroupId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", SecurityGroupManager.Keyword(), query.SecgroupId) @@ -98,7 +98,7 @@ func (manager *SSecurityGroupResourceBaseManager) ListItemFilter( query api.SecgroupFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.SecgroupId) > 0 { - secgrpObj, _, err := ValidateSecurityGroupResourceInput(userCred, query.SecgroupResourceInput) + secgrpObj, _, err := ValidateSecurityGroupResourceInput(ctx, userCred, query.SecgroupResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateSecurityGroupResourceInput") } diff --git a/pkg/compute/models/secgrouprules.go b/pkg/compute/models/secgrouprules.go index 315131e012..4ff29a33e0 100644 --- a/pkg/compute/models/secgrouprules.go +++ b/pkg/compute/models/secgrouprules.go @@ -112,9 +112,9 @@ func (manager *SSecurityGroupRuleManager) FetchOwnerId(ctx context.Context, data return db.FetchProjectInfo(ctx, data) } -func (manager *SSecurityGroupRuleManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SSecurityGroupRuleManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { sq := SecurityGroupManager.Query("id") - sq = db.SharableManagerFilterByOwner(SecurityGroupManager, sq, userCred, ownerId, scope) + sq = db.SharableManagerFilterByOwner(ctx, SecurityGroupManager, sq, userCred, ownerId, scope) return q.In("secgroup_id", sq.SubQuery()) } @@ -266,7 +266,7 @@ func (self *SSecurityGroupRule) BeforeInsert() { } func (manager *SSecurityGroupRuleManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input *api.SSecgroupRuleCreateInput) (*api.SSecgroupRuleCreateInput, error) { - _secgroup, err := validators.ValidateModel(userCred, SecurityGroupManager, &input.SecgroupId) + _secgroup, err := validators.ValidateModel(ctx, userCred, SecurityGroupManager, &input.SecgroupId) if err != nil { return input, err } diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index c10343cd51..a1d1af5993 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -125,7 +125,7 @@ func (manager *SSecurityGroupManager) ListItemFilter( return nil, errors.Wrap(err, "SCloudregionResourceBaseManager.ListItemFilter") } if len(input.VpcId) > 0 { - vpcObj, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) + vpcObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return nil, err } @@ -143,7 +143,7 @@ func (manager *SSecurityGroupManager) ListItemFilter( serverStr := input.ServerId if len(serverStr) > 0 { - guest, _, err := ValidateGuestResourceInput(userCred, input.ServerResourceInput) + guest, _, err := ValidateGuestResourceInput(ctx, userCred, input.ServerResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateGuestResourceInput") } @@ -166,7 +166,7 @@ func (manager *SSecurityGroupManager) ListItemFilter( } if len(input.DBInstanceId) > 0 { - _, err = validators.ValidateModel(userCred, DBInstanceManager, &input.DBInstanceId) + _, err = validators.ValidateModel(ctx, userCred, DBInstanceManager, &input.DBInstanceId) if err != nil { return nil, err } @@ -175,7 +175,7 @@ func (manager *SSecurityGroupManager) ListItemFilter( } if len(input.ElasticcacheId) > 0 { - _, err = validators.ValidateModel(userCred, ElasticcacheManager, &input.ElasticcacheId) + _, err = validators.ValidateModel(ctx, userCred, ElasticcacheManager, &input.ElasticcacheId) if err != nil { return nil, err } @@ -380,7 +380,7 @@ func (manager *SSecurityGroupManager) FetchCustomizeColumns( return rows } - q = GuestManager.FilterByOwner(q, GuestManager, userCred, ownerId, queryScope) + q = GuestManager.FilterByOwner(ctx, q, GuestManager, userCred, ownerId, queryScope) err = db.FetchModelObjects(GuestManager, q, &guests) if err != nil { log.Errorf("db.FetchModelObjects error: %v", err) @@ -411,7 +411,7 @@ func (manager *SSecurityGroupManager) FetchCustomizeColumns( } sq := GuestManager.Query("id").IsFalse("pending_deleted") - sq = GuestManager.FilterByOwner(sq, GuestManager, userCred, ownerId, queryScope) + sq = GuestManager.FilterByOwner(ctx, sq, GuestManager, userCred, ownerId, queryScope) guestSecgroups := []SGuestsecgroup{} q = GuestsecgroupManager.Query().In("secgroup_id", secgroupIds).In("guest_id", sq.SubQuery()) @@ -462,7 +462,7 @@ func (manager *SSecurityGroupManager) ValidateCreateData( input.VpcId = api.DEFAULT_VPC_ID } - vpcObj, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) + vpcObj, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return nil, err } diff --git a/pkg/compute/models/server_skus.go b/pkg/compute/models/server_skus.go index c07c1ed257..59aed57fae 100644 --- a/pkg/compute/models/server_skus.go +++ b/pkg/compute/models/server_skus.go @@ -298,7 +298,7 @@ func (manager *SServerSkuManager) FetchCustomizeColumns( func (self *SServerSkuManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.ServerSkuCreateInput) (api.ServerSkuCreateInput, error) { var region *SCloudregion if len(input.CloudregionId) > 0 { - _region, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + _region, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return input, err } @@ -306,7 +306,7 @@ func (self *SServerSkuManager) ValidateCreateData(ctx context.Context, userCred } if len(input.ZoneId) > 0 { - _zone, err := validators.ValidateModel(userCred, ZoneManager, &input.ZoneId) + _zone, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.ZoneId) if err != nil { return input, err } @@ -812,7 +812,7 @@ func (manager *SServerSkuManager) ListItemFilter( zoneStr := query.ZoneId if len(zoneStr) > 0 { - _zone, err := ZoneManager.FetchByIdOrName(userCred, zoneStr) + _zone, err := ZoneManager.FetchByIdOrName(ctx, userCred, zoneStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("zone", zoneStr) @@ -832,7 +832,7 @@ func (manager *SServerSkuManager) ListItemFilter( } } - q, err = managedResourceFilterByRegion(q, query.RegionalFilterListInput, "", nil) + q, err = managedResourceFilterByRegion(ctx, q, query.RegionalFilterListInput, "", nil) if err != nil { return nil, errors.Wrap(err, "managedResourceFilterByRegion") } diff --git a/pkg/compute/models/service_catalog.go b/pkg/compute/models/service_catalog.go index 0d76969a35..2f66af5f18 100644 --- a/pkg/compute/models/service_catalog.go +++ b/pkg/compute/models/service_catalog.go @@ -64,7 +64,7 @@ func (scm *SServiceCatalog) ValidateUpdateData(ctx context.Context, userCred mcc data := jsonutils.NewDict() if len(input.GuestTemplate) > 0 { // check - model, err := GuestTemplateManager.FetchByIdOrName(userCred, input.GuestTemplate) + model, err := GuestTemplateManager.FetchByIdOrName(ctx, userCred, input.GuestTemplate) if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("no such guest template") } @@ -97,7 +97,7 @@ func (scm *SServiceCatalogManager) ValidateCreateData(ctx context.Context, userC return nil, httperrors.NewMissingParameterError("guest_template") } - model, err := GuestTemplateManager.FetchByIdOrName(userCred, input.GuestTemplate) + model, err := GuestTemplateManager.FetchByIdOrName(ctx, userCred, input.GuestTemplate) if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("no such guest template") } @@ -176,7 +176,7 @@ func (manager *SServiceCatalogManager) ListItemFilter( return nil, errors.Wrap(err, "SSharableVirtualResourceBaseManager.ListItemFilter") } if len(input.GuestTemplateId) > 0 { - gtObj, err := GuestTemplateManager.FetchByIdOrName(userCred, input.GuestTemplateId) + gtObj, err := GuestTemplateManager.FetchByIdOrName(ctx, userCred, input.GuestTemplateId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GuestTemplateManager.Keyword(), input.GuestTemplateId) diff --git a/pkg/compute/models/snapshotpolicy.go b/pkg/compute/models/snapshotpolicy.go index 7483bcd839..6a10e2cdf8 100644 --- a/pkg/compute/models/snapshotpolicy.go +++ b/pkg/compute/models/snapshotpolicy.go @@ -97,7 +97,7 @@ func (manager *SSnapshotPolicyManager) ValidateCreateData( if len(input.CloudregionId) == 0 { input.CloudregionId = api.DEFAULT_REGION_ID } - regionObj, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + regionObj, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return nil, err } @@ -420,7 +420,7 @@ func (sp *SSnapshotPolicy) PerformBindDisks( } diskIds := []string{} for i := range input.Disks { - diskObj, err := validators.ValidateModel(userCred, DiskManager, &input.Disks[i]) + diskObj, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.Disks[i]) if err != nil { return nil, err } @@ -469,7 +469,7 @@ func (sp *SSnapshotPolicy) PerformUnbindDisks( } diskIds := []string{} for i := range input.Disks { - diskObj, err := validators.ValidateModel(userCred, DiskManager, &input.Disks[i]) + diskObj, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.Disks[i]) if err != nil { return nil, err } diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index 19aead2b87..307caa2f3d 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -195,7 +195,7 @@ func (manager *SSnapshotManager) ListItemFilter( q = q.In("os_type", query.OsType) } if len(query.ServerId) > 0 { - iG, err := GuestManager.FetchByIdOrName(userCred, query.ServerId) + iG, err := GuestManager.FetchByIdOrName(ctx, userCred, query.ServerId) if err != nil && err == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("guest %s not found", query.ServerId) } else if err != nil { @@ -430,7 +430,7 @@ func (manager *SSnapshotManager) ValidateCreateData( if len(input.DiskId) == 0 { return input, httperrors.NewMissingParameterError("disk_id") } - _disk, err := validators.ValidateModel(userCred, DiskManager, &input.DiskId) + _disk, err := validators.ValidateModel(ctx, userCred, DiskManager, &input.DiskId) if err != nil { return input, err } @@ -939,7 +939,7 @@ func (self *SSnapshotManager) DeleteDiskSnapshots(ctx context.Context, userCred return nil } -func TotalSnapshotCount(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (int, error) { +func TotalSnapshotCount(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (int, error) { q := SnapshotManager.Query() switch scope { @@ -950,7 +950,7 @@ func TotalSnapshotCount(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityPr q = q.Equals("tenant_id", ownerId.GetProjectId()) } - q = db.ObjectIdQueryWithPolicyResult(q, SnapshotManager, policyResult) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, SnapshotManager, policyResult) q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil) q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv) diff --git a/pkg/compute/models/storagecachedimages.go b/pkg/compute/models/storagecachedimages.go index e40edd5a07..35994f2d2d 100644 --- a/pkg/compute/models/storagecachedimages.go +++ b/pkg/compute/models/storagecachedimages.go @@ -484,7 +484,7 @@ func (manager *SStoragecachedimageManager) ListItemFilter( } if len(query.CachedimageId) > 0 { - cachedImageObj, err := CachedimageManager.FetchByIdOrName(userCred, query.CachedimageId) + cachedImageObj, err := CachedimageManager.FetchByIdOrName(ctx, userCred, query.CachedimageId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(CachedimageManager.Keyword(), query.CachedimageId) diff --git a/pkg/compute/models/storagecacheresource.go b/pkg/compute/models/storagecacheresource.go index 249256c4b9..b3f22a550b 100644 --- a/pkg/compute/models/storagecacheresource.go +++ b/pkg/compute/models/storagecacheresource.go @@ -40,8 +40,8 @@ type SStoragecacheResourceBaseManager struct { SManagedResourceBaseManager } -func ValidateStoragecacheResourceInput(userCred mcclient.TokenCredential, query api.StoragecacheResourceInput) (*SStoragecache, api.StoragecacheResourceInput, error) { - scObj, err := StoragecacheManager.FetchByIdOrName(userCred, query.StoragecacheId) +func ValidateStoragecacheResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.StoragecacheResourceInput) (*SStoragecache, api.StoragecacheResourceInput, error) { + scObj, err := StoragecacheManager.FetchByIdOrName(ctx, userCred, query.StoragecacheId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", StorageManager.Keyword(), query.StoragecacheId) @@ -114,7 +114,7 @@ func (manager *SStoragecacheResourceBaseManager) ListItemFilter( query api.StoragecacheFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.StoragecacheId) > 0 { - scObj, _, err := ValidateStoragecacheResourceInput(userCred, query.StoragecacheResourceInput) + scObj, _, err := ValidateStoragecacheResourceInput(ctx, userCred, query.StoragecacheResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateStoragecacheResourceInput") } diff --git a/pkg/compute/models/storagecaches.go b/pkg/compute/models/storagecaches.go index f2577b9852..110843fcac 100644 --- a/pkg/compute/models/storagecaches.go +++ b/pkg/compute/models/storagecaches.go @@ -549,7 +549,7 @@ func (self *SStoragecache) PerformUncacheImage(ctx context.Context, userCred mcc var imageId string - imgObj, err := CachedimageManager.FetchByIdOrName(nil, imageStr) + imgObj, err := CachedimageManager.FetchByIdOrName(ctx, nil, imageStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(CachedimageManager.Keyword(), imageStr) diff --git a/pkg/compute/models/storageresource.go b/pkg/compute/models/storageresource.go index 25a82e9afb..5354243234 100644 --- a/pkg/compute/models/storageresource.go +++ b/pkg/compute/models/storageresource.go @@ -40,8 +40,8 @@ type SStorageResourceBaseManager struct { SManagedResourceBaseManager } -func ValidateStorageResourceInput(userCred mcclient.TokenCredential, query api.StorageResourceInput) (*SStorage, api.StorageResourceInput, error) { - storageObj, err := StorageManager.FetchByIdOrName(userCred, query.StorageId) +func ValidateStorageResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.StorageResourceInput) (*SStorage, api.StorageResourceInput, error) { + storageObj, err := StorageManager.FetchByIdOrName(ctx, userCred, query.StorageId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", StorageManager.Keyword(), query.StorageId) @@ -122,7 +122,7 @@ func (manager *SStorageResourceBaseManager) ListItemFilter( query api.StorageFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.StorageId) > 0 { - storageObj, _, err := ValidateStorageResourceInput(userCred, query.StorageResourceInput) + storageObj, _, err := ValidateStorageResourceInput(ctx, userCred, query.StorageResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateStorageResourceInput") } diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index b2c01fcb41..32a45c5add 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -129,7 +129,7 @@ func (self *SStorage) ValidateUpdateData(ctx context.Context, userCred mcclient. } } if input.MasterHost != "" { - host, err := HostManager.FetchByIdOrName(userCred, input.MasterHost) + host, err := HostManager.FetchByIdOrName(ctx, userCred, input.MasterHost) if err != nil { return input, httperrors.NewInputParameterError("get host %s failed", input.MasterHost) } @@ -265,7 +265,7 @@ func (manager *SStorageManager) ValidateCreateData( if len(input.ZoneId) == 0 { return input, httperrors.NewMissingParameterError("zone_id") } - _, err := validators.ValidateModel(userCred, ZoneManager, &input.ZoneId) + _, err := validators.ValidateModel(ctx, userCred, ZoneManager, &input.ZoneId) if err != nil { return input, err } @@ -1119,7 +1119,7 @@ type StorageCapacityStat struct { TotalSizeVirtual float64 } -func filterDisksByScope(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { +func filterDisksByScope(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { q := DiskManager.Query() switch scope { case rbacscope.ScopeSystem: @@ -1136,11 +1136,11 @@ func filterDisksByScope(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityPr if !includeSystem { q = q.IsFalse("is_system") } - return db.ObjectIdQueryWithPolicyResult(q, DiskManager, policyResult).SubQuery() + return db.ObjectIdQueryWithPolicyResult(ctx, q, DiskManager, policyResult).SubQuery() } -func (manager *SStorageManager) disksReadyQ(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { - disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem, policyResult) +func (manager *SStorageManager) disksReadyQ(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { + disks := filterDisksByScope(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) q := disks.Query( disks.Field("storage_id"), sqlchemy.SUM("used_capacity", disks.Field("disk_size")), @@ -1150,7 +1150,7 @@ func (manager *SStorageManager) disksReadyQ(scope rbacscope.TRbacScope, ownerId return q.SubQuery() } -func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { +func (manager *SStorageManager) diskIsAttachedQ(ctx context.Context, isAttached bool, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { sumKey := "attached_used_capacity" countKey := "attached_count" cond := sqlchemy.In @@ -1160,7 +1160,7 @@ func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacscope cond = sqlchemy.NotIn } sq := GuestdiskManager.Query("disk_id").SubQuery() - disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem, policyResult) + disks := filterDisksByScope(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) disks = disks.Query().Filter(cond(disks.Field("id"), sq)).SubQuery() q := disks.Query( disks.Field("storage_id"), @@ -1170,16 +1170,16 @@ func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacscope return q.SubQuery() } -func (manager *SStorageManager) diskAttachedQ(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { - return manager.diskIsAttachedQ(true, scope, ownerId, pendingDeleted, includeSystem, policyResult) +func (manager *SStorageManager) diskAttachedQ(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { + return manager.diskIsAttachedQ(ctx, true, scope, ownerId, pendingDeleted, includeSystem, policyResult) } -func (manager *SStorageManager) diskDetachedQ(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { - return manager.diskIsAttachedQ(false, scope, ownerId, pendingDeleted, includeSystem, policyResult) +func (manager *SStorageManager) diskDetachedQ(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { + return manager.diskIsAttachedQ(ctx, false, scope, ownerId, pendingDeleted, includeSystem, policyResult) } -func (manager *SStorageManager) disksFailedQ(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { - disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem, policyResult) +func (manager *SStorageManager) disksFailedQ(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool, policyResult rbacutils.SPolicyResult) *sqlchemy.SSubQuery { + disks := filterDisksByScope(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) q := disks.Query( disks.Field("storage_id"), sqlchemy.SUM("failed_capacity", disks.Field("disk_size")), @@ -1190,6 +1190,7 @@ func (manager *SStorageManager) disksFailedQ(scope rbacscope.TRbacScope, ownerId } func (manager *SStorageManager) totalCapacityQ( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, @@ -1198,10 +1199,10 @@ func (manager *SStorageManager) totalCapacityQ( storageOwnership bool, policyResult rbacutils.SPolicyResult, ) *sqlchemy.SQuery { - stmt := manager.disksReadyQ(scope, ownerId, pendingDeleted, includeSystem, policyResult) - stmt2 := manager.disksFailedQ(scope, ownerId, pendingDeleted, includeSystem, policyResult) - attachedDisks := manager.diskAttachedQ(scope, ownerId, pendingDeleted, includeSystem, policyResult) - detachedDisks := manager.diskDetachedQ(scope, ownerId, pendingDeleted, includeSystem, policyResult) + stmt := manager.disksReadyQ(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) + stmt2 := manager.disksFailedQ(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) + attachedDisks := manager.diskAttachedQ(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) + detachedDisks := manager.diskDetachedQ(ctx, scope, ownerId, pendingDeleted, includeSystem, policyResult) sq := manager.Query() @@ -1229,7 +1230,7 @@ func (manager *SStorageManager) totalCapacityQ( } } - sq = db.ObjectIdQueryWithPolicyResult(sq, manager, policyResult) + sq = db.ObjectIdQueryWithPolicyResult(ctx, sq, manager, policyResult) storages := sq.SubQuery() @@ -1380,6 +1381,7 @@ func (manager *SStorageManager) calculateCapacity(q *sqlchemy.SQuery) StoragesCa } func (manager *SStorageManager) TotalCapacity( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, @@ -1392,6 +1394,7 @@ func (manager *SStorageManager) TotalCapacity( ) StoragesCapacityStat { res1 := manager.calculateCapacity( manager.totalCapacityQ( + ctx, rangeObjs, hostTypes, resourceTypes, @@ -1654,7 +1657,7 @@ func (manager *SStorageManager) ListItemFilter( } if len(query.SchedtagId) > 0 { - schedTag, err := SchedtagManager.FetchByIdOrName(nil, query.SchedtagId) + schedTag, err := SchedtagManager.FetchByIdOrName(ctx, nil, query.SchedtagId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(SchedtagManager.Keyword(), query.SchedtagId) @@ -1689,7 +1692,7 @@ func (manager *SStorageManager) 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) @@ -1715,7 +1718,7 @@ func (manager *SStorageManager) ListItemFilter( } if len(query.ServerId) > 0 { - guest, err := GuestManager.FetchByIdOrName(userCred, query.ServerId) + guest, err := GuestManager.FetchByIdOrName(ctx, userCred, query.ServerId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", GuestManager.Keyword(), query.ServerId) @@ -1727,7 +1730,7 @@ func (manager *SStorageManager) ListItemFilter( } if len(query.HostId) > 0 { - host, err := HostManager.FetchByIdOrName(userCred, query.HostId) + host, err := HostManager.FetchByIdOrName(ctx, userCred, query.HostId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", HostManager.Keyword(), query.HostId) @@ -1980,7 +1983,7 @@ func (storage *SStorage) PerformForceDetachHost(ctx context.Context, userCred mc if storage.Enabled.Bool() { return nil, httperrors.NewBadRequestError("storage is enabled") } - iHost, err := HostManager.FetchByIdOrName(userCred, input.HostId) + iHost, err := HostManager.FetchByIdOrName(ctx, userCred, input.HostId) if err == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("host %s not found", input.HostId) } else if err != nil { diff --git a/pkg/compute/models/vpc_peering_connections.go b/pkg/compute/models/vpc_peering_connections.go index 37baaf5dce..884995dc99 100644 --- a/pkg/compute/models/vpc_peering_connections.go +++ b/pkg/compute/models/vpc_peering_connections.go @@ -95,7 +95,7 @@ func (manager *SVpcPeeringConnectionManager) ListItemFilter( } if len(query.PeerVpcId) > 0 { - peerVpc, err := VpcManager.FetchByIdOrName(userCred, query.PeerVpcId) + peerVpc, err := VpcManager.FetchByIdOrName(ctx, userCred, query.PeerVpcId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("peer_vpc_id", query.PeerVpcId) @@ -125,7 +125,7 @@ func (manager *SVpcPeeringConnectionManager) ValidateCreateData( } // get vpc ,peerVpc - _vpc, err := VpcManager.FetchByIdOrName(userCred, input.VpcId) + _vpc, err := VpcManager.FetchByIdOrName(ctx, userCred, input.VpcId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("vpc", input.VpcId) @@ -134,7 +134,7 @@ func (manager *SVpcPeeringConnectionManager) ValidateCreateData( } vpc := _vpc.(*SVpc) - _peerVpc, err := VpcManager.FetchByIdOrName(userCred, input.PeerVpcId) + _peerVpc, err := VpcManager.FetchByIdOrName(ctx, userCred, input.PeerVpcId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewResourceNotFoundError2("Peervpc", input.PeerVpcId) diff --git a/pkg/compute/models/vpcresource.go b/pkg/compute/models/vpcresource.go index fe6b26c154..b90b8e911f 100644 --- a/pkg/compute/models/vpcresource.go +++ b/pkg/compute/models/vpcresource.go @@ -171,7 +171,7 @@ func (manager *SVpcResourceBaseManager) ListItemFilter( case api.CLASSIC_VPC_NAME: conditions = append(conditions, sqlchemy.Equals(q.Field("name"), api.CLASSIC_VPC_NAME)) default: - _, err := validators.ValidateModel(userCred, VpcManager, &vpcId) + _, err := validators.ValidateModel(ctx, userCred, VpcManager, &vpcId) if err != nil { return nil, err } diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 9408e48dfa..4cf1f90a7f 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -921,7 +921,7 @@ func (manager *SVpcManager) ValidateCreateData( query jsonutils.JSONObject, input api.VpcCreateInput, ) (api.VpcCreateInput, error) { - regionObj, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + regionObj, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return input, err } @@ -930,7 +930,7 @@ func (manager *SVpcManager) ValidateCreateData( if len(region.ManagerId) > 0 { input.CloudproviderId = region.ManagerId } - _, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) + _, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err } @@ -1200,7 +1200,7 @@ func (manager *SVpcManager) ListItemFilter( } if len(query.DnsZoneId) > 0 { - dnsZone, err := DnsZoneManager.FetchByIdOrName(userCred, query.DnsZoneId) + dnsZone, err := DnsZoneManager.FetchByIdOrName(ctx, userCred, query.DnsZoneId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("dns_zone", query.DnsZoneId) @@ -1212,7 +1212,7 @@ func (manager *SVpcManager) ListItemFilter( } if len(query.UsableForInterVpcNetworkId) > 0 { - _interVpc, err := validators.ValidateModel(userCred, InterVpcNetworkManager, &query.UsableForInterVpcNetworkId) + _interVpc, err := validators.ValidateModel(ctx, userCred, InterVpcNetworkManager, &query.UsableForInterVpcNetworkId) if err != nil { return nil, err } @@ -1240,7 +1240,7 @@ func (manager *SVpcManager) ListItemFilter( } if len(query.InterVpcNetworkId) > 0 { - vpcNetwork, err := InterVpcNetworkManager.FetchByIdOrName(userCred, query.InterVpcNetworkId) + vpcNetwork, err := InterVpcNetworkManager.FetchByIdOrName(ctx, userCred, query.InterVpcNetworkId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("inter_vpc_network", query.InterVpcNetworkId) @@ -1283,7 +1283,7 @@ func (manager *SVpcManager) ListItemFilter( } if len(query.ZoneId) > 0 { - zoneObj, err := validators.ValidateModel(userCred, ZoneManager, &query.ZoneId) + zoneObj, err := validators.ValidateModel(ctx, userCred, ZoneManager, &query.ZoneId) if err != nil { return nil, err } @@ -1524,6 +1524,7 @@ func (vpc *SVpc) GetUsages() []db.IUsage { } func (manager *SVpcManager) totalCount( + ctx context.Context, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, @@ -1676,7 +1677,7 @@ func (vpc *SVpc) PerformPrivate(ctx context.Context, userCred mcclient.TokenCred wires, _ := vpc.GetWires() for i := range wires { if wires[i].DomainId == vpc.DomainId { - nets, _ := wires[i].getNetworks(nil, nil, rbacscope.ScopeNone) + nets, _ := wires[i].getNetworks(ctx, nil, nil, rbacscope.ScopeNone) for j := range nets { if nets[j].DomainId != vpc.DomainId { emptyNets = false @@ -1693,7 +1694,7 @@ func (vpc *SVpc) PerformPrivate(ctx context.Context, userCred mcclient.TokenCred } if emptyNets { for i := range wires { - nets, _ := wires[i].getNetworks(nil, nil, rbacscope.ScopeNone) + nets, _ := wires[i].getNetworks(ctx, nil, nil, rbacscope.ScopeNone) netfail := false for j := range nets { if nets[j].IsPublic && nets[j].GetPublicScope().HigherEqual(rbacscope.ScopeDomain) { @@ -1968,7 +1969,7 @@ func (svpc *SVpc) GetDetailsTopology(ctx context.Context, userCred mcclient.Toke } wire.Hosts = append(wire.Hosts, host) } - networks, err := wires[i].GetNetworks(nil, nil, rbacscope.ScopeSystem) + networks, err := wires[i].GetNetworks(ctx, nil, nil, rbacscope.ScopeSystem) if err != nil { return nil, errors.Wrapf(err, "GetNetworks") } @@ -1984,7 +1985,7 @@ func (svpc *SVpc) GetDetailsTopology(ctx context.Context, userCred mcclient.Toke // Address: []api.SNetworkUsedAddress{}, } - network.GetNetworkAddressesOutput, err = networks[j].fetchAddressDetails(userCred, userCred, rbacscope.ScopeSystem) + network.GetNetworkAddressesOutput, err = networks[j].fetchAddressDetails(ctx, userCred, userCred, rbacscope.ScopeSystem) if err != nil { return nil, errors.Wrapf(err, "fetchAddressDetails") } diff --git a/pkg/compute/models/waf_instances.go b/pkg/compute/models/waf_instances.go index 21fa8731c3..8d62997fdc 100644 --- a/pkg/compute/models/waf_instances.go +++ b/pkg/compute/models/waf_instances.go @@ -77,12 +77,12 @@ func (manager *SWafInstanceManager) GetContextManagers() [][]db.IModelManager { } func (manager *SWafInstanceManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.WafInstanceCreateInput) (api.WafInstanceCreateInput, error) { - _region, err := validators.ValidateModel(userCred, CloudregionManager, &input.CloudregionId) + _region, err := validators.ValidateModel(ctx, userCred, CloudregionManager, &input.CloudregionId) if err != nil { return input, err } region := _region.(*SCloudregion) - _provider, err := validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) + _provider, err := validators.ValidateModel(ctx, userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err } @@ -93,7 +93,7 @@ func (manager *SWafInstanceManager) ValidateCreateData(ctx context.Context, user for i := range input.CloudResources { switch input.CloudResources[i].Type { case LoadbalancerManager.Keyword(): - _lb, err := validators.ValidateModel(userCred, LoadbalancerManager, &input.CloudResources[i].Id) + _lb, err := validators.ValidateModel(ctx, userCred, LoadbalancerManager, &input.CloudResources[i].Id) if err != nil { return input, err } @@ -102,7 +102,7 @@ func (manager *SWafInstanceManager) ValidateCreateData(ctx context.Context, user return input, httperrors.NewConflictError("lb %s does not belong to account %s", lb.Name, provider.GetName()) } case GuestManager.Keyword(): - _server, err := validators.ValidateModel(userCred, GuestManager, &input.CloudResources[i].Id) + _server, err := validators.ValidateModel(ctx, userCred, GuestManager, &input.CloudResources[i].Id) if err != nil { return input, err } diff --git a/pkg/compute/models/waf_rules.go b/pkg/compute/models/waf_rules.go index 103b2f1475..0d807daac7 100644 --- a/pkg/compute/models/waf_rules.go +++ b/pkg/compute/models/waf_rules.go @@ -116,11 +116,11 @@ func (manager *SWafRuleManager) FetchOwnerId(ctx context.Context, data jsonutils return db.FetchDomainInfo(ctx, data) } -func (manager *SWafRuleManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SWafRuleManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { sq1 := WafInstanceManager.Query("id") - sq1 = db.SharableManagerFilterByOwner(WafInstanceManager, sq1, userCred, ownerId, scope) + sq1 = db.SharableManagerFilterByOwner(ctx, WafInstanceManager, sq1, userCred, ownerId, scope) sq2 := WafRuleGroupManager.Query("id") - sq2 = db.SharableManagerFilterByOwner(WafRuleGroupManager, sq2, userCred, ownerId, scope) + sq2 = db.SharableManagerFilterByOwner(ctx, WafRuleGroupManager, sq2, userCred, ownerId, scope) return q.Filter(sqlchemy.OR( sqlchemy.In(q.Field("waf_instance_id"), sq1.SubQuery()), sqlchemy.In(q.Field("waf_rule_group_id"), sq2.SubQuery()), @@ -129,7 +129,7 @@ func (manager *SWafRuleManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterB func (manager *SWafRuleManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.WafRuleCreateInput) (api.WafRuleCreateInput, error) { if len(input.WafInstanceId) > 0 { - ins, err := validators.ValidateModel(userCred, WafInstanceManager, &input.WafInstanceId) + ins, err := validators.ValidateModel(ctx, userCred, WafInstanceManager, &input.WafInstanceId) if err != nil { return input, err } @@ -206,14 +206,14 @@ func (manager *SWafRuleManager) ListItemFilter( } if len(query.WafInstanceId) > 0 { - _, err := validators.ValidateModel(userCred, WafInstanceManager, &query.WafInstanceId) + _, err := validators.ValidateModel(ctx, userCred, WafInstanceManager, &query.WafInstanceId) if err != nil { return nil, err } q = q.Equals("waf_instance_id", query.WafInstanceId) } if len(query.WafRuleGroupId) > 0 { - _, err := validators.ValidateModel(userCred, WafRuleGroupManager, &query.WafRuleGroupId) + _, err := validators.ValidateModel(ctx, userCred, WafRuleGroupManager, &query.WafRuleGroupId) if err != nil { return nil, err } diff --git a/pkg/compute/models/wireresource.go b/pkg/compute/models/wireresource.go index 63be27397a..937690cf1d 100644 --- a/pkg/compute/models/wireresource.go +++ b/pkg/compute/models/wireresource.go @@ -42,8 +42,8 @@ type SWireResourceBaseManager struct { SZoneResourceBaseManager } -func ValidateWireResourceInput(userCred mcclient.TokenCredential, input api.WireResourceInput) (*SWire, api.WireResourceInput, error) { - wireObj, err := WireManager.FetchByIdOrName(userCred, input.WireId) +func ValidateWireResourceInput(ctx context.Context, userCred mcclient.TokenCredential, input api.WireResourceInput) (*SWire, api.WireResourceInput, error) { + wireObj, err := WireManager.FetchByIdOrName(ctx, userCred, input.WireId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, input, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", WireManager.Keyword(), input.WireId) @@ -166,7 +166,7 @@ func (manager *SWireResourceBaseManager) ListItemFilter( query api.WireFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.WireId) > 0 { - wireObj, _, err := ValidateWireResourceInput(userCred, query.WireResourceInput) + wireObj, _, err := ValidateWireResourceInput(ctx, userCred, query.WireResourceInput) if err != nil { return nil, errors.Wrap(err, "ValidateWireResourceInput") } diff --git a/pkg/compute/models/wires.go b/pkg/compute/models/wires.go index af2c9a4c33..03489b2c0f 100644 --- a/pkg/compute/models/wires.go +++ b/pkg/compute/models/wires.go @@ -120,7 +120,7 @@ func (manager *SWireManager) ValidateCreateData( input.VpcId = api.DEFAULT_VPC_ID } - _vpc, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) + _vpc, err := validators.ValidateModel(ctx, userCred, VpcManager, &input.VpcId) if err != nil { return input, err } @@ -134,7 +134,7 @@ func (manager *SWireManager) ValidateCreateData( return input, httperrors.NewMissingParameterError("zone") } - _, input.ZoneResourceInput, err = ValidateZoneResourceInput(userCred, input.ZoneResourceInput) + _, input.ZoneResourceInput, err = ValidateZoneResourceInput(ctx, userCred, input.ZoneResourceInput) if err != nil { return input, errors.Wrap(err, "ValidateZoneResourceInput") } @@ -154,7 +154,7 @@ func (wire *SWire) ValidateUpdateData(ctx context.Context, userCred mcclient.Tok } for _, v := range keysV { v.Optional(true) - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return input, err } } @@ -422,7 +422,7 @@ func (swire *SWire) syncWithCloudWire(ctx context.Context, userCred mcclient.Tok } func (swire *SWire) markNetworkUnknown(ctx context.Context, userCred mcclient.TokenCredential) error { - nets, err := swire.getNetworks(nil, nil, rbacscope.ScopeNone) + nets, err := swire.getNetworks(ctx, nil, nil, rbacscope.ScopeNone) if err != nil { return err } @@ -530,6 +530,7 @@ func fixVmwareProvider(providers []string) (bool, []string) { } func (manager *SWireManager) totalCountQ( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, hostProviders, hostBrands []string, providers []string, brands []string, cloudEnv string, @@ -539,7 +540,7 @@ func (manager *SWireManager) totalCountQ( ) *sqlchemy.SQuery { guestsQ := GuestManager.Query() guestsQ = filterByScopeOwnerId(guestsQ, scope, ownerId, false) - guestsQ = db.ObjectIdQueryWithPolicyResult(guestsQ, GuestManager, policyResult) + guestsQ = db.ObjectIdQueryWithPolicyResult(ctx, guestsQ, GuestManager, policyResult) guests := guestsQ.SubQuery() // hosts no filter, for guest networks @@ -557,7 +558,7 @@ func (manager *SWireManager) totalCountQ( // hosts filter by owner, for host networks hostsQ2 := HostManager.Query() - hostsQ2 = db.ObjectIdQueryWithPolicyResult(hostsQ2, HostManager, policyResult) + hostsQ2 = db.ObjectIdQueryWithPolicyResult(ctx, hostsQ2, HostManager, policyResult) hostsQ2 = filterByScopeOwnerId(hostsQ2, scope, ownerId, true) if len(hostTypes) > 0 { hostsQ2 = hostsQ2.In("host_type", hostTypes) @@ -571,12 +572,12 @@ func (manager *SWireManager) totalCountQ( hosts2 := hostsQ2.SubQuery() groupsQ := GroupManager.Query() - groupsQ = db.ObjectIdQueryWithPolicyResult(groupsQ, GroupManager, policyResult) + groupsQ = db.ObjectIdQueryWithPolicyResult(ctx, groupsQ, GroupManager, policyResult) groupsQ = filterByScopeOwnerId(groupsQ, scope, ownerId, false) groups := groupsQ.SubQuery() lbsQ := LoadbalancerManager.Query() - lbsQ = db.ObjectIdQueryWithPolicyResult(lbsQ, LoadbalancerManager, policyResult) + lbsQ = db.ObjectIdQueryWithPolicyResult(ctx, lbsQ, LoadbalancerManager, policyResult) lbsQ = filterByScopeOwnerId(lbsQ, scope, ownerId, false) if len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 { lbsQ = CloudProviderFilter(lbsQ, lbsQ.Field("manager_id"), providers, brands, cloudEnv) @@ -587,7 +588,7 @@ func (manager *SWireManager) totalCountQ( lbs := lbsQ.SubQuery() dbsQ := DBInstanceManager.Query() - dbsQ = db.ObjectIdQueryWithPolicyResult(dbsQ, DBInstanceManager, policyResult) + dbsQ = db.ObjectIdQueryWithPolicyResult(ctx, dbsQ, DBInstanceManager, policyResult) dbsQ = filterByScopeOwnerId(dbsQ, scope, ownerId, false) if len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 { dbsQ = CloudProviderFilter(dbsQ, dbsQ.Field("manager_id"), providers, brands, cloudEnv) @@ -676,7 +677,7 @@ func (manager *SWireManager) totalCountQ( } { eipNicsQ := ElasticipManager.Query().IsNotEmpty("network_id") - eipNicsQ = db.ObjectIdQueryWithPolicyResult(eipNicsQ, ElasticipManager, policyResult) + eipNicsQ = db.ObjectIdQueryWithPolicyResult(ctx, eipNicsQ, ElasticipManager, policyResult) eipNics := filterByScopeOwnerId(eipNicsQ, scope, ownerId, false).SubQuery() eipNicQ := eipNics.Query( eipNics.Field("network_id"), @@ -692,7 +693,7 @@ func (manager *SWireManager) totalCountQ( } { netifsQ := NetworkInterfaceManager.Query() - netifsQ = db.ObjectIdQueryWithPolicyResult(netifsQ, NetworkInterfaceManager, policyResult) + netifsQ = db.ObjectIdQueryWithPolicyResult(ctx, netifsQ, NetworkInterfaceManager, policyResult) netifsQ = filterByScopeOwnerId(netifsQ, scope, ownerId, true) if len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 { netifsQ = CloudProviderFilter(netifsQ, netifsQ.Field("manager_id"), providers, brands, cloudEnv) @@ -747,6 +748,7 @@ func (manager *SWireManager) totalCountQ( } func (manager *SWireManager) totalCountQ2( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, @@ -774,7 +776,7 @@ func (manager *SWireManager) totalCountQ2( } ownerNetQ1 := NetworkManager.Query() - ownerNetQ1 = db.ObjectIdQueryWithPolicyResult(ownerNetQ1, NetworkManager, policyResult) + ownerNetQ1 = db.ObjectIdQueryWithPolicyResult(ctx, ownerNetQ1, NetworkManager, policyResult) ownerNetworks := filterByScopeOwnerId(ownerNetQ1, scope, ownerId, false).SubQuery() ownerNetQ := ownerNetworks.Query( ownerNetworks.Field("wire_id"), @@ -798,6 +800,7 @@ func (manager *SWireManager) totalCountQ2( } func (manager *SWireManager) totalCountQ3( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, @@ -806,7 +809,7 @@ func (manager *SWireManager) totalCountQ3( policyResult rbacutils.SPolicyResult, ) *sqlchemy.SQuery { wiresQ := WireManager.Query() - wiresQ = db.ObjectIdQueryWithPolicyResult(wiresQ, WireManager, policyResult) + wiresQ = db.ObjectIdQueryWithPolicyResult(ctx, wiresQ, WireManager, policyResult) wires := filterByScopeOwnerId(WireManager.Query(), scope, ownerId, true).SubQuery() q := wires.Query( sqlchemy.COUNT("id").Label("wires_count"), @@ -862,6 +865,7 @@ func (wstat WiresCountStat) NicCount() int { } func (manager *SWireManager) TotalCount( + ctx context.Context, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, @@ -898,6 +902,7 @@ func (manager *SWireManager) TotalCount( stat := WiresCountStat{} err := manager.totalCountQ( + ctx, rangeObjs, hostTypes, hostProviders, hostBrands, providers, brands, cloudEnv, @@ -908,6 +913,7 @@ func (manager *SWireManager) TotalCount( log.Errorf("Wire total count: %v", err) } err = manager.totalCountQ2( + ctx, rangeObjs, hostTypes, providers, brands, cloudEnv, @@ -918,6 +924,7 @@ func (manager *SWireManager) TotalCount( log.Errorf("Wire total count 2: %v", err) } err = manager.totalCountQ3( + ctx, rangeObjs, hostTypes, providers, brands, cloudEnv, @@ -930,7 +937,7 @@ func (manager *SWireManager) TotalCount( return stat } -func (swire *SWire) getNetworkQuery(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (swire *SWire) getNetworkQuery(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { additionalNicIds := NetworkAdditionalWireManager.networkIdQuery(swire.Id) q := NetworkManager.Query() q = q.Filter(sqlchemy.OR( @@ -938,17 +945,17 @@ func (swire *SWire) getNetworkQuery(userCred mcclient.TokenCredential, ownerId m sqlchemy.In(q.Field("id"), additionalNicIds.SubQuery()), )) if ownerId != nil { - q = NetworkManager.FilterByOwner(q, NetworkManager, userCred, ownerId, scope) + q = NetworkManager.FilterByOwner(ctx, q, NetworkManager, userCred, ownerId, scope) } return q } -func (swire *SWire) GetNetworks(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { - return swire.getNetworks(userCred, ownerId, scope) +func (swire *SWire) GetNetworks(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { + return swire.getNetworks(ctx, userCred, ownerId, scope) } -func (swire *SWire) getNetworks(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { - q := swire.getNetworkQuery(userCred, ownerId, scope) +func (swire *SWire) getNetworks(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { + q := swire.getNetworkQuery(ctx, userCred, ownerId, scope) nets := make([]SNetwork, 0) err := db.FetchModelObjects(NetworkManager, q, &nets) if err != nil { @@ -957,15 +964,15 @@ func (swire *SWire) getNetworks(userCred mcclient.TokenCredential, ownerId mccli return nets, nil } -func (swire *SWire) getGatewayNetworkQuery(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { - q := swire.getNetworkQuery(userCred, ownerId, scope) +func (swire *SWire) getGatewayNetworkQuery(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { + q := swire.getNetworkQuery(ctx, userCred, ownerId, scope) q = q.IsNotNull("guest_gateway").IsNotEmpty("guest_gateway") q = q.Equals("status", api.NETWORK_STATUS_AVAILABLE) return q } -func (swire *SWire) getAutoAllocNetworks(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { - q := swire.getGatewayNetworkQuery(userCred, ownerId, scope) +func (swire *SWire) getAutoAllocNetworks(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { + q := swire.getGatewayNetworkQuery(ctx, userCred, ownerId, scope) q = q.IsTrue("is_auto_alloc") nets := make([]SNetwork, 0) err := db.FetchModelObjects(NetworkManager, q, &nets) @@ -975,8 +982,8 @@ func (swire *SWire) getAutoAllocNetworks(userCred mcclient.TokenCredential, owne return nets, nil } -func (swire *SWire) getPublicNetworks(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { - q := swire.getGatewayNetworkQuery(userCred, ownerId, scope) +func (swire *SWire) getPublicNetworks(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { + q := swire.getGatewayNetworkQuery(ctx, userCred, ownerId, scope) q = q.IsTrue("is_public") nets := make([]SNetwork, 0) err := db.FetchModelObjects(NetworkManager, q, &nets) @@ -986,8 +993,8 @@ func (swire *SWire) getPublicNetworks(userCred mcclient.TokenCredential, ownerId return nets, nil } -func (swire *SWire) getPrivateNetworks(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { - q := swire.getGatewayNetworkQuery(userCred, ownerId, scope) +func (swire *SWire) getPrivateNetworks(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) ([]SNetwork, error) { + q := swire.getGatewayNetworkQuery(ctx, userCred, ownerId, scope) q = q.IsFalse("is_public") nets := make([]SNetwork, 0) err := db.FetchModelObjects(NetworkManager, q, &nets) @@ -997,28 +1004,28 @@ func (swire *SWire) getPrivateNetworks(userCred mcclient.TokenCredential, ownerI return nets, nil } -func (swire *SWire) GetCandidatePrivateNetwork(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, isExit bool, serverTypes []string) (*SNetwork, error) { - nets, err := swire.getPrivateNetworks(userCred, ownerId, scope) +func (swire *SWire) GetCandidatePrivateNetwork(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, isExit bool, serverTypes []string) (*SNetwork, error) { + nets, err := swire.getPrivateNetworks(ctx, userCred, ownerId, scope) if err != nil { return nil, err } return ChooseCandidateNetworks(nets, isExit, serverTypes), nil } -func (swire *SWire) GetCandidateAutoAllocNetwork(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, isExit bool, serverTypes []string) (*SNetwork, error) { - nets, err := swire.getAutoAllocNetworks(userCred, ownerId, scope) +func (swire *SWire) GetCandidateAutoAllocNetwork(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, isExit bool, serverTypes []string) (*SNetwork, error) { + nets, err := swire.getAutoAllocNetworks(ctx, userCred, ownerId, scope) if err != nil { return nil, err } return ChooseCandidateNetworks(nets, isExit, serverTypes), nil } -func (swire *SWire) GetCandidateNetworkForIp(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, ipAddr string) (*SNetwork, error) { +func (swire *SWire) GetCandidateNetworkForIp(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, ipAddr string) (*SNetwork, error) { ip, err := netutils.NewIPV4Addr(ipAddr) if err != nil { return nil, err } - netPrivates, err := swire.getPrivateNetworks(userCred, ownerId, scope) + netPrivates, err := swire.getPrivateNetworks(ctx, userCred, ownerId, scope) if err != nil { return nil, err } @@ -1027,7 +1034,7 @@ func (swire *SWire) GetCandidateNetworkForIp(userCred mcclient.TokenCredential, return &net, nil } } - netPublics, err := swire.getPublicNetworks(userCred, ownerId, scope) + netPublics, err := swire.getPublicNetworks(ctx, userCred, ownerId, scope) if err != nil { return nil, err } @@ -1410,7 +1417,7 @@ func (w *SWire) PerformMergeTo(ctx context.Context, userCred mcclient.TokenCrede logclient.AddActionLogWithContext(ctx, w, logclient.ACT_MERGE, err.Error(), userCred, false) } }() - iw, err := WireManager.FetchByIdOrName(userCred, input.Target) + iw, err := WireManager.FetchByIdOrName(ctx, userCred, input.Target) if err == sql.ErrNoRows { err = httperrors.NewNotFoundError("Wire %q", input.Target) return @@ -1533,7 +1540,7 @@ func (manager *SWireManager) ListItemFilter( hostStr := query.HostId if len(hostStr) > 0 { - hostObj, err := HostManager.FetchByIdOrName(userCred, hostStr) + hostObj, err := HostManager.FetchByIdOrName(ctx, userCred, hostStr) if err != nil { return nil, httperrors.NewResourceNotFoundError2(HostManager.Keyword(), hostStr) } @@ -1768,8 +1775,9 @@ func (wire *SWire) GetChangeOwnerCandidateDomainIds() []string { } func (wire *SWire) GetChangeOwnerRequiredDomainIds() []string { + ctx := context.Background() requires := stringutils2.SSortedStrings{} - networks, _ := wire.getNetworks(nil, nil, rbacscope.ScopeNone) + networks, _ := wire.getNetworks(ctx, nil, nil, rbacscope.ScopeNone) for i := range networks { requires = stringutils2.Append(requires, networks[i].DomainId) } @@ -1777,7 +1785,8 @@ func (wire *SWire) GetChangeOwnerRequiredDomainIds() []string { } func (wire *SWire) GetRequiredSharedDomainIds() []string { - networks, _ := wire.getNetworks(nil, nil, rbacscope.ScopeNone) + ctx := context.Background() + networks, _ := wire.getNetworks(ctx, nil, nil, rbacscope.ScopeNone) if len(networks) == 0 { return wire.SInfrasResourceBase.GetRequiredSharedDomainIds() } @@ -1861,7 +1870,7 @@ func (swire *SWire) GetDetailsTopology(ctx context.Context, userCred mcclient.To } ret.Hosts = append(ret.Hosts, host) } - networks, err := swire.GetNetworks(nil, nil, rbacscope.ScopeSystem) + networks, err := swire.GetNetworks(ctx, nil, nil, rbacscope.ScopeSystem) if err != nil { return nil, errors.Wrapf(err, "GetNetworks") } @@ -1877,7 +1886,7 @@ func (swire *SWire) GetDetailsTopology(ctx context.Context, userCred mcclient.To // Address: []api.SNetworkUsedAddress{}, } - network.GetNetworkAddressesOutput, err = networks[j].fetchAddressDetails(userCred, userCred, rbacscope.ScopeSystem) + network.GetNetworkAddressesOutput, err = networks[j].fetchAddressDetails(ctx, userCred, userCred, rbacscope.ScopeSystem) if err != nil { return nil, errors.Wrapf(err, "fetchAddressDetails") } diff --git a/pkg/compute/models/zoneresource.go b/pkg/compute/models/zoneresource.go index 9219519dd6..bbb731a1f1 100644 --- a/pkg/compute/models/zoneresource.go +++ b/pkg/compute/models/zoneresource.go @@ -39,8 +39,8 @@ type SZoneResourceBaseManager struct { SCloudregionResourceBaseManager } -func ValidateZoneResourceInput(userCred mcclient.TokenCredential, query api.ZoneResourceInput) (*SZone, api.ZoneResourceInput, error) { - zoneObj, err := ZoneManager.FetchByIdOrName(userCred, query.ZoneId) +func ValidateZoneResourceInput(ctx context.Context, userCred mcclient.TokenCredential, query api.ZoneResourceInput) (*SZone, api.ZoneResourceInput, error) { + zoneObj, err := ZoneManager.FetchByIdOrName(ctx, userCred, query.ZoneId) if err != nil { if err == sql.ErrNoRows { return nil, query, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ZoneManager.Keyword(), query.ZoneId) @@ -117,7 +117,7 @@ func (manager *SZoneResourceBaseManager) ListItemFilter( userCred mcclient.TokenCredential, query api.ZonalFilterListInput, ) (*sqlchemy.SQuery, error) { - q, err := managedResourceFilterByZone(q, query, "", nil) + q, err := managedResourceFilterByZone(ctx, q, query, "", nil) if err != nil { return nil, errors.Wrap(err, "managedResourceFilterByZone") } diff --git a/pkg/compute/models/zones.go b/pkg/compute/models/zones.go index 549d30dba1..dab710c5c4 100644 --- a/pkg/compute/models/zones.go +++ b/pkg/compute/models/zones.go @@ -81,7 +81,7 @@ func (zone *SZone) ValidateDeleteCondition(ctx context.Context, info *api.ZoneDe if info != nil { usage = info.ZoneGeneralUsage } else { - usage = zone.GeneralUsage() + usage = zone.GeneralUsage(ctx) } if !usage.IsEmpty() { return httperrors.NewNotEmptyError("not empty zone: %s", zone.Id) @@ -93,14 +93,14 @@ func (manager *SZoneManager) Count() (int, error) { return manager.Query().CountWithError() } -func (zone *SZone) GeneralUsage() api.ZoneGeneralUsage { +func (zone *SZone) GeneralUsage(ctx context.Context) api.ZoneGeneralUsage { usage := api.ZoneGeneralUsage{} usage.Hosts, _ = zone.HostCount("", "", tristate.None, "", tristate.None) usage.HostsEnabled, _ = zone.HostCount("", "", tristate.True, "", tristate.None) usage.Baremetals, _ = zone.HostCount("", "", tristate.None, "", tristate.True) usage.BaremetalsEnabled, _ = zone.HostCount("", "", tristate.True, "", tristate.True) usage.Wires, _ = zone.getWireCount() - usage.Networks, _ = zone.getNetworkCount() + usage.Networks, _ = zone.getNetworkCount(ctx) usage.Storages, _ = zone.getStorageCount() return usage } @@ -139,8 +139,8 @@ func (zone *SZone) getStorageCount() (int, error) { return q.CountWithError() } -func (zone *SZone) getNetworkCount() (int, error) { - return getNetworkCount(nil, nil, rbacscope.ScopeSystem, nil, zone) +func (zone *SZone) getNetworkCount(ctx context.Context) (int, error) { + return getNetworkCount(ctx, nil, nil, rbacscope.ScopeSystem, nil, zone) } func (manager *SZoneManager) FetchCustomizeColumns( @@ -778,7 +778,7 @@ func (manager *SZoneManager) ListItemFilter( q = q.In("cloudregion_id", subq.SubQuery()) } - q, err = managedResourceFilterByRegion(q, query.RegionalFilterListInput, "", nil) + q, err = managedResourceFilterByRegion(ctx, q, query.RegionalFilterListInput, "", nil) if len(query.Location) > 0 { q = q.In("location", query.Location) @@ -940,7 +940,7 @@ func (manager *SZoneManager) ValidateCreateData(ctx context.Context, userCred mc break } } - _region, err := CloudregionManager.FetchByIdOrName(nil, input.Cloudregion) + _region, err := CloudregionManager.FetchByIdOrName(ctx, nil, input.Cloudregion) if err != nil { if err != sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError("failed to found cloudregion %s", input.Cloudregion) diff --git a/pkg/compute/regiondrivers/aliyun.go b/pkg/compute/regiondrivers/aliyun.go index 0fff967556..3ed3738856 100644 --- a/pkg/compute/regiondrivers/aliyun.go +++ b/pkg/compute/regiondrivers/aliyun.go @@ -424,7 +424,7 @@ func (self *SAliyunRegionDriver) ValidateCreateElasticcacheAccountData(ctx conte } for _, v := range keyV { - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } @@ -635,7 +635,7 @@ func (self *SAliyunRegionDriver) GetMaxElasticcacheSecurityGroupCount() int { func (self *SAliyunRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { cidrV := validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } diff --git a/pkg/compute/regiondrivers/aws.go b/pkg/compute/regiondrivers/aws.go index fdb4937536..fbdb829741 100644 --- a/pkg/compute/regiondrivers/aws.go +++ b/pkg/compute/regiondrivers/aws.go @@ -308,7 +308,7 @@ func (self *SAwsRegionDriver) IsCertificateBelongToRegion() bool { func (self *SAwsRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { cidrV := validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } if cidrV.Value.MaskLen < 16 || cidrV.Value.MaskLen > 28 { diff --git a/pkg/compute/regiondrivers/azure.go b/pkg/compute/regiondrivers/azure.go index def8163319..28d2532b78 100644 --- a/pkg/compute/regiondrivers/azure.go +++ b/pkg/compute/regiondrivers/azure.go @@ -43,7 +43,7 @@ func (self *SAzureRegionDriver) GetProvider() string { func (self *SAzureRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { cidrV := validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } if cidrV.Value.MaskLen < 8 || cidrV.Value.MaskLen > 29 { diff --git a/pkg/compute/regiondrivers/ctyun.go b/pkg/compute/regiondrivers/ctyun.go index 1a5e246a88..600963d5ce 100644 --- a/pkg/compute/regiondrivers/ctyun.go +++ b/pkg/compute/regiondrivers/ctyun.go @@ -43,7 +43,7 @@ func (self *SCtyunRegionDriver) GetProvider() string { func (self *SCtyunRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { cidrV := validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } diff --git a/pkg/compute/regiondrivers/google.go b/pkg/compute/regiondrivers/google.go index 8935e7012b..7b3372874f 100644 --- a/pkg/compute/regiondrivers/google.go +++ b/pkg/compute/regiondrivers/google.go @@ -200,14 +200,14 @@ func (self *SGoogleRegionDriver) RequestCreateDBInstanceBackup(ctx context.Conte func (self *SGoogleRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { var cidrV = validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } if cidrV.Value.MaskLen < 8 || cidrV.Value.MaskLen > 29 { return input, httperrors.NewInputParameterError("%s request the mask range should be between 8 and 29", self.GetProvider()) } if len(input.GlobalvpcId) == 0 { - _manager, err := validators.ValidateModel(userCred, models.CloudproviderManager, &input.CloudproviderId) + _manager, err := validators.ValidateModel(ctx, userCred, models.CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err } @@ -221,7 +221,7 @@ func (self *SGoogleRegionDriver) ValidateCreateVpcData(ctx context.Context, user } input.GlobalvpcId = globalVpcs[0].Id } - _, err := validators.ValidateModel(userCred, models.GlobalVpcManager, &input.GlobalvpcId) + _, err := validators.ValidateModel(ctx, userCred, models.GlobalVpcManager, &input.GlobalvpcId) if err != nil { return input, err } diff --git a/pkg/compute/regiondrivers/huawei.go b/pkg/compute/regiondrivers/huawei.go index efa78dc625..49d4420e27 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -391,7 +391,7 @@ func (self *SHuaWeiRegionDriver) ValidateDBInstanceRecovery(ctx context.Context, return nil } -func validatorSlaveZones(ownerId mcclient.IIdentityProvider, regionId string, data *jsonutils.JSONDict, optional bool) error { +func validatorSlaveZones(ctx context.Context, ownerId mcclient.IIdentityProvider, regionId string, data *jsonutils.JSONDict, optional bool) error { s, err := data.GetString("slave_zones") if err != nil { if optional { @@ -407,7 +407,7 @@ func validatorSlaveZones(ownerId mcclient.IIdentityProvider, regionId string, da for i := range zones { _data := jsonutils.NewDict() _data.Set("zone", jsonutils.NewString(zones[i])) - if err := zoneV.Validate(_data); err != nil { + if err := zoneV.Validate(ctx, _data); err != nil { return errors.Wrap(err, "validatorSlaveZones") } else { if zoneV.Model.(*models.SZone).GetCloudRegionId() != regionId { @@ -553,7 +553,7 @@ func (self *SHuaWeiRegionDriver) IsSupportedElasticcacheAutoRenew() bool { func (self *SHuaWeiRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { var cidrV = validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } diff --git a/pkg/compute/regiondrivers/kvm.go b/pkg/compute/regiondrivers/kvm.go index 2fe4a46141..65e054bd5a 100644 --- a/pkg/compute/regiondrivers/kvm.go +++ b/pkg/compute/regiondrivers/kvm.go @@ -54,12 +54,12 @@ func init() { models.RegisterRegionDriver(&driver) } -func RunValidators(validators map[string]validators.IValidator, data *jsonutils.JSONDict, optional bool) error { +func RunValidators(ctx context.Context, validators map[string]validators.IValidator, data *jsonutils.JSONDict, optional bool) error { for _, v := range validators { if optional { v.Optional(true) } - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return err } } @@ -85,13 +85,13 @@ func (self *SKVMRegionDriver) ValidateCreateLoadbalancerData(ctx context.Context // find available networks var network *models.SNetwork = nil if len(input.NetworkId) > 0 { - netObj, err := validators.ValidateModel(userCred, models.NetworkManager, &input.NetworkId) + netObj, err := validators.ValidateModel(ctx, userCred, models.NetworkManager, &input.NetworkId) if err != nil { return nil, err } network = netObj.(*models.SNetwork) } else if len(input.VpcId) > 0 { - vpcObj, err := validators.ValidateModel(userCred, models.VpcManager, &input.VpcId) + vpcObj, err := validators.ValidateModel(ctx, userCred, models.VpcManager, &input.VpcId) if err != nil { return nil, err } @@ -133,7 +133,7 @@ func (self *SKVMRegionDriver) ValidateCreateLoadbalancerData(ctx context.Context } if len(input.ClusterId) > 0 { - clusterObj, err := validators.ValidateModel(userCred, models.LoadbalancerClusterManager, &input.ClusterId) + clusterObj, err := validators.ValidateModel(ctx, userCred, models.LoadbalancerClusterManager, &input.ClusterId) if err != nil { return nil, err } @@ -537,7 +537,7 @@ func (self *SKVMRegionDriver) ValidateCreateEipData(ctx context.Context, userCre } var network *models.SNetwork if input.NetworkId != "" { - _network, err := models.NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + _network, err := models.NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2("network", input.NetworkId) @@ -580,7 +580,7 @@ func (self *SKVMRegionDriver) ValidateCreateEipData(ctx context.Context, userCre if !network.Contains(input.IpAddr) { return httperrors.NewInputParameterError("candidate %s out of range", input.IpAddr) } - addrTable := network.GetUsedAddresses() + addrTable := network.GetUsedAddresses(ctx) if _, ok := addrTable[input.IpAddr]; ok { return httperrors.NewInputParameterError("requested ip %s is occupied!", input.IpAddr) } diff --git a/pkg/compute/regiondrivers/managedvirtual.go b/pkg/compute/regiondrivers/managedvirtual.go index ae9c085c4a..c4366bf7af 100644 --- a/pkg/compute/regiondrivers/managedvirtual.go +++ b/pkg/compute/regiondrivers/managedvirtual.go @@ -106,7 +106,7 @@ func (self *SManagedVirtualizationRegionDriver) IsSupportLoadbalancerListenerRul func validateUniqueById(ctx context.Context, userCred mcclient.TokenCredential, man db.IResourceModelManager, id string) error { q := man.Query().Equals("id", id) - q = man.FilterByOwner(q, man, userCred, userCred, man.NamespaceScope()) + q = man.FilterByOwner(ctx, q, man, userCred, userCred, man.NamespaceScope()) count, err := q.CountWithError() if err != nil { if err == sql.ErrNoRows { @@ -192,7 +192,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestCreateLoadbalancerInstanc networks = append(networks, input.Networks...) for i := range networks { if len(networks[i]) > 0 { - netObj, err := validators.ValidateModel(userCred, models.NetworkManager, &networks[i]) + netObj, err := validators.ValidateModel(ctx, userCred, models.NetworkManager, &networks[i]) if err != nil { return nil, err } @@ -2088,18 +2088,18 @@ func (self *SManagedVirtualizationRegionDriver) ValidateCreateElasticcacheAclDat 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 } } } elasticcacheV := validators.NewModelIdOrNameValidator("elasticcache", "elasticcache", ownerId) - if err := elasticcacheV.Validate(data); err != nil { + if err := elasticcacheV.Validate(ctx, data); err != nil { return nil, err } @@ -2112,7 +2112,7 @@ func (self *SManagedVirtualizationRegionDriver) AllowCreateElasticcacheBackup(ct func (self *SManagedVirtualizationRegionDriver) ValidateCreateElasticcacheBackupData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { elasticcacheV := validators.NewModelIdOrNameValidator("elasticcache", "elasticcache", ownerId) - if err := elasticcacheV.Validate(data); err != nil { + if err := elasticcacheV.Validate(ctx, data); err != nil { return nil, err } @@ -3435,7 +3435,7 @@ func (self *SManagedVirtualizationRegionDriver) ValidateCreateSnapshotPolicy(ctx if len(input.CloudproviderId) == 0 { return nil, httperrors.NewMissingParameterError("cloudprovider_id") } - managerObj, err := validators.ValidateModel(userCred, models.CloudproviderManager, &input.CloudproviderId) + managerObj, err := validators.ValidateModel(ctx, userCred, models.CloudproviderManager, &input.CloudproviderId) if err != nil { return nil, err } diff --git a/pkg/compute/regiondrivers/openstack.go b/pkg/compute/regiondrivers/openstack.go index 46d72facd7..f764362c98 100644 --- a/pkg/compute/regiondrivers/openstack.go +++ b/pkg/compute/regiondrivers/openstack.go @@ -58,7 +58,7 @@ func (self *SOpenStackRegionDriver) ValidateCreateEipData(ctx context.Context, u if len(input.NetworkId) == 0 { return httperrors.NewMissingParameterError("network_id") } - _network, err := models.NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + _network, err := models.NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2("network", input.NetworkId) diff --git a/pkg/compute/regiondrivers/qcloud.go b/pkg/compute/regiondrivers/qcloud.go index 0428d268e5..c28151039f 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -227,7 +227,7 @@ func (self *SQcloudRegionDriver) RequestCreateLoadbalancerListenerRule(ctx conte func (self *SQcloudRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { cidrV := validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } @@ -383,7 +383,7 @@ func (self *SQcloudRegionDriver) ValidateCreateElasticcacheAccountData(ctx conte } for _, v := range keyV { - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } } diff --git a/pkg/compute/regiondrivers/ucloud.go b/pkg/compute/regiondrivers/ucloud.go index e9ed1350f9..cc98372f6d 100644 --- a/pkg/compute/regiondrivers/ucloud.go +++ b/pkg/compute/regiondrivers/ucloud.go @@ -44,7 +44,7 @@ func (self *SUcloudRegionDriver) GetProvider() string { func (self *SUcloudRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { var cidrV = validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } err := IsInPrivateIpRange(cidrV.Value.ToIPRange()) diff --git a/pkg/compute/regiondrivers/volcengine.go b/pkg/compute/regiondrivers/volcengine.go index 165e8ed9de..772b89514e 100644 --- a/pkg/compute/regiondrivers/volcengine.go +++ b/pkg/compute/regiondrivers/volcengine.go @@ -41,7 +41,7 @@ func (self *SVolcengineRegionDriver) GetProvider() string { func (self *SVolcengineRegionDriver) ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) { var cidrV = validators.NewIPv4PrefixValidator("cidr_block") - if err := cidrV.Validate(jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { + if err := cidrV.Validate(ctx, jsonutils.Marshal(input).(*jsonutils.JSONDict)); err != nil { return input, err } err := IsInPrivateIpRange(cidrV.Value.ToIPRange()) diff --git a/pkg/compute/regiondrivers/zstack.go b/pkg/compute/regiondrivers/zstack.go index eba6356b99..fde8ec7fcc 100644 --- a/pkg/compute/regiondrivers/zstack.go +++ b/pkg/compute/regiondrivers/zstack.go @@ -44,7 +44,7 @@ func (self *SZStackRegionDriver) ValidateCreateEipData(ctx context.Context, user if len(input.NetworkId) == 0 { return httperrors.NewMissingParameterError("network_id") } - _network, err := models.NetworkManager.FetchByIdOrName(userCred, input.NetworkId) + _network, err := models.NetworkManager.FetchByIdOrName(ctx, userCred, input.NetworkId) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2("network", input.NetworkId) diff --git a/pkg/compute/storagedrivers/slvm.go b/pkg/compute/storagedrivers/slvm.go index d28a7487ff..aa34b1c1da 100644 --- a/pkg/compute/storagedrivers/slvm.go +++ b/pkg/compute/storagedrivers/slvm.go @@ -51,7 +51,7 @@ func (s *SSLVMStorageDriver) ValidateCreateData(ctx context.Context, userCred mc if len(input.MasterHost) == 0 { return httperrors.NewMissingParameterError("master_host") } - host, err := models.HostManager.FetchByIdOrName(userCred, input.MasterHost) + host, err := models.HostManager.FetchByIdOrName(ctx, userCred, input.MasterHost) if err != nil { return httperrors.NewInputParameterError("get host %s failed", input.MasterHost) } diff --git a/pkg/compute/tasks/cloud_provider_sync_info_task.go b/pkg/compute/tasks/cloud_provider_sync_info_task.go index 4c673dd0ca..d26647544b 100644 --- a/pkg/compute/tasks/cloud_provider_sync_info_task.go +++ b/pkg/compute/tasks/cloud_provider_sync_info_task.go @@ -58,13 +58,13 @@ func getAction(params *jsonutils.JSONDict) string { return action } -func (self *CloudProviderSyncInfoTask) GetSyncRange() models.SSyncRange { +func (self *CloudProviderSyncInfoTask) GetSyncRange(ctx context.Context) models.SSyncRange { syncRange := models.SSyncRange{} syncRangeJson, _ := self.Params.Get("sync_range") if syncRangeJson != nil { syncRangeJson.Unmarshal(&syncRange) } - syncRange.Normalize() + syncRange.Normalize(ctx) return syncRange } @@ -73,7 +73,7 @@ func (self *CloudProviderSyncInfoTask) OnInit(ctx context.Context, obj db.IStand self.SetStage("OnSyncCloudProviderPreInfoComplete", nil) - syncRange := self.GetSyncRange() + syncRange := self.GetSyncRange(ctx) taskman.LocalTaskRun(self, func() (jsonutils.JSONObject, error) { return nil, models.SyncCloudproviderResources(ctx, self.GetUserCred(), provider, &syncRange) @@ -82,7 +82,7 @@ func (self *CloudProviderSyncInfoTask) OnInit(ctx context.Context, obj db.IStand func (self *CloudProviderSyncInfoTask) OnSyncCloudProviderPreInfoComplete(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { provider := obj.(*models.SCloudprovider) - syncRange := self.GetSyncRange() + syncRange := self.GetSyncRange(ctx) db.OpsLog.LogEvent(provider, db.ACT_SYNCING_HOST, "", self.UserCred) self.SetStage("OnSyncCloudProviderInfoComplete", nil) diff --git a/pkg/compute/tasks/eip_associate_task.go b/pkg/compute/tasks/eip_associate_task.go index 3cb4b39b4c..3c6d4598e4 100644 --- a/pkg/compute/tasks/eip_associate_task.go +++ b/pkg/compute/tasks/eip_associate_task.go @@ -56,7 +56,7 @@ func (self *EipAssociateTask) GetAssociateInput() (api.ElasticipAssociateInput, return input, nil } -func (self *EipAssociateTask) GetAssociateObj() (db.IStatusStandaloneModel, api.ElasticipAssociateInput, error) { +func (self *EipAssociateTask) GetAssociateObj(ctx context.Context) (db.IStatusStandaloneModel, api.ElasticipAssociateInput, error) { input, err := self.GetAssociateInput() if err != nil { return nil, input, errors.Wrapf(err, "GetAssociateInput") @@ -64,7 +64,7 @@ func (self *EipAssociateTask) GetAssociateObj() (db.IStatusStandaloneModel, api. switch input.InstanceType { case api.EIP_ASSOCIATE_TYPE_SERVER: - vmObj, err := db.FetchByIdOrName(models.GuestManager, self.UserCred, input.InstanceId) + vmObj, err := db.FetchByIdOrName(ctx, models.GuestManager, self.UserCred, input.InstanceId) if err != nil { return nil, input, errors.Wrapf(err, "GuestManager.FetchByIdOrName(%q)", input.InstanceId) } @@ -72,7 +72,7 @@ func (self *EipAssociateTask) GetAssociateObj() (db.IStatusStandaloneModel, api. input.InstanceExternalId = vm.ExternalId return vm, input, nil case api.EIP_ASSOCIATE_TYPE_NAT_GATEWAY: - natObj, err := db.FetchByIdOrName(models.NatGatewayManager, self.UserCred, input.InstanceId) + natObj, err := db.FetchByIdOrName(ctx, models.NatGatewayManager, self.UserCred, input.InstanceId) if err != nil { return nil, input, errors.Wrapf(err, "NatGatewayManager.FetchByIdOrName(%q)", input.InstanceId) } @@ -87,7 +87,7 @@ func (self *EipAssociateTask) GetAssociateObj() (db.IStatusStandaloneModel, api. grp := grpObj.(*models.SGroup) return grp, input, nil case api.EIP_ASSOCIATE_TYPE_LOADBALANCER: - obj, err := db.FetchByIdOrName(models.LoadbalancerManager, self.UserCred, input.InstanceId) + obj, err := db.FetchByIdOrName(ctx, models.LoadbalancerManager, self.UserCred, input.InstanceId) if err != nil { return nil, input, errors.Wrapf(err, "LoadbalancerManager.FetchByIdOrName(%q)", input.InstanceId) } @@ -108,7 +108,7 @@ func (self *EipAssociateTask) OnInit(ctx context.Context, obj db.IStandaloneMode return } - ins, input, err := self.GetAssociateObj() + ins, input, err := self.GetAssociateObj(ctx) if err != nil { self.taskFail(ctx, eip, nil, errors.Wrapf(err, "self.GetAssociateObj")) return @@ -127,7 +127,7 @@ func (self *EipAssociateTask) OnInit(ctx context.Context, obj db.IStandaloneMode func (self *EipAssociateTask) OnAssociateEipComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { eip := obj.(*models.SElasticip) - ins, input, err := self.GetAssociateObj() + ins, input, err := self.GetAssociateObj(ctx) if err == nil { switch input.InstanceType { case api.EIP_ASSOCIATE_TYPE_SERVER: @@ -155,6 +155,6 @@ func (self *EipAssociateTask) OnAssociateEipComplete(ctx context.Context, obj db func (self *EipAssociateTask) OnAssociateEipCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { eip := obj.(*models.SElasticip) - ins, _, _ := self.GetAssociateObj() + ins, _, _ := self.GetAssociateObj(ctx) self.taskFail(ctx, eip, ins, errors.Errorf(data.String())) } diff --git a/pkg/compute/tasks/networks_under_wire_merge_task.go b/pkg/compute/tasks/networks_under_wire_merge_task.go index bb6bd3f7f4..e160c97c3c 100644 --- a/pkg/compute/tasks/networks_under_wire_merge_task.go +++ b/pkg/compute/tasks/networks_under_wire_merge_task.go @@ -71,7 +71,7 @@ func (self *NetworksUnderWireMergeTask) OnInit(ctx context.Context, obj db.IStan lockman.LockClass(ctx, models.NetworkManager, db.GetLockClassKey(models.NetworkManager, self.UserCred)) defer lockman.ReleaseClass(ctx, models.NetworkManager, db.GetLockClassKey(models.NetworkManager, self.UserCred)) - networks, err := w.GetNetworks(self.UserCred, self.UserCred, rbacscope.ScopeDomain) + networks, err := w.GetNetworks(ctx, self.UserCred, self.UserCred, rbacscope.ScopeDomain) if err != nil { self.taskFailed(ctx, w, "unable to GetNetworks", err) return diff --git a/pkg/compute/usages/handler.go b/pkg/compute/usages/handler.go index 6ee2f2e5ce..5e06418596 100644 --- a/pkg/compute/usages/handler.go +++ b/pkg/compute/usages/handler.go @@ -66,7 +66,7 @@ func (u Usage) Include(nus ...Usage) Usage { return u } -type objUsageFunc func(mcclient.TokenCredential, rbacscope.TRbacScope, mcclient.IIdentityProvider, bool, []db.IStandaloneModel, []string, []string, []string, string, bool, rbacutils.SPolicyResult) (Usage, error) +type objUsageFunc func(context.Context, mcclient.TokenCredential, rbacscope.TRbacScope, mcclient.IIdentityProvider, bool, []db.IStandaloneModel, []string, []string, []string, string, bool, rbacutils.SPolicyResult) (Usage, error) func getRangeObjId(ctx context.Context) (string, error) { params := appctx.AppContextParams(ctx) @@ -85,7 +85,7 @@ func getRangeObj(ctx context.Context, man db.IStandaloneModelManager, userCred m if err != nil { return nil, errors.Wrap(err, "getRangeObjId") } - m, err := man.FetchByIdOrName(userCred, id) + m, err := man.FetchByIdOrName(ctx, userCred, id) if err != nil { return nil, errors.Wrap(err, "man.FetchByIdOrName") } @@ -136,7 +136,7 @@ func rangeObjHandler( return } } - usage, err := reporter(userCred, scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, result) + usage, err := reporter(ctx, userCred, scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, result) if err != nil { httperrors.GeneralServerError(ctx, w, err) return @@ -187,35 +187,36 @@ func getQuery(r *http.Request) json.JSONObject { return query } -func ReportHostUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, hosts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, hosts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportHostUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, hosts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, hosts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportWireUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, wires []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, wires, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportWireUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, wires []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, wires, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportCloudAccountUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, accounts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, accounts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportCloudAccountUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, accounts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, accounts, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportCloudProviderUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, managers []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, managers, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportCloudProviderUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, managers []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, managers, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportSchedtagUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, schedtags []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, schedtags, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportSchedtagUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, schedtags []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, schedtags, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportZoneUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, zones []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, zones, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportZoneUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, zones []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, zones, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } -func ReportCloudRegionUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, cloudRegions []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { - return ReportGeneralUsage(userToken, scope, userCred, isOwner, cloudRegions, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) +func ReportCloudRegionUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, cloudRegions []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) (Usage, error) { + return ReportGeneralUsage(ctx, userToken, scope, userCred, isOwner, cloudRegions, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) } func getSystemGeneralUsage( + ctx context.Context, userToken mcclient.TokenCredential, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, @@ -228,7 +229,7 @@ func getSystemGeneralUsage( var pmemTotal float64 var pcpuTotal float64 - hostEnabledUsage := HostEnabledUsage(userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult) + hostEnabledUsage := HostEnabledUsage(ctx, userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult) if !gotypes.IsNil(hostEnabledUsage.Get("enabled_hosts.memory")) { pmemTotal = float64(hostEnabledUsage.Get("enabled_hosts.memory").(int64)) } @@ -245,7 +246,7 @@ func getSystemGeneralUsage( count.Add("cpu.virtual", int64(host.GetVirtualCPUCount())) } - guestRunningUsage := GuestRunningUsage(userToken, "all.running_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult) + guestRunningUsage := GuestRunningUsage(ctx, userToken, "all.running_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult) var runningMem int var runningCpu int if !gotypes.IsNil(guestRunningUsage.Get("all.running_servers.memory")) { @@ -274,11 +275,11 @@ func getSystemGeneralUsage( lastWeek := time.Now().Add(-7 * 24 * time.Hour) lastMonth := time.Now().Add(-30 * 24 * time.Hour) count.Include( - VpcUsage(userToken, "all", providers, brands, cloudEnv, nil, rbacscope.ScopeSystem, rangeObjs, policyResult), + VpcUsage(ctx, userToken, "all", providers, brands, cloudEnv, nil, rbacscope.ScopeSystem, rangeObjs, policyResult), - DnsZoneUsage(userToken, "", nil, rbacscope.ScopeSystem, policyResult), + DnsZoneUsage(ctx, userToken, "", nil, rbacscope.ScopeSystem, policyResult), - HostAllUsage(userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), + HostAllUsage(ctx, userToken, "", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), // HostAllUsage("prepaid_pool", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv), // HostAllUsage("any_pool", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, nil, providers, brands, cloudEnv), @@ -286,25 +287,25 @@ func getSystemGeneralUsage( // HostEnabledUsage("prepaid_pool", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv), // HostEnabledUsage("any_pool", userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, nil, providers, brands, cloudEnv), - BaremetalUsage(userToken, userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), + BaremetalUsage(ctx, userToken, userCred, rbacscope.ScopeSystem, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), - StorageUsage(userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, includeSystem, rbacscope.ScopeSystem, nil, policyResult), - StorageUsage(userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeSystem, nil, policyResult), + StorageUsage(ctx, userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, includeSystem, rbacscope.ScopeSystem, nil, policyResult), + StorageUsage(ctx, userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeSystem, nil, policyResult), // StorageUsage("prepaid_pool", rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false, includeSystem, rbacscope.ScopeSystem, nil), // StorageUsage("any_pool", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, includeSystem, rbacscope.ScopeSystem, nil), // StorageUsage("any_pool.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, true, rbacscope.ScopeSystem, nil), // StorageUsage("any_pool.pending_delete", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, includeSystem, rbacscope.ScopeSystem, nil), // StorageUsage("any_pool.pending_delete.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, true, rbacscope.ScopeSystem, nil), - GuestNormalUsage(userToken, "all.servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult), - GuestNormalUsage(userToken, "all.servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult), - GuestNormalUsage(userToken, "all.servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult), + GuestNormalUsage(ctx, userToken, "all.servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult), + GuestNormalUsage(ctx, userToken, "all.servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult), + GuestNormalUsage(ctx, userToken, "all.servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult), // GuestNormalUsage("all.servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), // GuestNormalUsage("all.servers.any_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), - GuestPendingDeleteUsage(userToken, "all.pending_delete_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult), - GuestPendingDeleteUsage(userToken, "all.pending_delete_servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult), - GuestPendingDeleteUsage(userToken, "all.pending_delete_servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult), + GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, nil, policyResult), + GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers.last_week", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastWeek, policyResult), + GuestPendingDeleteUsage(ctx, userToken, "all.pending_delete_servers.last_month", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, &lastMonth, policyResult), // GuestPendingDeleteUsage("all.pending_delete_servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), // GuestNormalUsage("all.servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), // GuestNormalUsage("all.servers.any_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), @@ -313,7 +314,7 @@ func getSystemGeneralUsage( // GuestPendingDeleteUsage("all.pending_delete_servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), // GuestPendingDeleteUsage("all.pending_delete_servers.any_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), - GuestReadyUsage(userToken, "all.ready_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult), + GuestReadyUsage(ctx, userToken, "all.ready_servers", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem, policyResult), // GuestReadyUsage("all.ready_servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), // GuestReadyUsage("all.ready_servers.any_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), // GuestRunningUsage("all.running_servers.prepaid_pool", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), @@ -322,46 +323,46 @@ func getSystemGeneralUsage( guestRunningUsage, // containerRunningUsage, - IsolatedDeviceUsage(userToken, "", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), + IsolatedDeviceUsage(ctx, userToken, "", rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), // IsolatedDeviceUsage("prepaid_pool", rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv), // IsolatedDeviceUsage("any_pool", rangeObjs, hostTypes, nil, providers, brands, cloudEnv), - WireUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), - NetworkUsage(userToken, "all", rbacscope.ScopeSystem, nil, providers, brands, cloudEnv, rangeObjs, policyResult), + WireUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), + NetworkUsage(ctx, userToken, "all", rbacscope.ScopeSystem, nil, providers, brands, cloudEnv, rangeObjs, policyResult), - EipUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + EipUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - BucketUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + BucketUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - SnapshotUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + SnapshotUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - InstanceSnapshotUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + InstanceSnapshotUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - LoadbalancerUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + LoadbalancerUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - DBInstanceUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + DBInstanceUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - MongoDBUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + MongoDBUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticSearchUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticSearchUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - KafkaUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + KafkaUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticCacheUsage(userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticCacheUsage(ctx, userToken, rbacscope.ScopeSystem, nil, rangeObjs, providers, brands, cloudEnv, policyResult), ) return count, nil } -func getDomainGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) { +func getDomainGeneralUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) { lastWeek := time.Now().Add(-7 * 24 * time.Hour) lastMonth := time.Now().Add(-30 * 24 * time.Hour) - count := GuestNormalUsage(userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult) + count := GuestNormalUsage(ctx, userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult) var pmemTotal float64 var pcpuTotal float64 - hostEnabledUsage := HostEnabledUsage(userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult) + hostEnabledUsage := HostEnabledUsage(ctx, userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult) if !gotypes.IsNil(hostEnabledUsage.Get("domain.enabled_hosts.memory")) { pmemTotal = float64(hostEnabledUsage.Get("domain.enabled_hosts.memory").(int64)) } @@ -369,7 +370,7 @@ func getDomainGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.T pcpuTotal = float64(hostEnabledUsage.Get("domain.enabled_hosts.cpu").(int64)) } - guestRunningUsage := GuestRunningUsage(userToken, "domain.running_servers", rbacscope.ScopeDomain, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult) + guestRunningUsage := GuestRunningUsage(ctx, userToken, "domain.running_servers", rbacscope.ScopeDomain, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult) var runningMem int var runningCpu int if !gotypes.IsNil(guestRunningUsage.Get("domain.running_servers.memory")) { @@ -391,11 +392,11 @@ func getDomainGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.T count.Add("domain.cpu_commit_rate.running", runningCpuCmtRate) count.Include( - VpcUsage(userToken, "domain", providers, brands, cloudEnv, cred, rbacscope.ScopeDomain, rangeObjs, policyResult), + VpcUsage(ctx, userToken, "domain", providers, brands, cloudEnv, cred, rbacscope.ScopeDomain, rangeObjs, policyResult), - DnsZoneUsage(userToken, "domain", cred, rbacscope.ScopeDomain, policyResult), + DnsZoneUsage(ctx, userToken, "domain", cred, rbacscope.ScopeDomain, policyResult), - HostAllUsage(userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), + HostAllUsage(ctx, userToken, "", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), // HostAllUsage("prepaid_pool", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv), // HostAllUsage("any_pool", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, nil, providers, brands, cloudEnv), @@ -403,18 +404,18 @@ func getDomainGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.T // HostEnabledUsage("prepaid_pool", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv), // HostEnabledUsage("any_pool", cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, nil, providers, brands, cloudEnv), - BaremetalUsage(userToken, cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), + BaremetalUsage(ctx, userToken, cred, rbacscope.ScopeDomain, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), - StorageUsage(userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, false, rbacscope.ScopeDomain, cred, policyResult), - StorageUsage(userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeDomain, cred, policyResult), + StorageUsage(ctx, userToken, "", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, false, rbacscope.ScopeDomain, cred, policyResult), + StorageUsage(ctx, userToken, "system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacscope.ScopeDomain, cred, policyResult), // StorageUsage("prepaid_pool", rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false, false, rbacscope.ScopeDomain, cred), // StorageUsage("any_pool", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, false, rbacscope.ScopeDomain, cred), // StorageUsage("any_pool.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, true, rbacscope.ScopeDomain, cred), // StorageUsage("any_pool.pending_delete", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, false, rbacscope.ScopeDomain, cred), // StorageUsage("any_pool.pending_delete.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, true, rbacscope.ScopeDomain, cred), - GuestNormalUsage(userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), - GuestNormalUsage(userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), + GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), + GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), // GuestNormalUsage(getKey(scope, "servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestNormalUsage(getKey(scope, "servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), @@ -423,105 +424,106 @@ func getDomainGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.T // GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestRunningUsage(getKey(scope, "running_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), // GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestReadyUsage(userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), + GuestReadyUsage(ctx, userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), // GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestReadyUsage(getKey(scope, "ready_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - WireUsage(userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), - NetworkUsage(userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult), + WireUsage(ctx, userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), + NetworkUsage(ctx, userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult), - IsolatedDeviceUsage(userToken, "", scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), + IsolatedDeviceUsage(ctx, userToken, "", scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, policyResult), - EipUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + EipUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - BucketUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + BucketUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), // nicsUsage("domain", rangeObjs, hostTypes, providers, brands, cloudEnv, scope, cred), - SnapshotUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + SnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - InstanceSnapshotUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + InstanceSnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - LoadbalancerUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + LoadbalancerUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - DBInstanceUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + DBInstanceUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - MongoDBUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + MongoDBUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticSearchUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticSearchUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - KafkaUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + KafkaUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticCacheUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticCacheUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), ) return count, nil } -func getProjectGeneralUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) { +func getProjectGeneralUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) (Usage, error) { lastWeek := time.Now().Add(-7 * 24 * time.Hour) lastMonth := time.Now().Add(-30 * 24 * time.Hour) - count := GuestNormalUsage(userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult) + count := GuestNormalUsage(ctx, userToken, getKey(scope, "servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult) count.Include( - GuestNormalUsage(userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), - GuestNormalUsage(userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), + GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), + GuestNormalUsage(ctx, userToken, getKey(scope, "servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), // GuestNormalUsage(getKey(scope, "servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestNormalUsage(getKey(scope, "servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestRunningUsage(userToken, getKey(scope, "running_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), + GuestRunningUsage(ctx, userToken, getKey(scope, "running_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), // GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestRunningUsage(getKey(scope, "running_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), - GuestPendingDeleteUsage(userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, nil, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_week"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastWeek, policyResult), + GuestPendingDeleteUsage(ctx, userToken, getKey(scope, "pending_delete_servers.last_month"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, &lastMonth, policyResult), // GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestReadyUsage(userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), + GuestReadyUsage(ctx, userToken, getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, policyResult), // GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), // GuestReadyUsage(getKey(scope, "ready_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - WireUsage(userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), - NetworkUsage(userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult), + WireUsage(ctx, userToken, scope, cred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult), + NetworkUsage(ctx, userToken, getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs, policyResult), - EipUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + EipUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - BucketUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + BucketUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - DisksUsage(userToken, getKey(scope, "disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, false, policyResult), - DisksUsage(userToken, getKey(scope, "disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, true, policyResult), - DisksUsage(userToken, getKey(scope, "pending_delete_disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, false, policyResult), - DisksUsage(userToken, getKey(scope, "pending_delete_disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, true, policyResult), + DisksUsage(ctx, userToken, getKey(scope, "disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, false, policyResult), + DisksUsage(ctx, userToken, getKey(scope, "disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, false, true, policyResult), + DisksUsage(ctx, userToken, getKey(scope, "pending_delete_disks"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, false, policyResult), + DisksUsage(ctx, userToken, getKey(scope, "pending_delete_disks.system"), rangeObjs, hostTypes, nil, providers, brands, cloudEnv, scope, cred, true, true, policyResult), // nicsUsage("", rangeObjs, hostTypes, providers, brands, cloudEnv, scope, cred), - SnapshotUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + SnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - InstanceSnapshotUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + InstanceSnapshotUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - LoadbalancerUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + LoadbalancerUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - DBInstanceUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + DBInstanceUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - MongoDBUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + MongoDBUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticSearchUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticSearchUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - KafkaUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + KafkaUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), - ElasticCacheUsage(userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), + ElasticCacheUsage(ctx, userToken, scope, cred, rangeObjs, providers, brands, cloudEnv, policyResult), ) return count, nil } func ReportGeneralUsage( + ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, @@ -538,7 +540,7 @@ func ReportGeneralUsage( // if scope == rbacscope.ScopeSystem || isOwner { if scope == rbacscope.ScopeSystem { - count, err = getSystemGeneralUsage(userToken, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) + count, err = getSystemGeneralUsage(ctx, userToken, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem, policyResult) if err != nil { return } @@ -546,7 +548,7 @@ func ReportGeneralUsage( // if scope.HigherEqual(rbacscope.ScopeDomain) && len(userCred.GetProjectDomainId()) > 0 { if scope == rbacscope.ScopeDomain && len(userCred.GetProjectDomainId()) > 0 { - commonUsage, err := getDomainGeneralUsage(userToken, rbacscope.ScopeDomain, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult) + commonUsage, err := getDomainGeneralUsage(ctx, userToken, rbacscope.ScopeDomain, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult) if err == nil { count.Include(commonUsage) } @@ -554,7 +556,7 @@ func ReportGeneralUsage( // if scope.HigherEqual(rbacscope.ScopeProject) && len(userCred.GetProjectId()) > 0 { if scope == rbacscope.ScopeProject && len(userCred.GetProjectId()) > 0 { - commonUsage, err := getProjectGeneralUsage(userToken, rbacscope.ScopeProject, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult) + commonUsage, err := getProjectGeneralUsage(ctx, userToken, rbacscope.ScopeProject, userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, policyResult) if err == nil { count.Include(commonUsage) } @@ -592,7 +594,7 @@ func ZoneUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []str return count } -func VpcUsage(userToken mcclient.TokenCredential, prefix string, providers []string, brands []string, cloudEnv string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage { +func VpcUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, providers []string, brands []string, cloudEnv string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.VpcManager, scope) @@ -610,7 +612,7 @@ func VpcUsage(userToken mcclient.TokenCredential, prefix string, providers []str q = q.Equals("domain_id", ownerId.GetProjectDomainId()) } - q = db.ObjectIdQueryWithPolicyResult(q, models.VpcManager, results) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, models.VpcManager, results) key := "vpcs" if len(prefix) > 0 { @@ -620,7 +622,7 @@ func VpcUsage(userToken mcclient.TokenCredential, prefix string, providers []str return count } -func DnsZoneUsage(userToken mcclient.TokenCredential, prefix string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, policyResult rbacutils.SPolicyResult) Usage { +func DnsZoneUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.DnsZoneManager, scope) @@ -634,7 +636,7 @@ func DnsZoneUsage(userToken mcclient.TokenCredential, prefix string, ownerId mcc q = q.Equals("domain_id", ownerId.GetProjectDomainId()) } - q = db.ObjectIdQueryWithPolicyResult(q, models.DnsZoneManager, results) + q = db.ObjectIdQueryWithPolicyResult(ctx, q, models.DnsZoneManager, results) key := "dns_zones" if len(prefix) > 0 { @@ -645,6 +647,7 @@ func DnsZoneUsage(userToken mcclient.TokenCredential, prefix string, ownerId mcc } func StorageUsage( + ctx context.Context, userToken mcclient.TokenCredential, prefix string, rangeObjs []db.IStandaloneModel, @@ -667,6 +670,7 @@ func StorageUsage( } count := make(map[string]interface{}) result := models.StorageManager.TotalCapacity( + ctx, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, @@ -715,6 +719,7 @@ func StorageUsage( count[fmt.Sprintf("%s.commit_rate", sPrefix)] = storageCmtRate result = models.StorageManager.TotalCapacity( + ctx, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, @@ -760,6 +765,7 @@ func StorageUsage( } func DisksUsage( + ctx context.Context, userToken mcclient.TokenCredential, dPrefix string, rangeObjs []db.IStandaloneModel, @@ -780,7 +786,7 @@ func DisksUsage( return count } - result := models.StorageManager.TotalCapacity(rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, pendingDeleted, includeSystem, false, results) + result := models.StorageManager.TotalCapacity(ctx, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, pendingDeleted, includeSystem, false, results) count[dPrefix] = result.CapacityUsed count[fmt.Sprintf("%s.storage", dPrefix)] = result.Capacity count[fmt.Sprintf("%s.storage.virtual", dPrefix)] = result.CapacityVirtual @@ -798,7 +804,7 @@ func DisksUsage( return count } -func WireUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func WireUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.WireManager, scope) @@ -807,7 +813,7 @@ func WireUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, u return count } - result := models.WireManager.TotalCount(rangeObjs, hostTypes, providers, brands, cloudEnv, scope, userCred, results) + result := models.WireManager.TotalCount(ctx, rangeObjs, hostTypes, providers, brands, cloudEnv, scope, userCred, results) count[getKey(scope, "wires")] = result.WiresCount - result.EmulatedWiresCount count[getKey(scope, "networks")] = result.NetCount // include nics for pending_deleted guests @@ -849,7 +855,7 @@ func prefixKey(prefix string, key string) string { } } -func NetworkUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, providers []string, brands []string, cloudEnv string, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage { +func NetworkUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, providers []string, brands []string, cloudEnv string, rangeObjs []db.IStandaloneModel, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.NetworkManager, scope) @@ -858,7 +864,7 @@ func NetworkUsage(userToken mcclient.TokenCredential, prefix string, scope rbacs return count } - ret := models.NetworkManager.TotalPortCount(scope, userCred, providers, brands, cloudEnv, rangeObjs, results) + ret := models.NetworkManager.TotalPortCount(ctx, scope, userCred, providers, brands, cloudEnv, rangeObjs, results) for k, v := range ret { if len(k) > 0 { count[prefixKey(prefix, fmt.Sprintf("ports.%s", k))] = v.Count @@ -871,34 +877,35 @@ func NetworkUsage(userToken mcclient.TokenCredential, prefix string, scope rbacs return count } -func HostAllUsage(userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, +func HostAllUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { prefix := getSysKey(scope, "hosts") if len(pref) > 0 { prefix = fmt.Sprintf("%s.%s", prefix, pref) } - return hostUsage(userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.None, tristate.False, policyResult) + return hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.None, tristate.False, policyResult) } -func HostEnabledUsage(userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, +func HostEnabledUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { prefix := getSysKey(scope, "enabled_hosts") if len(pref) > 0 { prefix = fmt.Sprintf("%s.%s", prefix, pref) } - return hostUsage(userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.True, tristate.False, policyResult) + return hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.True, tristate.False, policyResult) } -func BaremetalUsage(userToken mcclient.TokenCredential, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, +func BaremetalUsage(ctx context.Context, userToken mcclient.TokenCredential, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { prefix := getSysKey(scope, "baremetals") - count := hostUsage(userToken, userCred, scope, prefix, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, tristate.None, tristate.True, policyResult) + count := hostUsage(ctx, userToken, userCred, scope, prefix, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, tristate.None, tristate.True, policyResult) delete(count, fmt.Sprintf("%s.memory.virtual", prefix)) delete(count, fmt.Sprintf("%s.cpu.virtual", prefix)) return count } func hostUsage( + ctx context.Context, userToken mcclient.TokenCredential, userCred mcclient.IIdentityProvider, scope rbacscope.TRbacScope, prefix string, rangeObjs []db.IStandaloneModel, hostTypes []string, @@ -914,7 +921,7 @@ func hostUsage( return count } - result := models.HostManager.TotalCount(userCred, scope, rangeObjs, "", "", hostTypes, resourceTypes, providers, brands, cloudEnv, enabled, isBaremetal, results) + result := models.HostManager.TotalCount(ctx, userCred, scope, rangeObjs, "", "", hostTypes, resourceTypes, providers, brands, cloudEnv, enabled, isBaremetal, results) count[prefix] = result.Count count[fmt.Sprintf("%s.any_pool", prefix)] = result.Count count[fmt.Sprintf("%s.memory", prefix)] = result.Memory @@ -931,33 +938,34 @@ func hostUsage( return count } -func GuestNormalUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, +func GuestNormalUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage { - return guestUsage(userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, includeSystem, since, policyResult) + return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, includeSystem, since, policyResult) } -func GuestPendingDeleteUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, +func GuestPendingDeleteUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult) Usage { - return guestUsage(userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, includeSystem, since, policyResult) + return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, includeSystem, since, policyResult) } -func GuestRunningUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, +func GuestRunningUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult, ) Usage { - return guestUsage(userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, includeSystem, nil, policyResult) + return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, includeSystem, nil, policyResult) } -func GuestReadyUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, +func GuestReadyUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool, policyResult rbacutils.SPolicyResult) Usage { - return guestUsage(userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, includeSystem, nil, policyResult) + return guestUsage(ctx, userToken, prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, includeSystem, nil, policyResult) } func guestHypervisorsUsage( + ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, @@ -981,7 +989,7 @@ func guestHypervisorsUsage( log.Debugf("guestHypervisorsUsage policyResults %s results %s", policyResult.String(), results.String()) // temporarily hide system resources // XXX needs more work later - guest := models.GuestManager.TotalCount(scope, ownerId, rangeObjs, status, hypervisors, + guest := models.GuestManager.TotalCount(ctx, scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, results, ) @@ -1006,14 +1014,14 @@ func guestHypervisorsUsage( return count } -func guestUsage(userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, +func guestUsage(ctx context.Context, userToken mcclient.TokenCredential, prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, status []string, pendingDelete, includeSystem bool, since *time.Time, policyResult rbacutils.SPolicyResult, ) Usage { hypervisors := sets.NewString(api.HYPERVISORS...) hypervisors.Delete(api.HYPERVISOR_CONTAINER, api.HYPERVISOR_BAREMETAL) - return guestHypervisorsUsage(userToken, prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, includeSystem, since, policyResult) + return guestHypervisorsUsage(ctx, userToken, prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, includeSystem, since, policyResult) } /*func containerUsage(prefix string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -1022,7 +1030,7 @@ func guestUsage(userToken mcclient.TokenCredential, prefix string, scope rbacsco return guestHypervisorsUsage(prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, hypervisors, false) }*/ -func IsolatedDeviceUsage(userToken mcclient.TokenCredential, pref string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostType []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func IsolatedDeviceUsage(ctx context.Context, userToken mcclient.TokenCredential, pref string, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostType []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { prefix := "isolated_devices" if len(pref) > 0 { prefix = fmt.Sprintf("%s.%s", prefix, pref) @@ -1033,7 +1041,7 @@ func IsolatedDeviceUsage(userToken mcclient.TokenCredential, pref string, scope if results.Result.IsDeny() { return count } - ret, _ := models.IsolatedDeviceManager.TotalCount(scope, userCred, hostType, resourceTypes, providers, brands, cloudEnv, rangeObjs, results) + ret, _ := models.IsolatedDeviceManager.TotalCount(ctx, scope, userCred, hostType, resourceTypes, providers, brands, cloudEnv, rangeObjs, results) count[prefix] = ret.Devices return count } @@ -1077,7 +1085,7 @@ func _getKey(scope rbacscope.TRbacScope, key string, includeSystem bool) string } } -func EipUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func EipUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.ElasticipManager, scope) results = results.Merge(policyResult) @@ -1085,7 +1093,7 @@ func EipUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ow // deny return count } - eipUsage := models.ElasticipManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + eipUsage := models.ElasticipManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "eip")] = eipUsage.Total() count[getKey(scope, "eip.public_ip")] = eipUsage.PublicIPCount count[getKey(scope, "eip.public_ip.bandwidth.mb")] = eipUsage.PublicIpBandwidth @@ -1097,7 +1105,7 @@ func EipUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ow return count } -func BucketUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func BucketUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.BucketManager, scope) @@ -1107,7 +1115,7 @@ func BucketUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, return count } - bucketUsage := models.BucketManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + bucketUsage := models.BucketManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "buckets")] = bucketUsage.Buckets count[getKey(scope, "bucket_objects")] = bucketUsage.Objects count[getKey(scope, "bucket_bytes")] = bucketUsage.Bytes @@ -1116,7 +1124,7 @@ func BucketUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, return count } -func SnapshotUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func SnapshotUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.SnapshotManager, scope) results = results.Merge(policyResult) @@ -1124,12 +1132,12 @@ func SnapshotUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScop // deny return count } - cnt, _ := models.TotalSnapshotCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.TotalSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "snapshot")] = cnt return count } -func InstanceSnapshotUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func InstanceSnapshotUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.InstanceSnapshotManager, scope) results = results.Merge(policyResult) @@ -1137,12 +1145,12 @@ func InstanceSnapshotUsage(userToken mcclient.TokenCredential, scope rbacscope.T // deny return count } - cnt, _ := models.TotalInstanceSnapshotCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.TotalInstanceSnapshotCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "instance_snapshot")] = cnt return count } -func LoadbalancerUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func LoadbalancerUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.LoadbalancerManager, scope) results = results.Merge(policyResult) @@ -1150,12 +1158,12 @@ func LoadbalancerUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbac // deny return count } - cnt, _ := models.LoadbalancerManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.LoadbalancerManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "loadbalancer")] = cnt return count } -func DBInstanceUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func DBInstanceUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.DBInstanceManager, scope) results = results.Merge(policyResult) @@ -1163,7 +1171,7 @@ func DBInstanceUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacSc // deny return count } - cnt, _ := models.DBInstanceManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.DBInstanceManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "rds")] = cnt.TotalRdsCount count[getKey(scope, "rds.cpu")] = cnt.TotalCpuCount count[getKey(scope, "rds.memory")] = cnt.TotalMemSizeMb @@ -1173,7 +1181,7 @@ func DBInstanceUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacSc return count } -func MongoDBUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func MongoDBUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.MongoDBManager, scope) results = results.Merge(policyResult) @@ -1181,14 +1189,14 @@ func MongoDBUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope // deny return count } - cnt, _ := models.MongoDBManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.MongoDBManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "mongodb")] = cnt.TotalMongodbCount count[getKey(scope, "mongodb.cpu")] = cnt.TotalCpuCount count[getKey(scope, "mongodb.memory")] = cnt.TotalMemSizeMb return count } -func ElasticSearchUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func ElasticSearchUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.ElasticSearchManager, scope) results = results.Merge(policyResult) @@ -1196,14 +1204,14 @@ func ElasticSearchUsage(userToken mcclient.TokenCredential, scope rbacscope.TRba // deny return count } - cnt, _ := models.ElasticSearchManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.ElasticSearchManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "es")] = cnt.TotalEsCount count[getKey(scope, "es.cpu")] = cnt.TotalCpuCount count[getKey(scope, "es.memory")] = cnt.TotalMemSizeGb * 1024 return count } -func KafkaUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func KafkaUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.KafkaManager, scope) results = results.Merge(policyResult) @@ -1211,13 +1219,13 @@ func KafkaUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, // deny return count } - cnt, _ := models.KafkaManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.KafkaManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "kafka")] = cnt.TotalKafkaCount count[getKey(scope, "kafka.disk")] = cnt.TotalDiskSizeGb return count } -func ElasticCacheUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { +func ElasticCacheUsage(ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userToken, models.ElasticcacheManager, scope) results = results.Merge(policyResult) @@ -1225,7 +1233,7 @@ func ElasticCacheUsage(userToken mcclient.TokenCredential, scope rbacscope.TRbac // deny return count } - cnt, _ := models.ElasticcacheManager.TotalCount(scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) + cnt, _ := models.ElasticcacheManager.TotalCount(ctx, scope, ownerId, rangeObjs, providers, brands, cloudEnv, results) count[getKey(scope, "cache")] = cnt return count } diff --git a/pkg/compute/usages/history.go b/pkg/compute/usages/history.go index 3b21bfacb6..0fd3147ff4 100644 --- a/pkg/compute/usages/history.go +++ b/pkg/compute/usages/history.go @@ -135,7 +135,7 @@ func addHistoryHandler(prefix, rangeObjKey string, hf appsrv.FilterHandler, app app.AddHandler2("GET", prefix, ahf, nil, name, nil) } -type objHistoryUsageFunc func(mcclient.TokenCredential, rbacscope.TRbacScope, mcclient.IIdentityProvider, *TimeRange, bool, rbacutils.SPolicyResult) (Usage, error) +type objHistoryUsageFunc func(context.Context, mcclient.TokenCredential, rbacscope.TRbacScope, mcclient.IIdentityProvider, *TimeRange, bool, rbacutils.SPolicyResult) (Usage, error) func historyRangeObjHandler( manager db.IStandaloneModelManager, @@ -170,7 +170,7 @@ func historyRangeObjHandler( return } } - usage, err := reporter(userCred, scope, ownerId, timeRange, includeSystem, result) + usage, err := reporter(ctx, userCred, scope, ownerId, timeRange, includeSystem, result) if err != nil { httperrors.GeneralServerError(ctx, w, err) return @@ -181,6 +181,7 @@ func historyRangeObjHandler( } func ReportGeneralHistoryUsage( + ctx context.Context, userToken mcclient.TokenCredential, scope rbacscope.TRbacScope, userCred mcclient.IIdentityProvider, @@ -191,20 +192,20 @@ func ReportGeneralHistoryUsage( count = make(map[string]interface{}) if scope == rbacscope.ScopeSystem { - count = HistoryUsage(userToken, timeRange, rbacscope.ScopeSystem, userCred, includeSystem, policyResult) + count = HistoryUsage(ctx, userToken, timeRange, rbacscope.ScopeSystem, userCred, includeSystem, policyResult) } if scope == rbacscope.ScopeDomain && len(userCred.GetProjectDomainId()) > 0 { - count = HistoryUsage(userToken, timeRange, rbacscope.ScopeDomain, userCred, includeSystem, policyResult) + count = HistoryUsage(ctx, userToken, timeRange, rbacscope.ScopeDomain, userCred, includeSystem, policyResult) } if scope == rbacscope.ScopeProject && len(userCred.GetProjectId()) > 0 { - count = HistoryUsage(userToken, timeRange, rbacscope.ScopeProject, userCred, includeSystem, policyResult) + count = HistoryUsage(ctx, userToken, timeRange, rbacscope.ScopeProject, userCred, includeSystem, policyResult) } return } -func HistoryUsage(userCred mcclient.TokenCredential, timeRange *TimeRange, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, includeSystem bool, policyResult rbacutils.SPolicyResult) Usage { +func HistoryUsage(ctx context.Context, userCred mcclient.TokenCredential, timeRange *TimeRange, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, includeSystem bool, policyResult rbacutils.SPolicyResult) Usage { count := make(map[string]interface{}) results := db.UsagePolicyCheck(userCred, models.GuestManager, scope) results = results.Merge(policyResult) @@ -242,11 +243,11 @@ func HistoryUsage(userCred mcclient.TokenCredential, timeRange *TimeRange, scope models.BucketManager, models.MongoDBManager, } { - usage, _ := historyUsage(manager, scope, ownerId, timeRange, format, includeSystem, false, results) + usage, _ := historyUsage(ctx, manager, scope, ownerId, timeRange, format, includeSystem, false, results) count[manager.Keyword()] = usage } - usage, _ := historyUsage(models.HostManager, scope, ownerId, timeRange, format, includeSystem, true, results) + usage, _ := historyUsage(ctx, models.HostManager, scope, ownerId, timeRange, format, includeSystem, true, results) count["baremetal"] = usage return count @@ -258,6 +259,7 @@ type SHistoryUsage struct { } func historyUsage( + ctx context.Context, manager db.IModelManager, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, @@ -321,7 +323,7 @@ func historyUsage( gq = gq.Filter(sqlchemy.Equals(gq.Field("tenant_id"), ownerId.GetProjectId())) } - gq = db.ObjectIdQueryWithPolicyResult(gq, manager, policyResult) + gq = db.ObjectIdQueryWithPolicyResult(ctx, gq, manager, policyResult) if _, ok := manager.(db.IVirtualModelManager); ok && !includeSystem { gq = gq.Filter(sqlchemy.OR( diff --git a/pkg/dns/dns.go b/pkg/dns/dns.go index 70c65aa321..62258f48c6 100644 --- a/pkg/dns/dns.go +++ b/pkg/dns/dns.go @@ -295,7 +295,8 @@ func (r *SRegionDNS) getHostIpWithName(req *recordRequest) string { } name := req.QueryName() name = strings.TrimSuffix(name, ".") - host, _ := models.HostManager.FetchByName(nil, name) + ctx := context.Background() + host, _ := models.HostManager.FetchByName(ctx, nil, name) if host == nil { return "" } diff --git a/pkg/image/models/image_guest.go b/pkg/image/models/image_guest.go index d54f6b4bf1..5e3d619597 100644 --- a/pkg/image/models/image_guest.go +++ b/pkg/image/models/image_guest.go @@ -96,7 +96,7 @@ func (manager *SGuestImageManager) ValidateCreateData(ctx context.Context, userC errs := make([]error, 0) for i := range input.Images { if len(input.Images[i].Id) > 0 { - imgObj, err := ImageManager.FetchByIdOrName(userCred, input.Images[i].Id) + imgObj, err := ImageManager.FetchByIdOrName(ctx, userCred, input.Images[i].Id) if err != nil { if errors.Cause(err) == sql.ErrNoRows { errs = append(errs, httperrors.NewResourceNotFoundError2(ImageManager.Keyword(), input.Images[i].Id)) @@ -709,9 +709,9 @@ func (manager *SGuestImageManager) QueryDistinctExtraField(q *sqlchemy.SQuery, f return q, httperrors.ErrNotFound } -func (manager *SGuestImageManager) Usage(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, prefix string, policyResult rbacutils.SPolicyResult) map[string]int64 { +func (manager *SGuestImageManager) Usage(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, prefix string, policyResult rbacutils.SPolicyResult) map[string]int64 { usages := make(map[string]int64) - count := ImageManager.count(scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.False, false, tristate.True, policyResult) + count := ImageManager.count(ctx, scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.False, false, tristate.True, policyResult) expandUsageCount(usages, prefix, "guest_image", "", count) sq := manager.Query() switch scope { diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 6ba7d80f4d..11e7265188 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -929,9 +929,9 @@ type SImageUsage struct { Size int64 } -func (manager *SImageManager) count(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, status string, isISO tristate.TriState, pendingDelete bool, guestImage tristate.TriState, policyResult rbacutils.SPolicyResult) map[string]SImageUsage { +func (manager *SImageManager) count(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, status string, isISO tristate.TriState, pendingDelete bool, guestImage tristate.TriState, policyResult rbacutils.SPolicyResult) map[string]SImageUsage { sq := manager.Query("id") - sq = db.ObjectIdQueryWithPolicyResult(sq, manager, policyResult) + sq = db.ObjectIdQueryWithPolicyResult(ctx, sq, manager, policyResult) switch scope { case rbacscope.ScopeSystem: // do nothing @@ -1007,19 +1007,19 @@ func expandUsageCount(usages map[string]int64, prefix, imgType, state string, co } } -func (manager *SImageManager) Usage(scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, prefix string, policyResult rbacutils.SPolicyResult) map[string]int64 { +func (manager *SImageManager) Usage(ctx context.Context, scope rbacscope.TRbacScope, ownerId mcclient.IIdentityProvider, prefix string, policyResult rbacutils.SPolicyResult) map[string]int64 { usages := make(map[string]int64) - count := manager.count(scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.False, false, tristate.False, policyResult) + count := manager.count(ctx, scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.False, false, tristate.False, policyResult) expandUsageCount(usages, prefix, "img", "", count) - count = manager.count(scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.True, false, tristate.False, policyResult) + count = manager.count(ctx, scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.True, false, tristate.False, policyResult) expandUsageCount(usages, prefix, string(qemuimgfmt.ISO), "", count) - count = manager.count(scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.None, false, tristate.False, policyResult) + count = manager.count(ctx, scope, ownerId, api.IMAGE_STATUS_ACTIVE, tristate.None, false, tristate.False, policyResult) expandUsageCount(usages, prefix, "imgiso", "", count) - count = manager.count(scope, ownerId, "", tristate.False, true, tristate.False, policyResult) + count = manager.count(ctx, scope, ownerId, "", tristate.False, true, tristate.False, policyResult) expandUsageCount(usages, prefix, "img", "pending_delete", count) - count = manager.count(scope, ownerId, "", tristate.True, true, tristate.False, policyResult) + count = manager.count(ctx, scope, ownerId, "", tristate.True, true, tristate.False, policyResult) expandUsageCount(usages, prefix, string(qemuimgfmt.ISO), "pending_delete", count) - count = manager.count(scope, ownerId, "", tristate.None, true, tristate.False, policyResult) + count = manager.count(ctx, scope, ownerId, "", tristate.None, true, tristate.False, policyResult) expandUsageCount(usages, prefix, "imgiso", "pending_delete", count) return usages } diff --git a/pkg/image/models/quotas.go b/pkg/image/models/quotas.go index 28fe84805f..2e087a9d2d 100644 --- a/pkg/image/models/quotas.go +++ b/pkg/image/models/quotas.go @@ -136,7 +136,7 @@ func (self *SQuota) FetchUsage(ctx context.Context) error { isISO = tristate.None } - count := ImageManager.count(scope, ownerId, "", isISO, false, tristate.None, rbacutils.SPolicyResult{}) + count := ImageManager.count(ctx, scope, ownerId, "", isISO, false, tristate.None, rbacutils.SPolicyResult{}) self.Image = int(count["total"].Count) return nil } diff --git a/pkg/image/usages/handler.go b/pkg/image/usages/handler.go index 23c48137a0..0efc5d2c5f 100644 --- a/pkg/image/usages/handler.go +++ b/pkg/image/usages/handler.go @@ -52,23 +52,23 @@ func ReportGeneralUsage(ctx context.Context, w http.ResponseWriter, r *http.Requ usages := jsonutils.NewDict() if scope == rbacscope.ScopeSystem { - adminUsage := models.ImageManager.Usage(rbacscope.ScopeSystem, ownerId, "all", result) + adminUsage := models.ImageManager.Usage(ctx, rbacscope.ScopeSystem, ownerId, "all", result) usages.Update(jsonutils.Marshal(adminUsage)) - adminUsage = models.GuestImageManager.Usage(rbacscope.ScopeSystem, ownerId, "all", result) + adminUsage = models.GuestImageManager.Usage(ctx, rbacscope.ScopeSystem, ownerId, "all", result) usages.Update(jsonutils.Marshal(adminUsage)) } if scope.HigherEqual(rbacscope.ScopeDomain) { - domainUsage := models.ImageManager.Usage(rbacscope.ScopeDomain, ownerId, "domain", result) + domainUsage := models.ImageManager.Usage(ctx, rbacscope.ScopeDomain, ownerId, "domain", result) usages.Update(jsonutils.Marshal(domainUsage)) - domainUsage = models.GuestImageManager.Usage(rbacscope.ScopeDomain, ownerId, "domain", result) + domainUsage = models.GuestImageManager.Usage(ctx, rbacscope.ScopeDomain, ownerId, "domain", result) usages.Update(jsonutils.Marshal(domainUsage)) } if scope.HigherEqual(rbacscope.ScopeProject) { - projectUsage := models.ImageManager.Usage(rbacscope.ScopeProject, ownerId, "", result) + projectUsage := models.ImageManager.Usage(ctx, rbacscope.ScopeProject, ownerId, "", result) usages.Update(jsonutils.Marshal(projectUsage)) - projectUsage = models.GuestImageManager.Usage(rbacscope.ScopeProject, ownerId, "", result) + projectUsage = models.GuestImageManager.Usage(ctx, rbacscope.ScopeProject, ownerId, "", result) usages.Update(jsonutils.Marshal(projectUsage)) } diff --git a/pkg/keystone/driver/cas/class.go b/pkg/keystone/driver/cas/class.go index fdd840c441..256f927bc7 100644 --- a/pkg/keystone/driver/cas/class.go +++ b/pkg/keystone/driver/cas/class.go @@ -81,7 +81,7 @@ func (self *SCASDriverClass) ValidateConfig(ctx context.Context, userCred mcclie if !unique { return tconf, errors.Wrapf(httperrors.ErrDuplicateResource, "cas_server_url %s has been registered", conf.CASServerURL) } - conf.SIdpAttributeOptions, err = utils.ValidateConfig(conf.SIdpAttributeOptions, userCred) + conf.SIdpAttributeOptions, err = utils.ValidateConfig(ctx, conf.SIdpAttributeOptions, userCred) if err != nil { return tconf, errors.Wrap(err, "ValidateConfig") } diff --git a/pkg/keystone/driver/oidc/class.go b/pkg/keystone/driver/oidc/class.go index 9cee064d65..e4cbf1a6d6 100644 --- a/pkg/keystone/driver/oidc/class.go +++ b/pkg/keystone/driver/oidc/class.go @@ -106,7 +106,7 @@ func (self *SOIDCDriverClass) ValidateConfig(ctx context.Context, userCred mccli if !unique { return tconf, errors.Wrapf(httperrors.ErrDuplicateResource, "client_id %s has been registered", conf.ClientId) } - conf.SIdpAttributeOptions, err = utils.ValidateConfig(conf.SIdpAttributeOptions, userCred) + conf.SIdpAttributeOptions, err = utils.ValidateConfig(ctx, conf.SIdpAttributeOptions, userCred) if err != nil { return tconf, errors.Wrap(err, "ValidateConfig") } diff --git a/pkg/keystone/driver/saml/class.go b/pkg/keystone/driver/saml/class.go index ba15c9c3b0..891854e698 100644 --- a/pkg/keystone/driver/saml/class.go +++ b/pkg/keystone/driver/saml/class.go @@ -117,7 +117,7 @@ func (self *SSAMLDriverClass) ValidateConfig(ctx context.Context, userCred mccli return tconf, errors.Wrapf(httperrors.ErrDuplicateResource, "entity_id %s has been registered", conf.EntityId) } } - conf.SIdpAttributeOptions, err = utils.ValidateConfig(conf.SIdpAttributeOptions, userCred) + conf.SIdpAttributeOptions, err = utils.ValidateConfig(ctx, conf.SIdpAttributeOptions, userCred) if err != nil { return tconf, errors.Wrap(err, "ValidateConfig") } diff --git a/pkg/keystone/driver/utils/validate.go b/pkg/keystone/driver/utils/validate.go index ef61776c48..cc21116e92 100644 --- a/pkg/keystone/driver/utils/validate.go +++ b/pkg/keystone/driver/utils/validate.go @@ -15,6 +15,7 @@ package utils import ( + "context" "database/sql" "yunion.io/x/pkg/errors" @@ -25,9 +26,9 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" ) -func ValidateConfig(conf api.SIdpAttributeOptions, userCred mcclient.TokenCredential) (api.SIdpAttributeOptions, error) { +func ValidateConfig(ctx context.Context, conf api.SIdpAttributeOptions, userCred mcclient.TokenCredential) (api.SIdpAttributeOptions, error) { if len(conf.DefaultProjectId) > 0 { - obj, err := models.ProjectManager.FetchByIdOrName(userCred, conf.DefaultProjectId) + obj, err := models.ProjectManager.FetchByIdOrName(ctx, userCred, conf.DefaultProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return conf, errors.Wrapf(httperrors.ErrResourceNotFound, "project %s", conf.DefaultProjectId) @@ -38,7 +39,7 @@ func ValidateConfig(conf api.SIdpAttributeOptions, userCred mcclient.TokenCreden conf.DefaultProjectId = obj.GetId() } if len(conf.DefaultRoleId) > 0 { - obj, err := models.RoleManager.FetchByIdOrName(userCred, conf.DefaultRoleId) + obj, err := models.RoleManager.FetchByIdOrName(ctx, userCred, conf.DefaultRoleId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return conf, errors.Wrapf(httperrors.ErrResourceNotFound, "role %s", conf.DefaultRoleId) diff --git a/pkg/keystone/models/credentials.go b/pkg/keystone/models/credentials.go index ef3cf7b665..e563307fd1 100644 --- a/pkg/keystone/models/credentials.go +++ b/pkg/keystone/models/credentials.go @@ -235,7 +235,7 @@ func (manager *SCredentialManager) ResourceScope() rbacscope.TRbacScope { return rbacscope.ScopeUser } -func (manager *SCredentialManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SCredentialManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if owner != nil { if scope == rbacscope.ScopeUser { if len(owner.GetUserId()) > 0 { @@ -262,7 +262,7 @@ func (manager *SCredentialManager) FetchOwnerId(ctx context.Context, data jsonut domainOwner = &db.SOwnerId{DomainId: api.DEFAULT_DOMAIN_ID} } data.(*jsonutils.JSONDict).Remove(key) - usrObj, err := UserManager.FetchByIdOrName(domainOwner, userStr) + usrObj, err := UserManager.FetchByIdOrName(ctx, domainOwner, userStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2("user", userStr) diff --git a/pkg/keystone/models/domains.go b/pkg/keystone/models/domains.go index 29b20a1e8e..48e80688fc 100644 --- a/pkg/keystone/models/domains.go +++ b/pkg/keystone/models/domains.go @@ -222,7 +222,7 @@ func (manager *SDomainManager) ListItemFilter( if !query.PolicyDomainTags.IsEmpty() { policyFilters := tagutils.STagFilters{} policyFilters.AddFilters(query.PolicyDomainTags) - q = db.ObjectIdQueryWithTagFilters(q, "id", "domain", policyFilters) + q = db.ObjectIdQueryWithTagFilters(ctx, q, "id", "domain", policyFilters) } if query.Enabled != nil { @@ -234,7 +234,7 @@ func (manager *SDomainManager) ListItemFilter( } if len(query.IdpId) > 0 { - idpObj, err := IdentityProviderManager.FetchByIdOrName(userCred, query.IdpId) + idpObj, err := IdentityProviderManager.FetchByIdOrName(ctx, userCred, query.IdpId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", IdentityProviderManager.Keyword(), query.IdpId) @@ -603,9 +603,9 @@ func (manager *SDomainManager) FilterBySystemAttributes(q *sqlchemy.SQuery, user return q } -func (manager *SDomainManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SDomainManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if userCred != nil && scope != rbacscope.ScopeSystem { q = q.Equals("id", owner.GetProjectDomainId()) } - return manager.SStandaloneResourceBaseManager.FilterByOwner(q, man, userCred, owner, scope) + return manager.SStandaloneResourceBaseManager.FilterByOwner(ctx, q, man, userCred, owner, scope) } diff --git a/pkg/keystone/models/endpoints.go b/pkg/keystone/models/endpoints.go index 623609a687..8805aa6c7a 100644 --- a/pkg/keystone/models/endpoints.go +++ b/pkg/keystone/models/endpoints.go @@ -483,7 +483,7 @@ func (manager *SEndpointManager) ValidateCreateData( } serviceStr := jsonutils.GetAnyString(data, []string{"service_id", "service"}) if len(serviceStr) > 0 { - servObj, err := ServiceManager.FetchByIdOrName(userCred, serviceStr) + servObj, err := ServiceManager.FetchByIdOrName(ctx, userCred, serviceStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ServiceManager.Keyword(), serviceStr) @@ -500,7 +500,7 @@ func (manager *SEndpointManager) ValidateCreateData( return nil, httperrors.NewInputParameterError("missing input field service/service_id") } if certId, _ := data.GetString("service_certificate"); len(certId) > 0 { - cert, err := ServiceCertificateManager.FetchByIdOrName(userCred, certId) + cert, err := ServiceCertificateManager.FetchByIdOrName(ctx, userCred, certId) if err == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("not found cert %s", certId) } @@ -629,7 +629,7 @@ func (endpoint *SEndpoint) ValidateUpdateData( query jsonutils.JSONObject, data *jsonutils.JSONDict, ) (*jsonutils.JSONDict, error) { if certId, _ := data.GetString("service_certificate"); len(certId) > 0 { - cert, err := ServiceCertificateManager.FetchByIdOrName(userCred, certId) + cert, err := ServiceCertificateManager.FetchByIdOrName(ctx, userCred, certId) if err == sql.ErrNoRows { return nil, httperrors.NewNotFoundError("not found cert %s", certId) } diff --git a/pkg/keystone/models/groupresource.go b/pkg/keystone/models/groupresource.go index 91895f3d33..a1e072373e 100644 --- a/pkg/keystone/models/groupresource.go +++ b/pkg/keystone/models/groupresource.go @@ -54,7 +54,7 @@ func (manager *SGroupResourceBaseManager) ListItemFilter( } else { ownerId = userCred } - groupObj, err := GroupManager.FetchByIdOrName(ownerId, query.GroupId) + groupObj, err := GroupManager.FetchByIdOrName(ctx, ownerId, query.GroupId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GroupManager.Keyword(), query.GroupId) diff --git a/pkg/keystone/models/groups.go b/pkg/keystone/models/groups.go index 48ced161d0..5c468a416a 100644 --- a/pkg/keystone/models/groups.go +++ b/pkg/keystone/models/groups.go @@ -123,7 +123,7 @@ func (manager *SGroupManager) ListItemFilter( } if len(query.IdpId) > 0 { - idpObj, err := IdentityProviderManager.FetchByIdOrName(userCred, query.IdpId) + idpObj, err := IdentityProviderManager.FetchByIdOrName(ctx, userCred, query.IdpId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", IdentityProviderManager.Keyword(), query.IdpId) @@ -368,14 +368,14 @@ func (group *SGroup) PerformLeave( return nil, nil } -func (manager *SGroupManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SGroupManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if owner != nil && scope == rbacscope.ScopeProject { // if user has project level privilege, returns all groups in user's project subq := AssignmentManager.fetchProjectGroupIdsQuery(owner.GetProjectId()) q = q.In("id", subq.SubQuery()) return q } - return manager.SIdentityBaseResourceManager.FilterByOwner(q, man, userCred, owner, scope) + return manager.SIdentityBaseResourceManager.FilterByOwner(ctx, q, man, userCred, owner, scope) } func (group *SGroup) GetUsages() []db.IUsage { @@ -443,7 +443,7 @@ func (group *SGroup) PerformAddUsers( ) (jsonutils.JSONObject, error) { users := make([]*SUser, 0) for _, uid := range input.UserIds { - usr, err := UserManager.FetchByIdOrName(userCred, uid) + usr, err := UserManager.FetchByIdOrName(ctx, userCred, uid) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "user %s", uid) @@ -471,7 +471,7 @@ func (group *SGroup) PerformRemoveUsers( ) (jsonutils.JSONObject, error) { users := make([]*SUser, 0) for _, uid := range input.UserIds { - usr, err := UserManager.FetchByIdOrName(userCred, uid) + usr, err := UserManager.FetchByIdOrName(ctx, userCred, uid) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "user %s", uid) diff --git a/pkg/keystone/models/identitybase.go b/pkg/keystone/models/identitybase.go index 4bf85c586c..709ee2bbc5 100644 --- a/pkg/keystone/models/identitybase.go +++ b/pkg/keystone/models/identitybase.go @@ -131,12 +131,12 @@ func (manager *SIdentityBaseResourceManager) GetIIdentityModelManager() IIdentit return manager.GetVirtualObject().(IIdentityModelManager) } -func (manager *SIdentityBaseResourceManager) FetchByName(userCred mcclient.IIdentityProvider, idStr string) (db.IModel, error) { - return db.FetchByName(manager.GetIIdentityModelManager(), userCred, idStr) +func (manager *SIdentityBaseResourceManager) FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (db.IModel, error) { + return db.FetchByName(ctx, manager.GetIIdentityModelManager(), userCred, idStr) } -func (manager *SIdentityBaseResourceManager) FetchByIdOrName(userCred mcclient.IIdentityProvider, idStr string) (db.IModel, error) { - return db.FetchByIdOrName(manager.GetIIdentityModelManager(), userCred, idStr) +func (manager *SIdentityBaseResourceManager) FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (db.IModel, error) { + return db.FetchByIdOrName(ctx, manager.GetIIdentityModelManager(), userCred, idStr) } func (manager *SIdentityBaseResourceManager) FilterBySystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacscope.TRbacScope) *sqlchemy.SQuery { diff --git a/pkg/keystone/models/organization_nodes.go b/pkg/keystone/models/organization_nodes.go index 21bd81de36..2127e60cb9 100644 --- a/pkg/keystone/models/organization_nodes.go +++ b/pkg/keystone/models/organization_nodes.go @@ -288,7 +288,7 @@ func (manager *SOrganizationNodeManager) ListItemFilter( } if len(query.OrgId) > 0 { - orgObj, err := OrganizationManager.FetchByIdOrName(userCred, query.OrgId) + orgObj, err := OrganizationManager.FetchByIdOrName(ctx, userCred, query.OrgId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(OrganizationManager.Keyword(), query.OrgId) diff --git a/pkg/keystone/models/policies.go b/pkg/keystone/models/policies.go index 4e1fe5cc5f..ca8b0a900a 100644 --- a/pkg/keystone/models/policies.go +++ b/pkg/keystone/models/policies.go @@ -608,7 +608,7 @@ func (manager *SPolicyManager) ListItemFilter( return nil, errors.Wrap(err, "SSharableBaseResourceManager.ListItemFilter") } if len(query.RoleId) > 0 { - _, err := validators.ValidateModel(userCred, RoleManager, &query.RoleId) + _, err := validators.ValidateModel(ctx, userCred, RoleManager, &query.RoleId) if err != nil { return nil, err } @@ -704,8 +704,8 @@ func (policy *SPolicy) GetUsages() []db.IUsage { } } -func (manager *SPolicyManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { - q = db.SharableManagerFilterByOwner(manager, q, userCred, owner, scope) +func (manager *SPolicyManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { + q = db.SharableManagerFilterByOwner(ctx, manager, q, userCred, owner, scope) return q } @@ -791,7 +791,7 @@ func (policy *SPolicy) PerformBindRole(ctx context.Context, userCred mcclient.To prefList = append(prefList, pref) } if len(input.ProjectId) > 0 { - proj, err := ProjectManager.FetchByIdOrName(userCred, input.ProjectId) + proj, err := ProjectManager.FetchByIdOrName(ctx, userCred, input.ProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrNotFound, "%s %s", ProjectManager.Keyword(), input.ProjectId) @@ -804,7 +804,7 @@ func (policy *SPolicy) PerformBindRole(ctx context.Context, userCred mcclient.To if len(input.RoleId) == 0 { return nil, errors.Wrap(httperrors.ErrInputParameter, "missing role_id") } - role, err := RoleManager.FetchByIdOrName(userCred, input.RoleId) + role, err := RoleManager.FetchByIdOrName(ctx, userCred, input.RoleId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrNotFound, "%s %s", RoleManager.Keyword(), input.RoleId) diff --git a/pkg/keystone/models/projectresource.go b/pkg/keystone/models/projectresource.go index cca8b2e700..7efcf3fe5f 100644 --- a/pkg/keystone/models/projectresource.go +++ b/pkg/keystone/models/projectresource.go @@ -55,7 +55,7 @@ func (manager *SProjectResourceBaseManager) ListItemFilter( } else { ownerId = userCred } - projObj, err := ProjectManager.FetchByIdOrName(ownerId, query.ProjectId) + projObj, err := ProjectManager.FetchByIdOrName(ctx, ownerId, query.ProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ProjectManager.Keyword(), query.ProjectId) diff --git a/pkg/keystone/models/projects.go b/pkg/keystone/models/projects.go index 2827e78b21..ec2ab90fcc 100644 --- a/pkg/keystone/models/projects.go +++ b/pkg/keystone/models/projects.go @@ -261,7 +261,7 @@ func (manager *SProjectManager) ListItemFilter( if !query.PolicyProjectTags.IsEmpty() { policyFilters := tagutils.STagFilters{} policyFilters.AddFilters(query.PolicyProjectTags) - q = db.ObjectIdQueryWithTagFilters(q, "id", "project", policyFilters) + q = db.ObjectIdQueryWithTagFilters(ctx, q, "id", "project", policyFilters) } userStr := query.UserId @@ -313,7 +313,7 @@ func (manager *SProjectManager) ListItemFilter( } if len(query.IdpId) > 0 { - idpObj, err := IdentityProviderManager.FetchByIdOrName(userCred, query.IdpId) + idpObj, err := IdentityProviderManager.FetchByIdOrName(ctx, userCred, query.IdpId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(IdentityProviderManager.Keyword(), query.IdpId) @@ -654,7 +654,7 @@ func (project *SProject) PerformJoin( roleIds := make([]string, 0) roles := make([]*SRole, 0) for i := range input.Roles { - obj, err := RoleManager.FetchByIdOrName(userCred, input.Roles[i]) + obj, err := RoleManager.FetchByIdOrName(ctx, userCred, input.Roles[i]) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), input.Roles[i]) @@ -674,7 +674,7 @@ func (project *SProject) PerformJoin( users := make([]*SUser, 0) for i := range input.Users { - obj, err := UserManager.FetchByIdOrName(userCred, input.Users[i]) + obj, err := UserManager.FetchByIdOrName(ctx, userCred, input.Users[i]) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(UserManager.Keyword(), input.Users[i]) @@ -686,7 +686,7 @@ func (project *SProject) PerformJoin( } groups := make([]*SGroup, 0) for i := range input.Groups { - obj, err := GroupManager.FetchByIdOrName(userCred, input.Groups[i]) + obj, err := GroupManager.FetchByIdOrName(ctx, userCred, input.Groups[i]) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GroupManager.Keyword(), input.Groups[i]) @@ -730,7 +730,7 @@ func (project *SProject) PerformLeave( } for i := range input.UserRoles { - userObj, err := UserManager.FetchByIdOrName(userCred, input.UserRoles[i].User) + userObj, err := UserManager.FetchByIdOrName(ctx, userCred, input.UserRoles[i].User) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(UserManager.Keyword(), input.UserRoles[i].User) @@ -738,7 +738,7 @@ func (project *SProject) PerformLeave( return nil, httperrors.NewGeneralError(err) } } - roleObj, err := RoleManager.FetchByIdOrName(userCred, input.UserRoles[i].Role) + roleObj, err := RoleManager.FetchByIdOrName(ctx, userCred, input.UserRoles[i].Role) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), input.UserRoles[i].Role) @@ -752,7 +752,7 @@ func (project *SProject) PerformLeave( } } for i := range input.GroupRoles { - groupObj, err := GroupManager.FetchByIdOrName(userCred, input.GroupRoles[i].Group) + groupObj, err := GroupManager.FetchByIdOrName(ctx, userCred, input.GroupRoles[i].Group) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GroupManager.Keyword(), input.GroupRoles[i].Group) @@ -760,7 +760,7 @@ func (project *SProject) PerformLeave( return nil, httperrors.NewGeneralError(err) } } - roleObj, err := RoleManager.FetchByIdOrName(userCred, input.GroupRoles[i].Role) + roleObj, err := RoleManager.FetchByIdOrName(ctx, userCred, input.GroupRoles[i].Role) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), input.GroupRoles[i].Role) @@ -828,7 +828,7 @@ func (project *SProject) PerformSetAdmin( var role *SRole { - obj, err := UserManager.FetchByIdOrName(userCred, input.UserId) + obj, err := UserManager.FetchByIdOrName(ctx, userCred, input.UserId) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(UserManager.Keyword(), input.UserId) @@ -840,7 +840,7 @@ func (project *SProject) PerformSetAdmin( } { - obj, err := RoleManager.FetchByIdOrName(userCred, options.Options.ProjectAdminRole) + obj, err := RoleManager.FetchByIdOrName(ctx, userCred, options.Options.ProjectAdminRole) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), options.Options.ProjectAdminRole) @@ -916,11 +916,11 @@ func (project *SProject) matchOrganizationNodes() (*api.SProjectOrganization, er return projOrg, nil } -func (manager *SProjectManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SProjectManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if userCred != nil && scope != rbacscope.ScopeSystem && scope != rbacscope.ScopeDomain { q = q.Equals("id", owner.GetProjectId()) } - return manager.SIdentityBaseResourceManager.FilterByOwner(q, man, userCred, owner, scope) + return manager.SIdentityBaseResourceManager.FilterByOwner(ctx, q, man, userCred, owner, scope) } func (manager *SProjectManager) GetSystemProject() (*SProject, error) { diff --git a/pkg/keystone/models/regionresource.go b/pkg/keystone/models/regionresource.go index 242492e592..b336cec7dd 100644 --- a/pkg/keystone/models/regionresource.go +++ b/pkg/keystone/models/regionresource.go @@ -35,7 +35,7 @@ func (manager *SRegionResourceBaseManager) ListItemFilter( query api.RegionFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.RegionId) > 0 { - regionObj, err := RegionManager.FetchByIdOrName(userCred, query.RegionId) + regionObj, err := RegionManager.FetchByIdOrName(ctx, userCred, query.RegionId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RegionManager.Keyword(), query.RegionId) diff --git a/pkg/keystone/models/rolepolicies.go b/pkg/keystone/models/rolepolicies.go index a9097bc40c..c5e6486f24 100644 --- a/pkg/keystone/models/rolepolicies.go +++ b/pkg/keystone/models/rolepolicies.go @@ -176,9 +176,9 @@ func (manager *SRolePolicyManager) NamespaceScope() rbacscope.TRbacScope { return PolicyManager.NamespaceScope() } -func (manager *SRolePolicyManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SRolePolicyManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { policyQ := PolicyManager.Query() - policyQ = PolicyManager.FilterByOwner(policyQ, PolicyManager, userCred, owner, scope) + policyQ = PolicyManager.FilterByOwner(ctx, policyQ, PolicyManager, userCred, owner, scope) subq := policyQ.SubQuery() q = q.Join(subq, sqlchemy.Equals(q.Field("policy_id"), subq.Field("id"))) return q @@ -197,7 +197,7 @@ func (manager *SRolePolicyManager) ListItemFilter( } if len(query.RoleIds) > 0 { for i := range query.RoleIds { - role, err := RoleManager.FetchByIdOrName(userCred, query.RoleIds[i]) + role, err := RoleManager.FetchByIdOrName(ctx, userCred, query.RoleIds[i]) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", RoleManager.Keyword(), query.RoleIds[i]) @@ -213,7 +213,7 @@ func (manager *SRolePolicyManager) ListItemFilter( )) } if len(query.ProjectId) > 0 { - project, err := ProjectManager.FetchByIdOrName(userCred, query.ProjectId) + project, err := ProjectManager.FetchByIdOrName(ctx, userCred, query.ProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ProjectManager.Keyword(), query.ProjectId) @@ -227,7 +227,7 @@ func (manager *SRolePolicyManager) ListItemFilter( )) } if len(query.PolicyId) > 0 { - policy, err := PolicyManager.FetchByIdOrName(userCred, query.PolicyId) + policy, err := PolicyManager.FetchByIdOrName(ctx, userCred, query.PolicyId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", PolicyManager.Keyword(), query.PolicyId) @@ -396,11 +396,11 @@ func (manager *SRolePolicyManager) getMatchPolicyIds2(isGuest bool, roleIds []st return policyIds, nil } -func appendPolicy(names map[rbacscope.TRbacScope][]string, policies rbacutils.TPolicyGroup, scope rbacscope.TRbacScope, policyName string, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { +func appendPolicy(ctx context.Context, names map[rbacscope.TRbacScope][]string, policies rbacutils.TPolicyGroup, scope rbacscope.TRbacScope, policyName string, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { if utils.IsInStringArray(policyName, names[scope]) { return names, policies, nil } - policyObj, err := PolicyManager.FetchByName(nil, policyName) + policyObj, err := PolicyManager.FetchByName(ctx, nil, policyName) if err != nil && errors.Cause(err) != sql.ErrNoRows { return nil, nil, errors.Wrapf(err, "FetchPolicy %s", policyName) } @@ -457,8 +457,9 @@ func (p sUserProjectPair) GetTokenString() string { return p.userId } -func (manager *SRolePolicyManager) GetMatchPolicyGroupByInput(userId, projectId string, tm time.Time, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { +func (manager *SRolePolicyManager) GetMatchPolicyGroupByInput(ctx context.Context, userId, projectId string, tm time.Time, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { return manager.GetMatchPolicyGroupByCred( + ctx, sUserProjectPair{ userId: userId, projectId: projectId, @@ -467,7 +468,7 @@ func (manager *SRolePolicyManager) GetMatchPolicyGroupByInput(userId, projectId ) } -func (manager *SRolePolicyManager) GetMatchPolicyGroupByCred(userCred api.IRbacIdentityWithUserId, tm time.Time, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { +func (manager *SRolePolicyManager) GetMatchPolicyGroupByCred(ctx context.Context, userCred api.IRbacIdentityWithUserId, tm time.Time, nameOnly bool) (map[rbacscope.TRbacScope][]string, rbacutils.TPolicyGroup, error) { names, policies, err := manager.GetMatchPolicyGroup(userCred, tm, nameOnly) if err != nil { return nil, nil, errors.Wrap(err, "GetMatchPolicyGroup") @@ -500,7 +501,7 @@ func (manager *SRolePolicyManager) GetMatchPolicyGroupByCred(userCred api.IRbacI if len(consolePolicyName) == 0 { continue } - names, policies, err = appendPolicy(names, policies, scope, consolePolicyName, nameOnly) + names, policies, err = appendPolicy(ctx, names, policies, scope, consolePolicyName, nameOnly) if err != nil { return nil, nil, errors.Wrapf(err, "appendConsolePolicy %s %s", scope, consolePolicyName) } diff --git a/pkg/keystone/models/roleresource.go b/pkg/keystone/models/roleresource.go index 5f15dbe788..3d6ddd9a44 100644 --- a/pkg/keystone/models/roleresource.go +++ b/pkg/keystone/models/roleresource.go @@ -54,7 +54,7 @@ func (manager *SRoleResourceBaseManager) ListItemFilter( } else { ownerId = userCred } - roleObj, err := RoleManager.FetchByIdOrName(ownerId, query.RoleId) + roleObj, err := RoleManager.FetchByIdOrName(ctx, ownerId, query.RoleId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), query.RoleId) diff --git a/pkg/keystone/models/roles.go b/pkg/keystone/models/roles.go index eddfc0e19b..be48843cd0 100644 --- a/pkg/keystone/models/roles.go +++ b/pkg/keystone/models/roles.go @@ -524,8 +524,8 @@ func (role *SRole) PostCreate( } } -func (manager *SRoleManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { - return db.SharableManagerFilterByOwner(manager, q, userCred, owner, scope) +func (manager *SRoleManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { + return db.SharableManagerFilterByOwner(ctx, manager, q, userCred, owner, scope) } func (role *SRole) GetSharableTargetDomainIds() []string { @@ -556,7 +556,7 @@ func (role *SRole) PerformSetPolicies(ctx context.Context, userCred mcclient.Tok normalInputIds := stringutils2.NewSortedStrings(nil) normalInputs := make(map[string]sRolePerformAddPolicyInput, len(input.Policies)) for i := range input.Policies { - normalInput, err := role.normalizeRoleAddPolicyInput(userCred, input.Policies[i]) + normalInput, err := role.normalizeRoleAddPolicyInput(ctx, userCred, input.Policies[i]) if err != nil { return nil, errors.Wrapf(err, "normalizeRoleAddPolicyInput at %d", i) } @@ -648,7 +648,7 @@ func (s sRolePerformAddPolicyInput) getId() string { return fmt.Sprintf("%s:%s:%s", s.roleId, s.projectId, s.policyId) } -func (role *SRole) normalizeRoleAddPolicyInput(userCred mcclient.TokenCredential, input api.RolePerformAddPolicyInput) (sRolePerformAddPolicyInput, error) { +func (role *SRole) normalizeRoleAddPolicyInput(ctx context.Context, userCred mcclient.TokenCredential, input api.RolePerformAddPolicyInput) (sRolePerformAddPolicyInput, error) { output := sRolePerformAddPolicyInput{} prefList := make([]netutils.IPV4Prefix, 0) for _, ipStr := range input.Ips { @@ -659,7 +659,7 @@ func (role *SRole) normalizeRoleAddPolicyInput(userCred mcclient.TokenCredential prefList = append(prefList, pref) } if len(input.ProjectId) > 0 { - proj, err := ProjectManager.FetchByIdOrName(userCred, input.ProjectId) + proj, err := ProjectManager.FetchByIdOrName(ctx, userCred, input.ProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return output, errors.Wrapf(httperrors.ErrNotFound, "%s %s", ProjectManager.Keyword(), input.ProjectId) @@ -672,7 +672,7 @@ func (role *SRole) normalizeRoleAddPolicyInput(userCred mcclient.TokenCredential if len(input.PolicyId) == 0 { return output, errors.Wrap(httperrors.ErrInputParameter, "missing policy_id") } - policy, err := PolicyManager.FetchByIdOrName(userCred, input.PolicyId) + policy, err := PolicyManager.FetchByIdOrName(ctx, userCred, input.PolicyId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return output, errors.Wrapf(httperrors.ErrNotFound, "%s %s", PolicyManager.Keyword(), input.PolicyId) @@ -689,7 +689,7 @@ func (role *SRole) normalizeRoleAddPolicyInput(userCred mcclient.TokenCredential } func (role *SRole) PerformAddPolicy(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.RolePerformAddPolicyInput) (jsonutils.JSONObject, error) { - normalInput, err := role.normalizeRoleAddPolicyInput(userCred, input) + normalInput, err := role.normalizeRoleAddPolicyInput(ctx, userCred, input) if err != nil { return nil, errors.Wrap(err, "normalizeRoleAddPolicyInput") } @@ -721,7 +721,7 @@ func (role *SRole) PerformAddPolicy(ctx context.Context, userCred mcclient.Token func (role *SRole) PerformRemovePolicy(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.RolePerformRemovePolicyInput) (jsonutils.JSONObject, error) { if len(input.ProjectId) > 0 { - proj, err := ProjectManager.FetchByIdOrName(userCred, input.ProjectId) + proj, err := ProjectManager.FetchByIdOrName(ctx, userCred, input.ProjectId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrNotFound, "%s %s", ProjectManager.Keyword(), input.ProjectId) @@ -734,7 +734,7 @@ func (role *SRole) PerformRemovePolicy(ctx context.Context, userCred mcclient.To if len(input.PolicyId) == 0 { return nil, errors.Wrap(httperrors.ErrInputParameter, "missing policy_id") } - policy, err := PolicyManager.FetchByIdOrName(userCred, input.PolicyId) + policy, err := PolicyManager.FetchByIdOrName(ctx, userCred, input.PolicyId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrNotFound, "%s %s", PolicyManager.Keyword(), input.PolicyId) diff --git a/pkg/keystone/models/servicecertificates.go b/pkg/keystone/models/servicecertificates.go index cc32e26d75..639832cbc1 100644 --- a/pkg/keystone/models/servicecertificates.go +++ b/pkg/keystone/models/servicecertificates.go @@ -56,20 +56,20 @@ type SServiceCertificate struct { func (man *SServiceCertificateManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { v := validators.NewCertKeyValidator("certificate", "private_key") - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } data = v.UpdateCertKeyInfo(ctx, data) if caCert, _ := data.GetString("ca_certificate"); len(caCert) > 0 { vc := validators.NewCertificateValidator("ca_certificate") - if err := vc.Validate(data); err != nil { + if err := vc.Validate(ctx, data); err != nil { return nil, err } } if caPkey, _ := data.GetString("ca_private_key"); len(caPkey) > 0 { vp := validators.NewPrivateKeyValidator("ca_private_key") - if err := vp.Validate(data); err != nil { + if err := vp.Validate(ctx, data); err != nil { return nil, err } } @@ -92,20 +92,20 @@ func (cert *SServiceCertificate) ValidateUpdateData( query jsonutils.JSONObject, data *jsonutils.JSONDict, ) (*jsonutils.JSONDict, error) { v := validators.NewCertKeyValidator("certificate", "private_key") - if err := v.Validate(data); err != nil { + if err := v.Validate(ctx, data); err != nil { return nil, err } data = v.UpdateCertKeyInfo(ctx, data) if caCert, _ := data.GetString("ca_certificate"); len(caCert) > 0 { vc := validators.NewCertificateValidator("ca_certificate") - if err := vc.Validate(data); err != nil { + if err := vc.Validate(ctx, data); err != nil { return nil, err } } if caPkey, _ := data.GetString("ca_private_key"); len(caPkey) > 0 { vp := validators.NewPrivateKeyValidator("ca_private_key") - if err := vp.Validate(data); err != nil { + if err := vp.Validate(ctx, data); err != nil { return nil, err } } diff --git a/pkg/keystone/models/serviceresource.go b/pkg/keystone/models/serviceresource.go index b2309d25df..c52933a081 100644 --- a/pkg/keystone/models/serviceresource.go +++ b/pkg/keystone/models/serviceresource.go @@ -35,7 +35,7 @@ func (manager *SServiceResourceBaseManager) ListItemFilter( query api.ServiceFilterListInput, ) (*sqlchemy.SQuery, error) { if len(query.ServiceId) > 0 { - serviceObj, err := ServiceManager.FetchByIdOrName(userCred, query.ServiceId) + serviceObj, err := ServiceManager.FetchByIdOrName(ctx, userCred, query.ServiceId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ServiceManager.Keyword(), query.ServiceId) diff --git a/pkg/keystone/models/usages.go b/pkg/keystone/models/usages.go index 0699962705..28760311e2 100644 --- a/pkg/keystone/models/usages.go +++ b/pkg/keystone/models/usages.go @@ -15,6 +15,8 @@ package models import ( + "context" + "yunion.io/x/sqlchemy" api "yunion.io/x/onecloud/pkg/apis/identity" @@ -23,16 +25,16 @@ import ( "yunion.io/x/onecloud/pkg/util/tagutils" ) -func Usage(result rbacutils.SPolicyResult) map[string]int { +func Usage(ctx context.Context, result rbacutils.SPolicyResult) map[string]int { results := make(map[string]int) dq := DomainManager.Query() - dq = db.ObjectIdQueryWithPolicyResult(dq, DomainManager, result) + dq = db.ObjectIdQueryWithPolicyResult(ctx, dq, DomainManager, result) domCnt, _ := dq.IsTrue("is_domain").NotEquals("id", api.KeystoneDomainRoot).CountWithError() results["domains"] = domCnt pq := ProjectManager.Query() - pq = db.ObjectIdQueryWithPolicyResult(pq, ProjectManager, result) + pq = db.ObjectIdQueryWithPolicyResult(ctx, pq, ProjectManager, result) // 根据项目标签过滤 if result.ProjectTags.Len() > 0 { @@ -60,22 +62,22 @@ func Usage(result rbacutils.SPolicyResult) map[string]int { results["projects"] = projCnt rq := RoleManager.Query() - rq = db.ObjectIdQueryWithPolicyResult(rq, RoleManager, result) + rq = db.ObjectIdQueryWithPolicyResult(ctx, rq, RoleManager, result) roleCnt, _ := rq.CountWithError() results["roles"] = roleCnt uq := UserManager.Query() - uq = db.ObjectIdQueryWithPolicyResult(uq, UserManager, result) + uq = db.ObjectIdQueryWithPolicyResult(ctx, uq, UserManager, result) usrCnt, _ := uq.CountWithError() results["users"] = usrCnt gq := GroupManager.Query() - gq = db.ObjectIdQueryWithPolicyResult(gq, GroupManager, result) + gq = db.ObjectIdQueryWithPolicyResult(ctx, gq, GroupManager, result) grpCnt, _ := gq.CountWithError() results["groups"] = grpCnt pcq := PolicyManager.Query() - pcq = db.ObjectIdQueryWithPolicyResult(pcq, PolicyManager, result) + pcq = db.ObjectIdQueryWithPolicyResult(ctx, pcq, PolicyManager, result) policy, _ := pcq.CountWithError() results["policies"] = policy diff --git a/pkg/keystone/models/userresource.go b/pkg/keystone/models/userresource.go index 06f9bf8e93..6cba1d348c 100644 --- a/pkg/keystone/models/userresource.go +++ b/pkg/keystone/models/userresource.go @@ -54,7 +54,7 @@ func (manager *SUserResourceBaseManager) ListItemFilter( } else { ownerId = userCred } - userObj, err := UserManager.FetchByIdOrName(ownerId, query.UserId) + userObj, err := UserManager.FetchByIdOrName(ctx, ownerId, query.UserId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(UserManager.Keyword(), query.UserId) diff --git a/pkg/keystone/models/users.go b/pkg/keystone/models/users.go index dae35a6a41..cc5207a1d6 100644 --- a/pkg/keystone/models/users.go +++ b/pkg/keystone/models/users.go @@ -378,7 +378,7 @@ func (manager *SUserManager) ListItemFilter( groupStr := query.GroupId if len(groupStr) > 0 { - groupObj, err := GroupManager.FetchByIdOrName(userCred, groupStr) + groupObj, err := GroupManager.FetchByIdOrName(ctx, userCred, groupStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(GroupManager.Keyword(), groupStr) @@ -392,7 +392,7 @@ func (manager *SUserManager) ListItemFilter( projectStr := query.ProjectId if len(projectStr) > 0 { - project, err := ProjectManager.FetchByIdOrName(userCred, projectStr) + project, err := ProjectManager.FetchByIdOrName(ctx, userCred, projectStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ProjectManager.Keyword(), projectStr) @@ -406,7 +406,7 @@ func (manager *SUserManager) ListItemFilter( roleStr := query.RoleId if len(roleStr) > 0 { - role, err := RoleManager.FetchByIdOrName(userCred, roleStr) + role, err := RoleManager.FetchByIdOrName(ctx, userCred, roleStr) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), roleStr) @@ -417,7 +417,7 @@ func (manager *SUserManager) ListItemFilter( subq := AssignmentManager.Query("actor_id").Equals("role_id", role.GetId()).Equals("type", api.AssignmentUserProject).Distinct() if len(query.RoleAssignmentDomainId) > 0 { - domain, err := DomainManager.FetchByIdOrName(userCred, query.RoleAssignmentDomainId) + domain, err := DomainManager.FetchByIdOrName(ctx, userCred, query.RoleAssignmentDomainId) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(DomainManager.Keyword(), query.RoleAssignmentDomainId) @@ -429,7 +429,7 @@ func (manager *SUserManager) ListItemFilter( subq = subq.In("target_id", projects.Query()) } if len(query.RoleAssignmentProjectId) > 0 { - project, err := ProjectManager.FetchByIdOrName(userCred, query.RoleAssignmentProjectId) + project, err := ProjectManager.FetchByIdOrName(ctx, userCred, query.RoleAssignmentProjectId) if err != nil { if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(ProjectManager.Keyword(), query.RoleAssignmentProjectId) @@ -443,7 +443,7 @@ func (manager *SUserManager) ListItemFilter( } if len(query.IdpId) > 0 { - idpObj, err := IdentityProviderManager.FetchByIdOrName(userCred, query.IdpId) + idpObj, err := IdentityProviderManager.FetchByIdOrName(ctx, userCred, query.IdpId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", IdentityProviderManager.Keyword(), query.IdpId) @@ -1241,7 +1241,7 @@ func joinProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mc roleIds := make([]string, 0) for i := range input.Roles { - obj, err := RoleManager.FetchByIdOrName(userCred, input.Roles[i]) + obj, err := RoleManager.FetchByIdOrName(ctx, userCred, input.Roles[i]) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), input.Roles[i]) @@ -1255,7 +1255,7 @@ func joinProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mc } for i := range input.Projects { - obj, err := ProjectManager.FetchByIdOrName(userCred, input.Projects[i]) + obj, err := ProjectManager.FetchByIdOrName(ctx, userCred, input.Projects[i]) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(ProjectManager.Keyword(), input.Projects[i]) @@ -1303,7 +1303,7 @@ func (user *SUser) PerformLeave( func leaveProjects(ident db.IModel, isUser bool, ctx context.Context, userCred mcclient.TokenCredential, input api.SLeaveProjectsInput) error { for i := range input.ProjectRoles { - projObj, err := ProjectManager.FetchByIdOrName(userCred, input.ProjectRoles[i].Project) + projObj, err := ProjectManager.FetchByIdOrName(ctx, userCred, input.ProjectRoles[i].Project) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(ProjectManager.Keyword(), input.ProjectRoles[i].Project) @@ -1311,7 +1311,7 @@ func leaveProjects(ident db.IModel, isUser bool, ctx context.Context, userCred m return httperrors.NewGeneralError(err) } } - roleObj, err := RoleManager.FetchByIdOrName(userCred, input.ProjectRoles[i].Role) + roleObj, err := RoleManager.FetchByIdOrName(ctx, userCred, input.ProjectRoles[i].Role) if err != nil { if err == sql.ErrNoRows { return httperrors.NewResourceNotFoundError2(RoleManager.Keyword(), input.ProjectRoles[i].Role) @@ -1349,7 +1349,7 @@ func (manager *SUserManager) LockUser(uid string, reason string) error { return nil } -func (manager *SUserManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SUserManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { log.Debugf("owner: %s scope %s", jsonutils.Marshal(owner), scope) if owner != nil && scope == rbacscope.ScopeProject { // if user has project level privilege, returns all users in user's project @@ -1357,7 +1357,7 @@ func (manager *SUserManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOw q = q.In("id", subq.SubQuery()) return q } - return manager.SEnabledIdentityBaseResourceManager.FilterByOwner(q, man, userCred, owner, scope) + return manager.SEnabledIdentityBaseResourceManager.FilterByOwner(ctx, q, man, userCred, owner, scope) } func (user *SUser) GetUsages() []db.IUsage { diff --git a/pkg/keystone/service/localpolicy.go b/pkg/keystone/service/localpolicy.go index 0bb9f3d078..f9c6babdd6 100644 --- a/pkg/keystone/service/localpolicy.go +++ b/pkg/keystone/service/localpolicy.go @@ -25,7 +25,7 @@ import ( ) func localPolicyFetcher(ctx context.Context, token mcclient.TokenCredential) (*mcclient.SFetchMatchPoliciesOutput, error) { - names, groups, err := models.RolePolicyManager.GetMatchPolicyGroupByCred(token, time.Now(), false) + names, groups, err := models.RolePolicyManager.GetMatchPolicyGroupByCred(ctx, token, time.Now(), false) if err != nil { return nil, errors.Wrap(err, "GetMatchPolicyGroup") } diff --git a/pkg/keystone/service/override.go b/pkg/keystone/service/override.go index 7fca476e9e..0351d088fb 100644 --- a/pkg/keystone/service/override.go +++ b/pkg/keystone/service/override.go @@ -49,7 +49,7 @@ func keystoneProjectFetcher(ctx context.Context, idstr string, domainId string) } func keystoneDomainFetcher(ctx context.Context, idstr string) (*db.STenant, error) { - domainObj, err := models.DomainManager.FetchByIdOrName(nil, idstr) + domainObj, err := models.DomainManager.FetchByIdOrName(ctx, nil, idstr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "domain %s", idstr) @@ -116,7 +116,7 @@ func keystoneDomainQuery(fields ...string) *sqlchemy.SQuery { } func keystoneUserFetcher(ctx context.Context, idstr string) (*db.SUser, error) { - userObj, err := models.UserManager.FetchByIdOrName(nil, idstr) + userObj, err := models.UserManager.FetchByIdOrName(ctx, nil, idstr) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "user %s", idstr) diff --git a/pkg/keystone/tokens/policy.go b/pkg/keystone/tokens/policy.go index 58e78749a9..ca6cf42e07 100644 --- a/pkg/keystone/tokens/policy.go +++ b/pkg/keystone/tokens/policy.go @@ -32,7 +32,7 @@ import ( func fetchTokenPolicies(ctx context.Context, w http.ResponseWriter, r *http.Request) { token := policy.FetchUserCredential(ctx) - names, group, err := models.RolePolicyManager.GetMatchPolicyGroupByCred(token, time.Now(), false) + names, group, err := models.RolePolicyManager.GetMatchPolicyGroupByCred(ctx, token, time.Now(), false) if err != nil { httperrors.GeneralServerError(ctx, w, err) return @@ -71,7 +71,7 @@ func doCheckPolicies(ctx context.Context, input mcclient.SCheckPoliciesInput) (* if policy.PolicyManager.Allow(rbacscope.ScopeSystem, adminToken, api.SERVICE_TYPE, "tokens", "perform", "check_policies").Result.IsDeny() { return nil, httperrors.NewForbiddenError("%s not allow to check policies", adminToken.GetUserName()) } - names, group, err := models.RolePolicyManager.GetMatchPolicyGroupByInput(input.UserId, input.ProjectId, time.Now(), false) + names, group, err := models.RolePolicyManager.GetMatchPolicyGroupByInput(ctx, input.UserId, input.ProjectId, time.Now(), false) if err != nil { return nil, errors.Wrap(err, "GetMatchPolicyGroupByInput") } diff --git a/pkg/keystone/usages/handler.go b/pkg/keystone/usages/handler.go index a0aab1deeb..2b68c94d15 100644 --- a/pkg/keystone/usages/handler.go +++ b/pkg/keystone/usages/handler.go @@ -63,7 +63,7 @@ func ReportGeneralUsage(ctx context.Context, w http.ResponseWriter, r *http.Requ var adminUsage map[string]int // var projectUsage map[string]int64 if isAdmin { - adminUsage = models.Usage(result) + adminUsage = models.Usage(ctx, result) } /*isProject := false diff --git a/pkg/monitor/models/alertrecord.go b/pkg/monitor/models/alertrecord.go index 205b7406d2..62d8b906a5 100644 --- a/pkg/monitor/models/alertrecord.go +++ b/pkg/monitor/models/alertrecord.go @@ -405,7 +405,7 @@ func (manager *SAlertRecordManager) getNowAlertingRecord(ctx context.Context, us input monitor.AlertRecordListInput) ([]SAlertRecord, error) { //now := time.Now() //startTime := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 1, now.Location()) - ownerId, err := manager.FetchOwnerId(context.Background(), jsonutils.Marshal(&input)) + ownerId, err := manager.FetchOwnerId(ctx, jsonutils.Marshal(&input)) if err != nil { return nil, errors.Wrap(err, "FetchOwnerId error") } @@ -413,7 +413,7 @@ func (manager *SAlertRecordManager) getNowAlertingRecord(ctx context.Context, us ownerId = userCred } query := manager.Query() - query = manager.FilterByOwner(query, manager, userCred, ownerId, rbacscope.String2Scope(input.Scope)) + query = manager.FilterByOwner(ctx, query, manager, userCred, ownerId, rbacscope.String2Scope(input.Scope)) //query = query.GE("created_at", startTime.UTC().Format(timeutils.MysqlTimeFormat)) query = query.Equals("state", monitor.AlertStateAlerting) query = query.IsNotNull("res_type").IsNotEmpty("res_type").Desc("created_at") @@ -424,7 +424,7 @@ func (manager *SAlertRecordManager) getNowAlertingRecord(ctx context.Context, us alertsQuery := CommonAlertManager.Query("id").Equals("state", monitor.AlertStateAlerting).IsTrue("enabled"). IsNull("used_by") - alertsQuery = CommonAlertManager.FilterByOwner(alertsQuery, CommonAlertManager, userCred, userCred, rbacscope.String2Scope(input.Scope)) + alertsQuery = CommonAlertManager.FilterByOwner(ctx, alertsQuery, CommonAlertManager, userCred, userCred, rbacscope.String2Scope(input.Scope)) alerts := make([]SCommonAlert, 0) records := make([]SAlertRecord, 0) err = db.FetchModelObjects(CommonAlertManager, alertsQuery, &alerts) diff --git a/pkg/monitor/models/alertresource_alert.go b/pkg/monitor/models/alertresource_alert.go index e6024c0654..c91a9ce7ef 100644 --- a/pkg/monitor/models/alertresource_alert.go +++ b/pkg/monitor/models/alertresource_alert.go @@ -117,7 +117,7 @@ func (m *SAlertResourceAlertManager) ListItemFilter(ctx context.Context, q *sqlc } if len(input.AlertResourceId) > 0 { masterM := m.GetMasterManager() - obj, err := masterM.FetchByIdOrName(userCred, input.AlertResourceId) + obj, err := masterM.FetchByIdOrName(ctx, userCred, input.AlertResourceId) if err != nil { return nil, errors.Wrapf(err, "Get %s object", masterM.Keyword()) } @@ -125,7 +125,7 @@ func (m *SAlertResourceAlertManager) ListItemFilter(ctx context.Context, q *sqlc } if len(input.AlertId) > 0 { slaveM := m.GetSlaveManager() - obj, err := slaveM.FetchByIdOrName(userCred, input.AlertId) + obj, err := slaveM.FetchByIdOrName(ctx, userCred, input.AlertId) if err != nil { return nil, errors.Wrapf(err, "Get %s object", slaveM.Keyword()) } diff --git a/pkg/monitor/models/metric.go b/pkg/monitor/models/metric.go index ba2a9bb5c9..0c6d755ec3 100644 --- a/pkg/monitor/models/metric.go +++ b/pkg/monitor/models/metric.go @@ -663,7 +663,7 @@ func (self *SMetricMeasurement) CustomizeDelete( return err } for _, joint := range metricJoint { - field, err := joint.GetMetricField() + field, err := joint.GetMetricField(ctx) if err != nil { return err } diff --git a/pkg/monitor/models/metric_field.go b/pkg/monitor/models/metric_field.go index a9306fbca1..4821561eb7 100644 --- a/pkg/monitor/models/metric_field.go +++ b/pkg/monitor/models/metric_field.go @@ -183,8 +183,8 @@ func (manager *SMetricFieldManager) SaveMetricField(ctx context.Context, userCre return field, nil } -func (man *SMetricFieldManager) GetFieldByIdOrName(id string, userCred mcclient.TokenCredential) (*SMetricField, error) { - obj, err := man.FetchByIdOrName(userCred, id) +func (man *SMetricFieldManager) GetFieldByIdOrName(ctx context.Context, id string, userCred mcclient.TokenCredential) (*SMetricField, error) { + obj, err := man.FetchByIdOrName(ctx, userCred, id) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, nil diff --git a/pkg/monitor/models/metric_joint.go b/pkg/monitor/models/metric_joint.go index 8f0447fc99..e8870d8b84 100644 --- a/pkg/monitor/models/metric_joint.go +++ b/pkg/monitor/models/metric_joint.go @@ -65,8 +65,8 @@ func (metric *SMetric) DoSave(ctx context.Context) error { return nil } -func (self *SMetric) GetMetricField() (*SMetricField, error) { - return MetricFieldManager.GetFieldByIdOrName(self.FieldId, auth.AdminCredential()) +func (self *SMetric) GetMetricField(ctx context.Context) (*SMetricField, error) { + return MetricFieldManager.GetFieldByIdOrName(ctx, self.FieldId, auth.AdminCredential()) } func (joint *SMetric) Detach(ctx context.Context, userCred mcclient.TokenCredential) error { diff --git a/pkg/monitor/models/monitor_resource.go b/pkg/monitor/models/monitor_resource.go index 59c3d0d2e0..07b4685898 100644 --- a/pkg/monitor/models/monitor_resource.go +++ b/pkg/monitor/models/monitor_resource.go @@ -351,7 +351,7 @@ func (manager *SMonitorResourceManager) GetPropertyAlert(ctx context.Context, us if owner == nil { owner = userCred } - query = manager.FilterByOwner(query, manager, userCred, owner, rbacscope.TRbacScope(scope)) + query = manager.FilterByOwner(ctx, query, manager, userCred, owner, rbacscope.TRbacScope(scope)) query = query.AppendField(sqlchemy.COUNT("count_id", query.Field("id"))) input := monitor.MonitorResourceListInput{ResType: resType} query = manager.FieldListFilter(query, input) diff --git a/pkg/monitor/models/monitor_resource_alert.go b/pkg/monitor/models/monitor_resource_alert.go index 7797a68341..c5e24d8efe 100644 --- a/pkg/monitor/models/monitor_resource_alert.go +++ b/pkg/monitor/models/monitor_resource_alert.go @@ -165,7 +165,7 @@ func (m *SMonitorResourceAlertManager) ListItemFilter(ctx context.Context, q *sq if err != nil { return q, errors.Wrap(err, "Get monitor in Query err") } - resQ = m.SMonitorScopedResourceManager.FilterByOwner(resQ, m, userCred, userCred, rbacscope.TRbacScope(input.Scope)) + resQ = m.SMonitorScopedResourceManager.FilterByOwner(ctx, resQ, m, userCred, userCred, rbacscope.TRbacScope(input.Scope)) q.Filter(sqlchemy.In(q.Field("monitor_resource_id"), resQ.SubQuery())) } if len(input.SendState) != 0 { @@ -184,7 +184,7 @@ func (m *SMonitorResourceAlertManager) ListItemFilter(ctx context.Context, q *sq q.Filter(sqlchemy.In(q.Field("monitor_resource_id"), resQ.SubQuery())) } alertQuery := CommonAlertManager.Query("id") - alertQuery = m.SMonitorScopedResourceManager.FilterByOwner(alertQuery, m, userCred, userCred, rbacscope.TRbacScope(input.Scope)) + alertQuery = m.SMonitorScopedResourceManager.FilterByOwner(ctx, alertQuery, m, userCred, userCred, rbacscope.TRbacScope(input.Scope)) if len(input.AlertName) != 0 { CommonAlertManager.FieldListFilter(alertQuery, monitor.CommonAlertListInput{Name: input.AlertName}) q.Filter(sqlchemy.In(q.Field(m.GetSlaveFieldName()), alertQuery.SubQuery())) @@ -273,6 +273,6 @@ func (manager *SMonitorResourceAlertManager) ListItemExportKeys(ctx context.Cont return q, nil } -func (m *SMonitorResourceAlertManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (m *SMonitorResourceAlertManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { return q } diff --git a/pkg/monitor/models/monitorscoperesource.go b/pkg/monitor/models/monitorscoperesource.go index f45470e490..38b4b3bd50 100644 --- a/pkg/monitor/models/monitorscoperesource.go +++ b/pkg/monitor/models/monitorscoperesource.go @@ -33,7 +33,7 @@ type SMonitorScopedResource struct { db.SScopedResourceBase } -func (m *SMonitorScopedResourceManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (m *SMonitorScopedResourceManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if ownerId == nil { return q } diff --git a/pkg/monitor/models/nodealert.go b/pkg/monitor/models/nodealert.go index fcdb119274..028735b77b 100644 --- a/pkg/monitor/models/nodealert.go +++ b/pkg/monitor/models/nodealert.go @@ -889,6 +889,6 @@ func (alert *SNodeAlert) CustomizeDelete( return alert.SCommonAlert.CustomizeDelete(ctx, userCred, query, data) } -func (m *SNodeAlertManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (m *SNodeAlertManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { return q } diff --git a/pkg/notify/models/config.go b/pkg/notify/models/config.go index 90644bd12d..5ab1201c75 100644 --- a/pkg/notify/models/config.go +++ b/pkg/notify/models/config.go @@ -365,7 +365,7 @@ func (confManager *SConfigManager) InitializeData() error { return nil } -func (cm *SConfigManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (cm *SConfigManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { switch scope { case rbacscope.ScopeDomain, rbacscope.ScopeProject: q = q.Equals("attribution", api.CONFIG_ATTRIBUTION_DOMAIN) diff --git a/pkg/notify/models/notification.go b/pkg/notify/models/notification.go index 155186b919..2068bd7783 100644 --- a/pkg/notify/models/notification.go +++ b/pkg/notify/models/notification.go @@ -96,7 +96,7 @@ func (nm *SNotificationManager) ValidateCreateData(ctx context.Context, userCred // check robot robots := []string{} for i := range input.Robots { - _robot, err := validators.ValidateModel(userCred, RobotManager, &input.Robots[i]) + _robot, err := validators.ValidateModel(ctx, userCred, RobotManager, &input.Robots[i]) if err != nil && !input.IgnoreNonexistentReceiver { return input, err } @@ -713,7 +713,7 @@ func (nm *SNotificationManager) FetchOwnerId(ctx context.Context, data jsonutils return db.FetchUserInfo(ctx, data) } -func (nm *SNotificationManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (nm *SNotificationManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if owner == nil { return q } diff --git a/pkg/notify/models/receiver.go b/pkg/notify/models/receiver.go index 3a97e28a03..3a592875f1 100644 --- a/pkg/notify/models/receiver.go +++ b/pkg/notify/models/receiver.go @@ -322,7 +322,7 @@ func (rm *SReceiverManager) FetchOwnerId(ctx context.Context, data jsonutils.JSO return db.FetchDomainInfo(ctx, data) } -func (rm *SReceiverManager) filterByOwner(q *sqlchemy.SQuery, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (rm *SReceiverManager) filterByOwner(ctx context.Context, q *sqlchemy.SQuery, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { if owner == nil { return q } @@ -373,9 +373,9 @@ func (rm *SReceiverManager) filterByOwnerAndProjectDomain(ctx context.Context, u return q, nil } -func (rm *SReceiverManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (rm *SReceiverManager) FilterByOwner(ctx context.Context, q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { log.Debugf("SReceiverManager FilterByOwner is called owner %s scope %s", jsonutils.Marshal(owner), scope) - return rm.SDomainizedResourceBaseManager.FilterByOwner(q, man, userCred, owner, scope) + return rm.SDomainizedResourceBaseManager.FilterByOwner(ctx, q, man, userCred, owner, scope) } func (rm *SReceiverManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, input api.ReceiverListInput) (*sqlchemy.SQuery, error) { @@ -421,7 +421,7 @@ func (rm *SReceiverManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQue return nil, errors.Wrap(err, "unable to filterByOwnerAndProjectDomain") } } else { - q = rm.filterByOwner(q, ownerId, queryScope) + q = rm.filterByOwner(ctx, q, ownerId, queryScope) } return q, nil } diff --git a/pkg/notify/models/subscriber.go b/pkg/notify/models/subscriber.go index 87c62fb37c..50c1a2940c 100644 --- a/pkg/notify/models/subscriber.go +++ b/pkg/notify/models/subscriber.go @@ -207,7 +207,7 @@ func (sm *SSubscriberManager) ValidateCreateData(ctx context.Context, userCred m input.Role = roleCache.GetId() checkQuery = sm.Query().Equals("topic_id", input.TopicID).Equals("type", api.SUBSCRIBER_TYPE_ROLE).Equals("resource_scope", input.ResourceScope).Equals("identification", input.Role).Equals("role_scope", input.RoleScope) case api.SUBSCRIBER_TYPE_ROBOT: - robot, err := RobotManager.FetchByIdOrName(userCred, input.Robot) + robot, err := RobotManager.FetchByIdOrName(ctx, userCred, input.Robot) if errors.Cause(err) == sql.ErrNoRows { return input, httperrors.NewInputParameterError("robot %q not found", input.Robot) } diff --git a/pkg/scheduledtask/models/scheduledtask_activity.go b/pkg/scheduledtask/models/scheduledtask_activity.go index c32657ec2f..4e93e17c1b 100644 --- a/pkg/scheduledtask/models/scheduledtask_activity.go +++ b/pkg/scheduledtask/models/scheduledtask_activity.go @@ -106,7 +106,7 @@ func (sam *SScheduledTaskActivityManager) ListItemFilter(ctx context.Context, q if len(input.ScheduledTask) == 0 { return nil, httperrors.NewInputParameterError("need scheduled task") } - task, err := ScheduledTaskManager.FetchByIdOrName(userCred, input.ScheduledTask) + task, err := ScheduledTaskManager.FetchByIdOrName(ctx, userCred, input.ScheduledTask) if err != nil { return nil, err } diff --git a/pkg/scheduler/algorithm/predicates/quota_predicate.go b/pkg/scheduler/algorithm/predicates/quota_predicate.go index 7a7072218a..757eb43148 100644 --- a/pkg/scheduler/algorithm/predicates/quota_predicate.go +++ b/pkg/scheduler/algorithm/predicates/quota_predicate.go @@ -46,7 +46,7 @@ func (p *SQuotaPredicate) PreExecute(ctx context.Context, u *core.Unit, cs []cor return true, nil } -func fetchGuestUsageFromSchedInfo(s *api.SchedInfo) (computemodels.SQuota, computemodels.SRegionQuota) { +func fetchGuestUsageFromSchedInfo(ctx context.Context, s *api.SchedInfo) (computemodels.SQuota, computemodels.SRegionQuota) { vcpuCount := s.Ncpu if vcpuCount == 0 { vcpuCount = 1 @@ -66,7 +66,7 @@ func fetchGuestUsageFromSchedInfo(s *api.SchedInfo) (computemodels.SQuota, compu iNicCnt := 0 for _, netConfig := range s.Networks { - if computemodels.IsExitNetworkInfo(s.UserCred, netConfig) { + if computemodels.IsExitNetworkInfo(ctx, s.UserCred, netConfig) { eNicCnt += 1 } else { iNicCnt += 1 @@ -107,7 +107,7 @@ func (p *SQuotaPredicate) Execute(ctx context.Context, u *core.Unit, c core.Cand computeKeys := c.Getter().GetQuotaKeys(d) - computeQuota, regionQuota := fetchGuestUsageFromSchedInfo(d) + computeQuota, regionQuota := fetchGuestUsageFromSchedInfo(ctx, d) computeQuota.SetKeys(computeKeys) regionQuota.SetKeys(computeKeys.SRegionalCloudResourceKeys) diff --git a/pkg/scheduler/api/sched.go b/pkg/scheduler/api/sched.go index 93903047e2..7e0e12c3f1 100644 --- a/pkg/scheduler/api/sched.go +++ b/pkg/scheduler/api/sched.go @@ -108,7 +108,7 @@ func FetchSchedInfo(req *http.Request) (*SchedInfo, error) { net.Domain = domainId } if net.Network != "" { - netObj, err := models.NetworkManager.FetchByIdOrName(data.UserCred, net.Network) + netObj, err := models.NetworkManager.FetchByIdOrName(req.Context(), data.UserCred, net.Network) if err != nil { return nil, errors.Wrapf(err, "fetch network %s", net.Network) } diff --git a/pkg/scheduler/handler/handler.go b/pkg/scheduler/handler/handler.go index 6015d5ebd6..3f5431c439 100644 --- a/pkg/scheduler/handler/handler.go +++ b/pkg/scheduler/handler/handler.go @@ -168,7 +168,7 @@ func doCandidateDetail(c *gin.Context, id string) { return } - hs, err := computemodels.HostManager.FetchByIdOrName(userCred, id) + hs, err := computemodels.HostManager.FetchByIdOrName(c.Request.Context(), userCred, id) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) return diff --git a/pkg/yunionconf/models/parameters.go b/pkg/yunionconf/models/parameters.go index b7fdbbfc59..6ffd5ff813 100644 --- a/pkg/yunionconf/models/parameters.go +++ b/pkg/yunionconf/models/parameters.go @@ -214,7 +214,7 @@ func (manager *SParameterManager) ValidateCreateData(ctx context.Context, userCr return data, nil } -func (manager *SParameterManager) FilterByOwner(q *sqlchemy.SQuery, man db.FilterByOwnerProvider, userCred mcclient.TokenCredential, owner mcclient.IIdentityProvider, scope rbacscope.TRbacScope) *sqlchemy.SQuery { +func (manager *SParameterManager) 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.ScopeUser: diff --git a/pkg/yunionconf/models/scopedpolicybindings.go b/pkg/yunionconf/models/scopedpolicybindings.go index c4bb43d90b..0d6f38d934 100644 --- a/pkg/yunionconf/models/scopedpolicybindings.go +++ b/pkg/yunionconf/models/scopedpolicybindings.go @@ -173,7 +173,7 @@ func (manager *SScopedPolicyBindingManager) ListItemFilter( } if len(query.PolicyId) > 0 { - policyObj, err := ScopedPolicyManager.FetchByIdOrName(userCred, query.PolicyId) + policyObj, err := ScopedPolicyManager.FetchByIdOrName(ctx, userCred, query.PolicyId) if err != nil { if errors.Cause(err) == sql.ErrNoRows { return nil, errors.Wrapf(httperrors.ErrResourceNotFound, "%s %s", ScopedPolicyManager.Keyword(), query.PolicyId)