From 3f6832c85c5d0cd9bb4cd0eaca08bcc2724f9f96 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Mon, 29 Jul 2019 15:13:27 +0800 Subject: [PATCH] fix server purge --- pkg/compute/models/guest_actions.go | 5 +++-- pkg/compute/tasks/guest_delete_task.go | 3 ++- pkg/compute/tasks/guest_detach_disk_task.go | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index a11dd52edb..3acf524eb2 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1445,7 +1445,7 @@ func (self *SGuest) PerformDetachdisk(ctx context.Context, userCred mcclient.Tok } if utils.IsInStringArray(self.Status, detachDiskStatus) { self.SetStatus(userCred, api.VM_DETACH_DISK, "") - err = self.StartGuestDetachdiskTask(ctx, userCred, disk, keepDisk, "") + err = self.StartGuestDetachdiskTask(ctx, userCred, disk, keepDisk, "", false) return nil, err } else { return nil, httperrors.NewInvalidStatusError("Server in %s not able to detach disk", self.Status) @@ -1457,10 +1457,11 @@ func (self *SGuest) PerformDetachdisk(ctx context.Context, userCred mcclient.Tok return nil, httperrors.NewResourceNotFoundError("Disk %s not found", diskId) } -func (self *SGuest) StartGuestDetachdiskTask(ctx context.Context, userCred mcclient.TokenCredential, disk *SDisk, keepDisk bool, parentTaskId string) error { +func (self *SGuest) StartGuestDetachdiskTask(ctx context.Context, userCred mcclient.TokenCredential, disk *SDisk, keepDisk bool, parentTaskId string, purge bool) error { taskData := jsonutils.NewDict() taskData.Add(jsonutils.NewString(disk.Id), "disk_id") taskData.Add(jsonutils.NewBool(keepDisk), "keep_disk") + taskData.Add(jsonutils.NewBool(purge), "purge") if utils.IsInStringArray(disk.Status, []string{api.DISK_INIT, api.DISK_ALLOC_FAILED}) { //删除非正常状态下的disk taskData.Add(jsonutils.JSONFalse, "keep_disk") diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index b77dad6cf5..9f9630ba74 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -126,7 +126,8 @@ func (self *GuestDeleteTask) OnDiskDetachComplete(ctx context.Context, obj db.IS self.doClearSecurityGroupComplete(ctx, guest) return } - guest.StartGuestDetachdiskTask(ctx, self.UserCred, lastDisk, true, self.GetTaskId()) + purge := jsonutils.QueryBoolean(self.Params, "purge", false) + guest.StartGuestDetachdiskTask(ctx, self.UserCred, lastDisk, true, self.GetTaskId(), purge) } func (self *GuestDeleteTask) OnDiskDetachCompleteFailed(ctx context.Context, obj db.IStandaloneModel, err jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_detach_disk_task.go b/pkg/compute/tasks/guest_detach_disk_task.go index 41f7f5272b..b94b481388 100644 --- a/pkg/compute/tasks/guest_detach_disk_task.go +++ b/pkg/compute/tasks/guest_detach_disk_task.go @@ -63,7 +63,7 @@ func (self *GuestDetachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM guest.DetachDisk(ctx, disk, self.UserCred) host := guest.GetHost() purge := false - if host != nil && host.Status == api.HOST_DISABLED && jsonutils.QueryBoolean(self.Params, "purge", false) { + if host != nil && !host.Enabled && jsonutils.QueryBoolean(self.Params, "purge", false) { purge = true } @@ -91,7 +91,7 @@ func (self *GuestDetachDiskTask) OnDetachDiskComplete(ctx context.Context, guest keepDisk := jsonutils.QueryBoolean(self.Params, "keep_disk", true) host := guest.GetHost() purge := false - if host != nil && host.Status == api.HOST_DISABLED && jsonutils.QueryBoolean(self.Params, "purge", false) { + if host != nil && !host.Enabled && jsonutils.QueryBoolean(self.Params, "purge", false) { purge = true } if !keepDisk && disk.AutoDelete {