From 45d3e83299319fc4a273c1723dca921ebe6d56ca Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 24 Mar 2021 10:33:10 +0800 Subject: [PATCH] fix: nat delete and create fix --- pkg/compute/models/natgateways.go | 4 ++ pkg/compute/tasks/nat_delete_task.go | 56 ++++++++++++++++------------ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/pkg/compute/models/natgateways.go b/pkg/compute/models/natgateways.go index 046bc6569f..5b243a78b3 100644 --- a/pkg/compute/models/natgateways.go +++ b/pkg/compute/models/natgateways.go @@ -207,6 +207,10 @@ func (man *SNatGatewayManager) ValidateCreateData(ctx context.Context, userCred // create new } } + input.StatusInfrasResourceBaseCreateInput, err = man.SStatusInfrasResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.StatusInfrasResourceBaseCreateInput) + if err != nil { + return input, err + } driver := region.GetDriver() return driver.ValidateCreateNatGateway(ctx, userCred, input) } diff --git a/pkg/compute/tasks/nat_delete_task.go b/pkg/compute/tasks/nat_delete_task.go index 40a1d31eed..6c7124e4f4 100644 --- a/pkg/compute/tasks/nat_delete_task.go +++ b/pkg/compute/tasks/nat_delete_task.go @@ -46,32 +46,10 @@ func (self *NatGatewayDeleteTask) taskFailed(ctx context.Context, nat *models.SN func (self *NatGatewayDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { nat := obj.(*models.SNatGateway) - self.SetStage("OnEipDissociateComplete", nil) - self.OnEipDissociateComplete(ctx, nat, nil) -} - -func (self *NatGatewayDeleteTask) OnEipDissociateComplete(ctx context.Context, nat *models.SNatGateway, data jsonutils.JSONObject) { - eips, err := nat.GetEips() - if err != nil { - self.taskFailed(ctx, nat, errors.Wrapf(err, "nat.GetEips")) - return - } - if len(eips) > 0 { - eips[0].StartEipDissociateTask(ctx, self.GetUserCred(), false, self.GetTaskId()) - return - } - self.doDeleteNatGateway(ctx, nat) -} - -func (self *NatGatewayDeleteTask) OnEipDissociateCompleteFailed(ctx context.Context, nat *models.SNatGateway, data jsonutils.JSONObject) { - self.SetStageFailed(ctx, nil) -} - -func (self *NatGatewayDeleteTask) doDeleteNatGateway(ctx context.Context, nat *models.SNatGateway) { iNat, err := nat.GetINatGateway() if err != nil { if errors.Cause(err) == cloudprovider.ErrNotFound { - self.taskComplete(ctx, nat) + self.OnEipDissociateComplete(ctx, nat, nil) return } self.taskFailed(ctx, nat, errors.Wrapf(err, "nat.GetINatGateway")) @@ -105,6 +83,38 @@ func (self *NatGatewayDeleteTask) doDeleteNatGateway(ctx context.Context, nat *m cloudprovider.WaitDeleted(snat[i], time.Second*5, time.Minute) } + self.SetStage("OnEipDissociateComplete", nil) + self.OnEipDissociateComplete(ctx, nat, nil) +} + +func (self *NatGatewayDeleteTask) OnEipDissociateComplete(ctx context.Context, nat *models.SNatGateway, data jsonutils.JSONObject) { + eips, err := nat.GetEips() + if err != nil { + self.taskFailed(ctx, nat, errors.Wrapf(err, "nat.GetEips")) + return + } + if len(eips) > 0 { + eips[0].StartEipDissociateTask(ctx, self.GetUserCred(), false, self.GetTaskId()) + return + } + self.doDeleteNatGateway(ctx, nat) +} + +func (self *NatGatewayDeleteTask) OnEipDissociateCompleteFailed(ctx context.Context, nat *models.SNatGateway, data jsonutils.JSONObject) { + self.SetStageFailed(ctx, nil) +} + +func (self *NatGatewayDeleteTask) doDeleteNatGateway(ctx context.Context, nat *models.SNatGateway) { + iNat, err := nat.GetINatGateway() + if err != nil { + if errors.Cause(err) == cloudprovider.ErrNotFound { + self.taskComplete(ctx, nat) + return + } + self.taskFailed(ctx, nat, errors.Wrapf(err, "nat.GetINatGateway")) + return + } + err = iNat.Delete() if err != nil { self.taskFailed(ctx, nat, errors.Wrapf(err, "iNat.Delete"))