diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index a8383c969a..bdfdfa5f02 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -621,7 +621,7 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex func (manager *SElasticcacheManager) getElasticcachesByProviderId(providerId string) ([]SElasticcache, error) { instances := []SElasticcache{} - err := fetchByManagerId(manager, providerId, &instances) + err := fetchByVpcManagerId(manager, providerId, &instances) if err != nil { return nil, errors.Wrapf(err, "getElasticcachesByProviderId.fetchByManagerId") } diff --git a/pkg/compute/models/managedresource.go b/pkg/compute/models/managedresource.go index 35f7850410..baafa626f8 100644 --- a/pkg/compute/models/managedresource.go +++ b/pkg/compute/models/managedresource.go @@ -689,3 +689,20 @@ func fetchByManagerId(manager db.IModelManager, providerId string, receiver inte q := manager.Query().Equals("manager_id", providerId) return db.FetchModelObjects(manager, q, receiver) } + +func fetchByVpcManagerId(manager db.IModelManager, providerId string, receiver interface{}) error { + vpc := VpcManager.Query().SubQuery() + q := manager.Query() + q = q.Join(vpc, sqlchemy.Equals(vpc.Field("id"), q.Field("vpc_id"))).Filter(sqlchemy.Equals(vpc.Field("manager_id"), providerId)) + return db.FetchModelObjects(manager, q, receiver) +} + +func fetchByLbVpcManagerId(manager db.IModelManager, providerId string, receiver interface{}) error { + vpc := VpcManager.Query().SubQuery() + lb := LoadbalancerManager.Query().SubQuery() + q := manager.Query() + q = q.Join(lb, sqlchemy.Equals(lb.Field("id"), q.Field("loadbalancer_id"))). + Join(vpc, sqlchemy.Equals(vpc.Field("id"), lb.Field("vpc_id"))). + Filter(sqlchemy.Equals(vpc.Field("manager_id"), providerId)) + return db.FetchModelObjects(manager, q, receiver) +} diff --git a/pkg/compute/models/natgateways.go b/pkg/compute/models/natgateways.go index d5fef34659..ffde53314c 100644 --- a/pkg/compute/models/natgateways.go +++ b/pkg/compute/models/natgateways.go @@ -212,7 +212,7 @@ func (self *SNatGateway) extractEipAddr(q *sqlchemy.SQuery) ([]string, error) { func (manager *SNatGatewayManager) getNatgatewaysByProviderId(providerId string) ([]SNatGateway, error) { nats := []SNatGateway{} - err := fetchByManagerId(manager, providerId, &nats) + err := fetchByVpcManagerId(manager, providerId, &nats) if err != nil { return nil, err } diff --git a/pkg/compute/models/purge.go b/pkg/compute/models/purge.go index 65c6ca75f6..2c85d3d160 100644 --- a/pkg/compute/models/purge.go +++ b/pkg/compute/models/purge.go @@ -217,7 +217,7 @@ func (lbacl *SCachedLoadbalancerAcl) purge(ctx context.Context, userCred mcclien func (manager *SLoadbalancerBackendGroupManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { lbbgs := make([]SLoadbalancerBackendGroup, 0) - err := fetchByManagerId(manager, providerId, &lbbgs) + err := fetchByLbVpcManagerId(manager, providerId, &lbbgs) if err != nil { return err } @@ -232,7 +232,7 @@ func (manager *SLoadbalancerBackendGroupManager) purgeAll(ctx context.Context, u func (manager *SLoadbalancerManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { lbs := make([]SLoadbalancer, 0) - err := fetchByManagerId(manager, providerId, &lbs) + err := fetchByVpcManagerId(manager, providerId, &lbs) if err != nil { return err }