diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 7480cd1a00..5706dedf53 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -3500,3 +3500,15 @@ func (manager *SGuestManager) CleanPendingDeleteServers(ctx context.Context, use guests[i].StartDeleteGuestTask(ctx, userCred, "", false, true) } } + +func (self *SGuest) SetDisableDelete(val bool) error { + _, err := self.GetModelManager().TableSpec().Update(self, func() error { + if val { + self.DisableDelete = tristate.True + } else { + self.DisableDelete = tristate.False + } + return nil + }) + return err +} diff --git a/pkg/compute/tasks/guest_batch_create_task.go b/pkg/compute/tasks/guest_batch_create_task.go index b13c695e16..b3a6c10dba 100644 --- a/pkg/compute/tasks/guest_batch_create_task.go +++ b/pkg/compute/tasks/guest_batch_create_task.go @@ -77,6 +77,9 @@ func (self *GuestBatchCreateTask) onScheduleFail(ctx context.Context, guest *mod if len(msg) > 0 { reason = fmt.Sprintf("%s: %s", reason, msg) } + if guest.DisableDelete.IsTrue() { + guest.SetDisableDelete(false) + } guest.SetStatus(self.UserCred, models.VM_SCHEDULE_FAILED, reason) db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, reason, self.UserCred) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_SCHEDULE_FAILED, reason)