diff --git a/pkg/compute/guestdrivers/virtualization.go b/pkg/compute/guestdrivers/virtualization.go index 2ed28aca95..04c1307f88 100644 --- a/pkg/compute/guestdrivers/virtualization.go +++ b/pkg/compute/guestdrivers/virtualization.go @@ -115,12 +115,12 @@ func (self *SVirtualizedGuestDriver) StartGuestSyncstatusTask(guest *models.SGue } func (self *SVirtualizedGuestDriver) RequestStopGuestForDelete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { - guestStatus, _ := task.GetParams().GetString("guest_status") - if guestStatus == models.VM_RUNNING { - host := guest.GetHost() - if host != nil && host.Enabled && host.HostStatus == models.HOST_ONLINE && !jsonutils.QueryBoolean(task.GetParams(), "purge", false) { - return guest.StartGuestStopTask(ctx, task.GetUserCred(), true, task.GetTaskId()) - } + host := guest.GetHost() + if host != nil && host.Enabled && host.HostStatus == models.HOST_ONLINE { + return guest.StartGuestStopTask(ctx, task.GetUserCred(), true, task.GetTaskId()) + } + if !jsonutils.QueryBoolean(task.GetParams(), "purge", false) { + return fmt.Errorf("fail to contact host") } task.ScheduleRun(nil) return nil diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 5b5a8e5d51..01c6ac6a3d 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -26,7 +26,11 @@ func init() { func (self *GuestDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) self.SetStage("on_guest_stop_complete", nil) - guest.GetDriver().RequestStopGuestForDelete(ctx, guest, self) + err := guest.GetDriver().RequestStopGuestForDelete(ctx, guest, self) + if err != nil { + errMsg := jsonutils.NewString(err.Error()) + self.OnGuestStopCompleteFailed(ctx, obj, errMsg) + } } func (self *GuestDeleteTask) OnGuestStopComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) {