mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
nat delele should overvide Delete() and call RealDelete() after delete cloud resource successfully
This commit is contained in:
@@ -20,6 +20,7 @@ const (
|
||||
NAT_STATUS_DEPLOYING = "deploying" //配置中
|
||||
NAT_STATUS_UNKNOWN = "unknown"
|
||||
NAT_STATUS_FAILED = "failed"
|
||||
NAT_STATUS_START_DELETE = "start_delete"
|
||||
NAT_STATUS_DELETED = "deleted"
|
||||
NAT_STATUS_DELETING = "deleting"
|
||||
NAT_STATUS_DELETE_FAILED = "delete_failed"
|
||||
|
||||
@@ -185,7 +185,7 @@ func (self *SNatDEntry) syncRemoveCloudNatDTable(ctx context.Context, userCred m
|
||||
if err != nil { // cannot delete
|
||||
return self.SetStatus(userCred, api.VPC_STATUS_UNKNOWN, "sync to delete")
|
||||
}
|
||||
return self.Delete(ctx, userCred)
|
||||
return self.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (self *SNatDEntry) SyncWithCloudNatDTable(ctx context.Context, userCred mcclient.TokenCredential, extEntry cloudprovider.ICloudNatDEntry) error {
|
||||
@@ -279,21 +279,27 @@ func (self *SNatDEntry) GetINatGateway() (cloudprovider.ICloudNatGateway, error)
|
||||
return natgateway.GetINatGateway()
|
||||
}
|
||||
|
||||
func (self *SNatDEntry) Delete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
log.Infof("DNAT delete do nothing")
|
||||
self.SetStatus(userCred, api.NAT_STATUS_START_DELETE, "")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SNatDEntry) CustomizeDelete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error {
|
||||
if len(self.ExternalId) > 0 {
|
||||
return self.startDeleteVpcTask(ctx, userCred)
|
||||
return self.StartDeleteVpcTask(ctx, userCred)
|
||||
} else {
|
||||
return self.realDelete(ctx, userCred)
|
||||
return self.RealDelete(ctx, userCred)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *SNatDEntry) realDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
func (self *SNatDEntry) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
db.OpsLog.LogEvent(self, db.ACT_DELOCATE, self.GetShortDesc(ctx), userCred)
|
||||
self.SetStatus(userCred, api.NAT_STATUS_DELETED, "real delete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SNatDEntry) startDeleteVpcTask(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
func (self *SNatDEntry) StartDeleteVpcTask(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
task, err := taskman.TaskManager.NewTask(ctx, "SNatDEntryDeleteTask", self, userCred, nil, "", "", nil)
|
||||
if err != nil {
|
||||
log.Errorf("Start dnatEntry deleteTask fail %s", err)
|
||||
|
||||
@@ -191,7 +191,7 @@ func (self *SNatSEntry) syncRemoveCloudNatSTable(ctx context.Context, userCred m
|
||||
if err != nil { // cannot delete
|
||||
return self.SetStatus(userCred, api.VPC_STATUS_UNKNOWN, "sync to delete")
|
||||
}
|
||||
return self.Delete(ctx, userCred)
|
||||
return self.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (self *SNatSEntry) SyncWithCloudNatSTable(ctx context.Context, userCred mcclient.TokenCredential, extEntry cloudprovider.ICloudNatSEntry) error {
|
||||
@@ -302,19 +302,25 @@ func (self *SNatSEntry) GetINatGateway() (cloudprovider.ICloudNatGateway, error)
|
||||
|
||||
func (self *SNatSEntry) CustomizeDelete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error {
|
||||
if len(self.ExternalId) > 0 {
|
||||
return self.startDeleteVpcTask(ctx, userCred)
|
||||
return self.StartDeleteVpcTask(ctx, userCred)
|
||||
} else {
|
||||
return self.realDelete(ctx, userCred)
|
||||
return self.RealDelete(ctx, userCred)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *SNatSEntry) realDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
func (self *SNatSEntry) Delete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
log.Infof("SNAT delete do nothing")
|
||||
self.SetStatus(userCred, api.NAT_STATUS_START_DELETE, "")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SNatSEntry) RealDelete(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
db.OpsLog.LogEvent(self, db.ACT_DELOCATE, self.GetShortDesc(ctx), userCred)
|
||||
self.SetStatus(userCred, api.NAT_STATUS_DELETED, "real delete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SNatSEntry) startDeleteVpcTask(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
func (self *SNatSEntry) StartDeleteVpcTask(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
task, err := taskman.TaskManager.NewTask(ctx, "SNatSEntryDeleteTask", self, userCred, nil, "", "", nil)
|
||||
if err != nil {
|
||||
log.Errorf("Start snatEntry deleteTask fail %s", err)
|
||||
|
||||
@@ -995,6 +995,28 @@ func (vpc *SVpc) Purge(ctx context.Context, userCred mcclient.TokenCredential) e
|
||||
return vpc.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (dn *SNatDEntry) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
lockman.LockObject(ctx, dn)
|
||||
defer lockman.ReleaseObject(ctx, dn)
|
||||
|
||||
err := dn.ValidateDeleteCondition(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return dn.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (sn *SNatSEntry) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
||||
lockman.LockObject(ctx, sn)
|
||||
defer lockman.ReleaseObject(ctx, sn)
|
||||
|
||||
err := sn.ValidateDeleteCondition(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return sn.RealDelete(ctx, userCred)
|
||||
}
|
||||
|
||||
func (manager *SCloudproviderregionManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
||||
cprs, err := CloudproviderRegionManager.fetchRecordsByCloudproviderId(providerId)
|
||||
if err != nil {
|
||||
|
||||
@@ -58,7 +58,12 @@ func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone
|
||||
if err != nil {
|
||||
self.taskFailed(ctx, dnatEntry, errors.Wrapf(err, "Delete DNat Entry '%s' failed", dnatEntry.ExternalId))
|
||||
}
|
||||
dnatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETED, "")
|
||||
|
||||
err = dnatEntry.Purge(ctx, self.UserCred)
|
||||
if err != nil {
|
||||
self.taskFailed(ctx, dnatEntry, err)
|
||||
return
|
||||
}
|
||||
|
||||
logclient.AddActionLogWithStartable(self, dnatEntry, logclient.ACT_DELETE, nil, self.UserCred, true)
|
||||
self.SetStageComplete(ctx, nil)
|
||||
|
||||
@@ -58,7 +58,12 @@ func (self *SNatSEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone
|
||||
if err != nil {
|
||||
self.taskFailed(ctx, snatEntry, errors.Wrapf(err, "Delete SNat Entry '%s' failed", snatEntry.ExternalId))
|
||||
}
|
||||
snatEntry.SetStatus(self.UserCred, api.NAT_STATUS_DELETED, "")
|
||||
|
||||
err = snatEntry.Purge(ctx, self.UserCred)
|
||||
if err != nil {
|
||||
self.taskFailed(ctx, snatEntry, err)
|
||||
return
|
||||
}
|
||||
|
||||
logclient.AddActionLogWithStartable(self, snatEntry, logclient.ACT_DELETE, nil, self.UserCred, true)
|
||||
self.SetStageComplete(ctx, nil)
|
||||
|
||||
Reference in New Issue
Block a user