From e3946e84852d9140b91a7424e7b5e5ff096fcf8f Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Fri, 12 Apr 2019 21:14:10 +0800 Subject: [PATCH] fix: fail to delete removed cloud resources (#364) * fix: fail to delete removed cloud resources * fix: private_cloud and on_premise filter overlaps * fix: loadbalancer* should use pending_delete to remove resources --- pkg/compute/guestdrivers/qcloud.go | 2 +- pkg/compute/models/cloudproviders.go | 6 ++-- pkg/compute/models/disks.go | 7 +++- pkg/compute/models/elasticips.go | 2 +- pkg/compute/models/hosts.go | 4 +-- pkg/compute/models/loadbalanceracls.go | 8 ++--- .../models/loadbalancerbackendgroups.go | 8 ++--- pkg/compute/models/loadbalancerbackends.go | 9 ++--- .../models/loadbalancercertificates.go | 8 ++--- .../models/loadbalancerlistenerrules.go | 8 ++--- pkg/compute/models/loadbalancerlisteners.go | 9 ++--- pkg/compute/models/loadbalancers.go | 14 +++----- pkg/compute/models/managedresource.go | 30 ++-------------- pkg/compute/models/networks.go | 2 +- pkg/compute/models/purge.go | 17 ++++++---- pkg/compute/models/routetables.go | 2 +- pkg/compute/models/snapshots.go | 2 +- pkg/compute/models/vpcs.go | 34 +------------------ 18 files changed, 48 insertions(+), 124 deletions(-) diff --git a/pkg/compute/guestdrivers/qcloud.go b/pkg/compute/guestdrivers/qcloud.go index 40f519c976..0d1442441a 100644 --- a/pkg/compute/guestdrivers/qcloud.go +++ b/pkg/compute/guestdrivers/qcloud.go @@ -46,7 +46,7 @@ func (self *SQcloudGuestDriver) GetHypervisor() string { } func (self *SQcloudGuestDriver) GetDefaultSysDiskBackend() string { - return models.STORAGE_CLOUD_BASIC + return models.STORAGE_CLOUD_PREMIUM } func (self *SQcloudGuestDriver) GetMinimalSysDiskSizeGb() int { diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index 207d9a3f5a..b8768974ec 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -133,11 +133,11 @@ func (manager *SCloudproviderManager) GetPublicProviderIdsQuery() *sqlchemy.SSub } func (manager *SCloudproviderManager) GetPrivateProviderIdsQuery() *sqlchemy.SSubQuery { - return manager.GetProviderIdsQuery(tristate.False, tristate.None) + return manager.GetProviderIdsQuery(tristate.False, tristate.False) } func (manager *SCloudproviderManager) GetOnPremiseProviderIdsQuery() *sqlchemy.SSubQuery { - return manager.GetProviderIdsQuery(tristate.False, tristate.True) + return manager.GetProviderIdsQuery(tristate.None, tristate.True) } func (manager *SCloudproviderManager) GetProviderIdsQuery(isPublic tristate.TriState, isOnPremise tristate.TriState) *sqlchemy.SSubQuery { @@ -154,7 +154,7 @@ func (manager *SCloudproviderManager) GetProviderIdsQuery(isPublic tristate.TriS if isOnPremise.IsTrue() { q = q.Filter(sqlchemy.IsTrue(account.Field("is_on_premise"))) } else if isOnPremise.IsFalse() { - q = q.Filter(sqlchemy.IsTrue(account.Field("is_on_premise"))) + q = q.Filter(sqlchemy.IsFalse(account.Field("is_on_premise"))) } return q.SubQuery() } diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index de2b72d75a..8d4d5a349d 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -1053,7 +1053,12 @@ func (self *SDisk) syncRemoveCloudDisk(ctx context.Context, userCred mcclient.To lockman.LockObject(ctx, self) defer lockman.ReleaseObject(ctx, self) - return self.SetStatus(userCred, DISK_UNKNOWN, "missing original disk after sync") + err := self.ValidatePurgeCondition(ctx) + if err != nil { + return self.SetStatus(userCred, DISK_UNKNOWN, "missing original disk after sync") + } else { + return self.RealDelete(ctx, userCred) + } } func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, extDisk cloudprovider.ICloudDisk, index int, projectId string) error { diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index b116e7fe05..713d688ec9 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -293,7 +293,7 @@ func (self *SElasticip) syncRemoveCloudEip(ctx context.Context, userCred mcclien if err != nil { return self.SetStatus(userCred, EIP_STATUS_UNKNOWN, "sync to delete") } else { - return self.Delete(ctx, userCred) + return self.RealDelete(ctx, userCred) } } diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 4e8b938093..a31c4aca72 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -1379,14 +1379,14 @@ func (self *SHost) syncRemoveCloudHost(ctx context.Context, userCred mcclient.To lockman.LockObject(ctx, self) defer lockman.ReleaseObject(ctx, self) - err := self.ValidateDeleteCondition(ctx) + err := self.ValidatePurgeCondition(ctx) if err != nil { err = self.SetStatus(userCred, HOST_OFFLINE, "sync to delete") if err == nil { _, err = self.PerformDisable(ctx, userCred, nil, nil) } } else { - err = self.Delete(ctx, userCred) + err = self.RealDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalanceracls.go b/pkg/compute/models/loadbalanceracls.go index 908013e6a1..f6b7abc425 100644 --- a/pkg/compute/models/loadbalanceracls.go +++ b/pkg/compute/models/loadbalanceracls.go @@ -325,13 +325,9 @@ func (lbacl *SLoadbalancerAcl) Delete(ctx context.Context, userCred mcclient.Tok return nil } -func (lbacl *SLoadbalancerAcl) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lbacl.SSharableVirtualResourceBase.Delete(ctx, userCred) -} - func (man *SLoadbalancerAclManager) getLoadbalancerAclsByRegion(region *SCloudregion, provider *SCloudprovider) ([]SLoadbalancerAcl, error) { acls := []SLoadbalancerAcl{} - q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id) + q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &acls); err != nil { log.Errorf("failed to get acls for region: %v provider: %v error: %v", region, provider, err) return nil, err @@ -401,7 +397,7 @@ func (self *SLoadbalancerAcl) syncRemoveCloudLoadbalanceAcl(ctx context.Context, if err != nil { // cannot delete err = self.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = self.Delete(ctx, userCred) + self.DoPendingDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancerbackendgroups.go b/pkg/compute/models/loadbalancerbackendgroups.go index 4fcbc48b94..050cb3851d 100644 --- a/pkg/compute/models/loadbalancerbackendgroups.go +++ b/pkg/compute/models/loadbalancerbackendgroups.go @@ -331,13 +331,9 @@ func (lbbg *SLoadbalancerBackendGroup) Delete(ctx context.Context, userCred mccl return nil } -func (lbbg *SLoadbalancerBackendGroup) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lbbg.SVirtualResourceBase.Delete(ctx, userCred) -} - func (man *SLoadbalancerBackendGroupManager) getLoadbalancerBackendgroupsByLoadbalancer(lb *SLoadbalancer) ([]SLoadbalancerBackendGroup, error) { lbbgs := []SLoadbalancerBackendGroup{} - q := man.Query().Equals("loadbalancer_id", lb.Id) + q := man.Query().Equals("loadbalancer_id", lb.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &lbbgs); err != nil { log.Errorf("failed to get lbbgs for lb: %s error: %v", lb.Name, err) return nil, err @@ -423,7 +419,7 @@ func (lbbg *SLoadbalancerBackendGroup) syncRemoveCloudLoadbalancerBackendgroup(c if err != nil { // cannot delete err = lbbg.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lbbg.Delete(ctx, userCred) + lbbg.PreDeleteSubs(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancerbackends.go b/pkg/compute/models/loadbalancerbackends.go index 2498bd720c..d0bbbef9f2 100644 --- a/pkg/compute/models/loadbalancerbackends.go +++ b/pkg/compute/models/loadbalancerbackends.go @@ -241,10 +241,6 @@ func (lbb *SLoadbalancerBackend) Delete(ctx context.Context, userCred mcclient.T return nil } -func (lbb *SLoadbalancerBackend) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lbb.SVirtualResourceBase.Delete(ctx, userCred) -} - func (lbb *SLoadbalancerBackend) AllowPerformPurge(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return db.IsAdminAllowPerform(userCred, lbb, "purge") } @@ -272,7 +268,7 @@ func (lbb *SLoadbalancerBackend) StartLoadBalancerBackendDeleteTask(ctx context. func (man *SLoadbalancerBackendManager) getLoadbalancerBackendsByLoadbalancerBackendgroup(loadbalancerBackendgroup *SLoadbalancerBackendGroup) ([]SLoadbalancerBackend, error) { loadbalancerBackends := []SLoadbalancerBackend{} q := man.Query().Equals("backend_group_id", loadbalancerBackendgroup.Id) - q = q.Filter(sqlchemy.OR(sqlchemy.IsNull(q.Field("pending_deleted")), sqlchemy.IsFalse(q.Field("pending_deleted")))) + q = q.IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &loadbalancerBackends); err != nil { return nil, err } @@ -377,7 +373,8 @@ func (lbb *SLoadbalancerBackend) syncRemoveCloudLoadbalancerBackend(ctx context. if err != nil { // cannot delete err = lbb.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lbb.MarkPendingDelete(userCred) + // err = lbb.MarkPendingDelete(userCred) + err = lbb.DoPendingDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancercertificates.go b/pkg/compute/models/loadbalancercertificates.go index b9725f6429..ec8db3ef60 100644 --- a/pkg/compute/models/loadbalancercertificates.go +++ b/pkg/compute/models/loadbalancercertificates.go @@ -260,10 +260,6 @@ func (lbcert *SLoadbalancerCertificate) Delete(ctx context.Context, userCred mcc return nil } -func (lbcert *SLoadbalancerCertificate) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lbcert.SVirtualResourceBase.Delete(ctx, userCred) -} - func (lbcert *SLoadbalancerCertificate) GetRegion() *SCloudregion { region, err := CloudregionManager.FetchById(lbcert.CloudregionId) if err != nil { @@ -311,7 +307,7 @@ func (lbcert *SLoadbalancerCertificate) StartLoadBalancerCertificateDeleteTask(c func (man *SLoadbalancerCertificateManager) getLoadbalancerCertificatesByRegion(region *SCloudregion, provider *SCloudprovider) ([]SLoadbalancerCertificate, error) { certificates := []SLoadbalancerCertificate{} - q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id) + q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &certificates); err != nil { log.Errorf("failed to get lb certificates for region: %v provider: %v error: %v", region, provider, err) return nil, err @@ -408,7 +404,7 @@ func (lbcert *SLoadbalancerCertificate) syncRemoveCloudLoadbalancerCertificate(c if err != nil { // cannot delete err = lbcert.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lbcert.Delete(ctx, userCred) + err = lbcert.DoPendingDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancerlistenerrules.go b/pkg/compute/models/loadbalancerlistenerrules.go index 051bc2093a..2050bc9047 100644 --- a/pkg/compute/models/loadbalancerlistenerrules.go +++ b/pkg/compute/models/loadbalancerlistenerrules.go @@ -285,15 +285,11 @@ func (lbr *SLoadbalancerListenerRule) Delete(ctx context.Context, userCred mccli return nil } -func (lbr *SLoadbalancerListenerRule) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lbr.SVirtualResourceBase.Delete(ctx, userCred) -} - // Delete, Update func (man *SLoadbalancerListenerRuleManager) getLoadbalancerListenerRulesByListener(listener *SLoadbalancerListener) ([]SLoadbalancerListenerRule, error) { rules := []SLoadbalancerListenerRule{} - q := man.Query().Equals("listener_id", listener.Id) + q := man.Query().Equals("listener_id", listener.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &rules); err != nil { log.Errorf("failed to get lb listener rules for listener %s error: %v", listener.Name, err) return nil, err @@ -412,7 +408,7 @@ func (lbr *SLoadbalancerListenerRule) syncRemoveCloudLoadbalancerListenerRule(ct if err != nil { // cannot delete err = lbr.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lbr.Delete(ctx, userCred) + err = lbr.DoPendingDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancerlisteners.go b/pkg/compute/models/loadbalancerlisteners.go index af6b315173..46f1255444 100644 --- a/pkg/compute/models/loadbalancerlisteners.go +++ b/pkg/compute/models/loadbalancerlisteners.go @@ -584,10 +584,6 @@ func (lblis *SLoadbalancerListener) Delete(ctx context.Context, userCred mcclien return nil } -func (lblis *SLoadbalancerListener) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lblis.SVirtualResourceBase.Delete(ctx, userCred) -} - func (lblis *SLoadbalancerListener) GetLoadbalancerListenerParams() (*cloudprovider.SLoadbalancerListener, error) { listener := &cloudprovider.SLoadbalancerListener{ Name: lblis.Name, @@ -687,7 +683,7 @@ func (lblis *SLoadbalancerListener) GetIRegion() (cloudprovider.ICloudRegion, er func (man *SLoadbalancerListenerManager) getLoadbalancerListenersByLoadbalancer(lb *SLoadbalancer) ([]SLoadbalancerListener, error) { listeners := []SLoadbalancerListener{} - q := man.Query().Equals("loadbalancer_id", lb.Id) + q := man.Query().Equals("loadbalancer_id", lb.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &listeners); err != nil { return nil, err } @@ -822,7 +818,8 @@ func (lblis *SLoadbalancerListener) syncRemoveCloudLoadbalancerListener(ctx cont if err != nil { // cannot delete err = lblis.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lblis.Delete(ctx, userCred) + // err = lblis.PendingDelete(ctx, userCred) + lblis.PreDeleteSubs(ctx, userCred) } return err } diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 23ff2a7612..5ff45f8184 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -437,8 +437,8 @@ func (lb *SLoadbalancer) PendingDelete(ctx context.Context, userCred mcclient.To } LoadbalancernetworkManager.DeleteLoadbalancerNetwork(ctx, userCred, req) } - lb.DoPendingDelete(ctx, userCred) lb.PreDeleteSubs(ctx, userCred) + lb.DoPendingDelete(ctx, userCred) } func (lb *SLoadbalancer) PreDeleteSubs(ctx context.Context, userCred mcclient.TokenCredential) { @@ -462,13 +462,9 @@ func (lb *SLoadbalancer) Delete(ctx context.Context, userCred mcclient.TokenCred return nil } -func (lb *SLoadbalancer) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error { - return lb.SVirtualResourceBase.Delete(ctx, userCred) -} - func (man *SLoadbalancerManager) getLoadbalancersByRegion(region *SCloudregion, provider *SCloudprovider) ([]SLoadbalancer, error) { lbs := []SLoadbalancer{} - q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id) + q := man.Query().Equals("cloudregion_id", region.Id).Equals("manager_id", provider.Id).IsFalse("pending_deleted") if err := db.FetchModelObjects(man, q, &lbs); err != nil { log.Errorf("failed to get lbs for region: %v provider: %v error: %v", region, provider, err) return nil, err @@ -589,11 +585,11 @@ func (lb *SLoadbalancer) syncRemoveCloudLoadbalancer(ctx context.Context, userCr err := lb.ValidateDeleteCondition(ctx) if err != nil { // cannot delete - err = lb.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") + return lb.SetStatus(userCred, api.LB_STATUS_UNKNOWN, "sync to delete") } else { - err = lb.Delete(ctx, userCred) + lb.PendingDelete(ctx, userCred) + return nil } - return err } func (lb *SLoadbalancer) syncLoadbalancerNetwork(ctx context.Context, userCred mcclient.TokenCredential) { diff --git a/pkg/compute/models/managedresource.go b/pkg/compute/models/managedresource.go index 85c54b5d7f..a264c98b8f 100644 --- a/pkg/compute/models/managedresource.go +++ b/pkg/compute/models/managedresource.go @@ -158,20 +158,10 @@ func managedResourceFilterByCloudType(q *sqlchemy.SQuery, query jsonutils.JSONOb if jsonutils.QueryBoolean(query, "private_cloud", false) || jsonutils.QueryBoolean(query, "is_private", false) { if len(filterField) == 0 { - q = q.Filter( - sqlchemy.OR( - sqlchemy.In(q.Field("manager_id"), CloudproviderManager.GetPrivateProviderIdsQuery()), - sqlchemy.IsNullOrEmpty(q.Field("manager_id")), - ), - ) + q = q.Filter(sqlchemy.In(q.Field("manager_id"), CloudproviderManager.GetPrivateProviderIdsQuery())) } else { sq := subqFunc() - sq = sq.Filter( - sqlchemy.OR( - sqlchemy.In(sq.Field("manager_id"), CloudproviderManager.GetPrivateProviderIdsQuery()), - sqlchemy.IsNullOrEmpty(sq.Field("manager_id")), - ), - ) + sq = sq.Filter(sqlchemy.In(sq.Field("manager_id"), CloudproviderManager.GetPrivateProviderIdsQuery())) q = q.Filter(sqlchemy.In(q.Field(filterField), sq.SubQuery())) } } @@ -209,22 +199,6 @@ func managedResourceFilterByCloudType(q *sqlchemy.SQuery, query jsonutils.JSONOb return q } -/*func (self *SManagedResourceBase) getExtraDetails(ctx context.Context, extra *jsonutils.JSONDict) *jsonutils.JSONDict { - manager := self.GetCloudprovider() - if manager != nil { - extra.Add(jsonutils.NewString(manager.Name), "manager") - extra.Add(jsonutils.NewString(manager.ProjectId), "manager_tenant_id") - extra.Add(jsonutils.NewString(manager.ProjectId), "manager_project_id") - project := manager.getProject(ctx) - if project != nil { - extra.Add(jsonutils.NewString(project.Name), "manager_tenant") - extra.Add(jsonutils.NewString(project.Name), "manager_project") - } - } - return extra -} -*/ - type SCloudProviderInfo struct { Provider string `json:",omitempty"` Account string `json:",omitempty"` diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 0858060e82..59e1d9a94b 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -541,7 +541,7 @@ func (self *SNetwork) syncRemoveCloudNetwork(ctx context.Context, userCred mccli if err != nil { // cannot delete err = self.SetStatus(userCred, NETWORK_STATUS_UNKNOWN, "Sync to remove") } else { - err = self.Delete(ctx, userCred) + err = self.RealDelete(ctx, userCred) } return err diff --git a/pkg/compute/models/purge.go b/pkg/compute/models/purge.go index 15ad6813ac..b5d051d756 100644 --- a/pkg/compute/models/purge.go +++ b/pkg/compute/models/purge.go @@ -162,7 +162,7 @@ func (lbcert *SLoadbalancerCertificate) purge(ctx context.Context, userCred mccl return err } - return lbcert.RealDelete(ctx, userCred) + return lbcert.DoPendingDelete(ctx, userCred) } func (manager *SLoadbalancerAclManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -189,7 +189,7 @@ func (lbacl *SLoadbalancerAcl) purge(ctx context.Context, userCred mcclient.Toke return err } - return lbacl.RealDelete(ctx, userCred) + return lbacl.DoPendingDelete(ctx, userCred) } func (manager *SLoadbalancerManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -246,7 +246,8 @@ func (lb *SLoadbalancer) purge(ctx context.Context, userCred mcclient.TokenCrede return err } - return lb.RealDelete(ctx, userCred) + lb.PendingDelete(ctx, userCred) + return nil } func (manager *SLoadbalancerListenerManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -273,7 +274,8 @@ func (lbl *SLoadbalancerListener) purge(ctx context.Context, userCred mcclient.T return err } - return lbl.RealDelete(ctx, userCred) + lbl.PreDeleteSubs(ctx, userCred) + return nil } func (manager *SLoadbalancerListenerRuleManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -299,7 +301,7 @@ func (lblr *SLoadbalancerListenerRule) purge(ctx context.Context, userCred mccli if err != nil { return err } - return lblr.RealDelete(ctx, userCred) + return lblr.DoPendingDelete(ctx, userCred) } func (manager *SLoadbalancerBackendGroupManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -326,7 +328,8 @@ func (lbbg *SLoadbalancerBackendGroup) purge(ctx context.Context, userCred mccli return err } - return lbbg.RealDelete(ctx, userCred) + lbbg.PreDeleteSubs(ctx, userCred) + return nil } func (manager *SLoadbalancerBackendManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { @@ -352,7 +355,7 @@ func (lbb *SLoadbalancerBackend) purge(ctx context.Context, userCred mcclient.To if err != nil { return err } - return lbb.RealDelete(ctx, userCred) + return lbb.DoPendingDelete(ctx, userCred) } func (manager *SSnapshotManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error { diff --git a/pkg/compute/models/routetables.go b/pkg/compute/models/routetables.go index 766746f61b..2032ccb7e1 100644 --- a/pkg/compute/models/routetables.go +++ b/pkg/compute/models/routetables.go @@ -463,7 +463,7 @@ func (self *SRouteTable) syncRemoveCloudRouteTable(ctx context.Context, userCred if err != nil { return err } - err = self.Delete(ctx, userCred) + err = self.RealDelete(ctx, userCred) return err } diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index cfd768720a..ca32bf0a5a 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -556,7 +556,7 @@ func (self *SSnapshot) syncRemoveCloudSnapshot(ctx context.Context, userCred mcc if err != nil { err = self.SetStatus(userCred, SNAPSHOT_UNKNOWN, "sync to delete") } else { - err = self.Delete(ctx, userCred) + err = self.RealDelete(ctx, userCred) } return err } diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index f5bafcfeb4..8891fc8dae 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -330,7 +330,7 @@ func (self *SVpc) syncRemoveCloudVpc(ctx context.Context, userCred mcclient.Toke err = self.SetStatus(userCred, VPC_STATUS_UNKNOWN, "sync to delete") } } else { - err = self.Delete(ctx, userCred) + err = self.RealDelete(ctx, userCred) } return err } @@ -585,43 +585,11 @@ func (manager *SVpcManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQue } q = managedResourceFilterByCloudType(q, query, "", nil) - /*managerStr := jsonutils.GetAnyString(query, []string{"manager", "cloudprovider", "cloudprovider_id", "manager_id"}) - if len(managerStr) > 0 { - provider, err := CloudproviderManager.FetchByIdOrName(nil, managerStr) - if err != nil { - if err == sql.ErrNoRows { - return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr) - } - return nil, httperrors.NewGeneralError(err) - } - q = q.Filter(sqlchemy.Equals(q.Field("manager_id"), provider.GetId())) - queryDict.Remove("manager_id") - }*/ - q, err = manager.SStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query) if err != nil { return nil, err } - /* accountStr := jsonutils.GetAnyString(query, []string{"account", "account_id", "cloudaccount", "cloudaccount_id"}) - if len(accountStr) > 0 { - account, err := CloudaccountManager.FetchByIdOrName(nil, accountStr) - if err != nil { - if err == sql.ErrNoRows { - return nil, httperrors.NewResourceNotFoundError2(CloudaccountManager.Keyword(), accountStr) - } - return nil, httperrors.NewGeneralError(err) - } - subq := CloudproviderManager.Query("id").Equals("cloudaccount_id", account.GetId()).SubQuery() - q = q.Filter(sqlchemy.In(q.Field("manager_id"), subq)) - } - - providerStr := jsonutils.GetAnyString(query, []string{"provider"}) - if len(providerStr) > 0 { - subq := CloudproviderManager.Query("id").Equals("provider", providerStr).SubQuery() - q = q.Filter(sqlchemy.In(q.Field("manager_id"), subq)) - }*/ - return q, nil }