nat delele should overvide Delete() and call RealDelete() after delete cloud resource successfully

This commit is contained in:
Rain
2019-08-21 11:13:45 +08:00
parent d9a6621155
commit 87e57c36a0
6 changed files with 57 additions and 12 deletions
+1
View File
@@ -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"
+11 -5
View File
@@ -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)
+11 -5
View File
@@ -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)
+22
View File
@@ -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 {
+6 -1
View File
@@ -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)
+6 -1
View File
@@ -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)