diff --git a/pkg/compute/guestdrivers/base.go b/pkg/compute/guestdrivers/base.go index 8ec5a53a13..144094ed9e 100644 --- a/pkg/compute/guestdrivers/base.go +++ b/pkg/compute/guestdrivers/base.go @@ -99,7 +99,7 @@ func (drv *SBaseGuestDriver) OnGuestCreateTaskComplete(ctx context.Context, gues } func (drv *SBaseGuestDriver) StartDeleteGuestTask(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, params *jsonutils.JSONDict, parentTaskId string) error { - task, err := taskman.TaskManager.NewTask(ctx, "GuestDeleteTask", guest, userCred, params, parentTaskId, "", nil) + task, err := taskman.TaskManager.NewTask(ctx, "KvmDeleteTask", guest, userCred, params, parentTaskId, "", nil) if err != nil { return err } diff --git a/pkg/compute/tasks/guest/guest_delete_task.go b/pkg/compute/tasks/guest/guest_delete_task.go index 2a38327fa0..ac1890d886 100644 --- a/pkg/compute/tasks/guest/guest_delete_task.go +++ b/pkg/compute/tasks/guest/guest_delete_task.go @@ -359,14 +359,14 @@ func (self *GuestDeleteTask) OnGuestDeleteComplete(ctx context.Context, obj db.I } func (self *GuestDeleteTask) DeleteGuest(ctx context.Context, guest *models.SGuest) { - guest.RealDelete(ctx, self.UserCred) + // guest.RealDelete(ctx, self.UserCred) // guest.RemoveAllMetadata(ctx, self.UserCred) - db.OpsLog.LogEvent(guest, db.ACT_DELOCATE, guest.GetShortDesc(ctx), self.UserCred) - logclient.AddActionLogWithStartable(self, guest, logclient.ACT_DELOCATE, nil, self.UserCred, true) - if !guest.IsSystem { - guest.EventNotify(ctx, self.UserCred, notifyclient.ActionDelete) - } - models.HostManager.ClearSchedDescCache(guest.HostId) + // db.OpsLog.LogEvent(guest, db.ACT_DELOCATE, guest.GetShortDesc(ctx), self.UserCred) + // logclient.AddActionLogWithStartable(self, guest, logclient.ACT_DELOCATE, nil, self.UserCred, true) + // if !guest.IsSystem { + // guest.EventNotify(ctx, self.UserCred, notifyclient.ActionDelete) + // } + // models.HostManager.ClearSchedDescCache(guest.HostId) self.SetStageComplete(ctx, nil) } diff --git a/pkg/compute/tasks/guest/kvm_delete_task.go b/pkg/compute/tasks/guest/kvm_delete_task.go new file mode 100644 index 0000000000..75a8f632ef --- /dev/null +++ b/pkg/compute/tasks/guest/kvm_delete_task.go @@ -0,0 +1,50 @@ +package guest + +import ( + "context" + + "yunion.io/x/jsonutils" + + "yunion.io/x/onecloud/pkg/cloudcommon/db" + "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" + "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" + "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" +) + +type KvmDeleteTask struct { + SGuestBaseTask +} + +func init() { + taskman.RegisterTask(KvmDeleteTask{}) +} + +func (t *KvmDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { + t.startDeleteKvm(ctx, obj.(*models.SGuest)) +} + +func (t *KvmDeleteTask) startDeleteKvm(ctx context.Context, kvm *models.SGuest) { + t.SetStage("OnKvmDeleted", nil) + task, err := taskman.TaskManager.NewTask(ctx, "GuestDeleteTask", kvm, t.GetUserCred(), t.GetParams(), t.GetTaskId(), "", nil) + if err != nil { + t.OnKvmDeleted(ctx, kvm, jsonutils.NewString(err.Error())) + return + } + task.ScheduleRun(nil) +} + +func (t *KvmDeleteTask) OnKvmDeleted(ctx context.Context, kvm *models.SGuest, data jsonutils.JSONObject) { + kvm.RealDelete(ctx, t.GetUserCred()) + db.OpsLog.LogEvent(kvm, db.ACT_DELOCATE, kvm.GetShortDesc(ctx), t.UserCred) + logclient.AddActionLogWithStartable(t, kvm, logclient.ACT_DELOCATE, nil, t.UserCred, true) + if !kvm.IsSystem { + kvm.EventNotify(ctx, t.UserCred, notifyclient.ActionDelete) + } + models.HostManager.ClearSchedDescCache(kvm.HostId) + t.SetStageComplete(ctx, nil) +} + +func (t *KvmDeleteTask) OnKvmDeletedFailed(ctx context.Context, kvm *models.SGuest, reason jsonutils.JSONObject) { + t.SetStageFailed(ctx, reason) +} diff --git a/pkg/compute/tasks/guest/pod_delete_task.go b/pkg/compute/tasks/guest/pod_delete_task.go index 8380a21d86..616d70c884 100644 --- a/pkg/compute/tasks/guest/pod_delete_task.go +++ b/pkg/compute/tasks/guest/pod_delete_task.go @@ -24,7 +24,9 @@ import ( api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" + "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type PodDeleteTask struct { @@ -119,6 +121,13 @@ func (t *PodDeleteTask) OnPodStoppedFailed(ctx context.Context, pod *models.SGue }*/ func (t *PodDeleteTask) OnPodDeleted(ctx context.Context, pod *models.SGuest, data jsonutils.JSONObject) { + pod.RealDelete(ctx, t.GetUserCred()) + db.OpsLog.LogEvent(pod, db.ACT_DELOCATE, pod.GetShortDesc(ctx), t.UserCred) + logclient.AddActionLogWithStartable(t, pod, logclient.ACT_DELOCATE, nil, t.UserCred, true) + if !pod.IsSystem { + pod.EventNotify(ctx, t.UserCred, notifyclient.ActionDelete) + } + models.HostManager.ClearSchedDescCache(pod.HostId) t.SetStageComplete(ctx, nil) }