mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
修正:1. 已经绑定的EIP禁止删除 2. 删除server时候清除public IP记录
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user