修正:1. 已经绑定的EIP禁止删除 2. 删除server时候清除public IP记录

This commit is contained in:
Qiu Jian
2018-09-04 23:29:33 +08:00
parent f4f2d8fb97
commit c3f5e8289d
3 changed files with 26 additions and 0 deletions
+7
View File
@@ -432,6 +432,13 @@ func (self *SElasticip) CustomizeDelete(ctx context.Context, userCred mcclient.T
return self.StartEipDeallocateTask(ctx, userCred, "")
}
func (self *SElasticip) ValidateDeleteCondition(ctx context.Context) error {
if len(self.AssociateId) > 0 {
return fmt.Errorf("eip is associated with instance")
}
return self.SVirtualResourceBase.ValidateDeleteCondition(ctx)
}
func (self *SElasticip) StartEipDeallocateTask(ctx context.Context, userCred mcclient.TokenCredential, parentTaskId string) error {
task, err := taskman.TaskManager.NewTask(ctx, "EipDeallocateTask", self, userCred, nil, parentTaskId, "", nil)
if err != nil {
+17
View File
@@ -3670,4 +3670,21 @@ func (self *SGuest) PerformCreateEip(ctx context.Context, userCred mcclient.Toke
return nil, httperrors.NewGeneralError(err)
}
return nil, nil
}
func (self *SGuest) DeleteEip(ctx context.Context, userCred mcclient.TokenCredential) error {
eip, err := self.GetEip()
if err != nil {
log.Errorf("Delete eip fail for get Eip %s", err)
return err
}
if eip == nil {
return nil
}
err = eip.Delete(ctx, userCred)
if err != nil {
log.Errorf("Delete eip fail %s", err)
return err
}
return nil
}
+2
View File
@@ -33,6 +33,7 @@ func (self *GuestDeleteTask) OnGuestStopComplete(ctx context.Context, obj db.ISt
eip, _ := guest.GetEip()
if eip != nil && eip.Mode != models.EIP_MODE_INSTANCE_PUBLICIP {
// detach floating EIP only
self.SetStage("on_eip_dissociate_complete", nil)
eip.StartEipDissociateTask(ctx, self.UserCred, self.GetTaskId())
} else {
@@ -113,6 +114,7 @@ func (self *GuestDeleteTask) OnGuestDeleteComplete(ctx context.Context, obj db.I
guest.LeaveAllGroups(self.UserCred)
guest.DetachAllNetworks(ctx, self.UserCred)
guest.EjectIso(self.UserCred)
guest.DeleteEip(ctx, self.UserCred)
guest.GetDriver().OnDeleteGuestFinalCleanup(ctx, guest, self.UserCred)
self.DeleteGuest(ctx, guest)
}