diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 53032dc3e9..e0ad82657e 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -787,6 +787,19 @@ func (self *SDisk) validateDeleteCondition(ctx context.Context, isPurge bool) er return self.SSharableVirtualResourceBase.ValidateDeleteCondition(ctx) } +func (self *SDisk) AllowDeleteItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { + overridePendingDelete := false + purge := false + if query != nil { + overridePendingDelete = jsonutils.QueryBoolean(query, "override_pending_delete", false) + purge = jsonutils.QueryBoolean(query, "purge", false) + } + if (overridePendingDelete || purge) && !db.IsAdminAllowDelete(userCred, self) { + return false + } + return self.IsOwner(userCred) || db.IsAdminAllowDelete(userCred, self) +} + func (self *SDisk) GetTemplateId() string { return self.TemplateId } diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 79198ccf58..c19dfb14aa 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1550,7 +1550,7 @@ func (self *SGuest) DoPendingDelete(ctx context.Context, userCred mcclient.Token for _, guestdisk := range self.GetDisks() { disk := guestdisk.GetDisk() - if ! disk.IsDetachable() { + if !disk.IsDetachable() { disk.DoPendingDelete(ctx, userCred) } else { log.Warningf("detachable disk on pending delete guests!!! should be removed earlier") diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 6a0db89c6c..8a7746daca 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -106,7 +106,7 @@ func (self *GuestDeleteTask) OnDiskDetachComplete(ctx context.Context, obj db.IS } lastDisk := guestdisks[len(guestdisks)-1].GetDisk() // remove last detachable disk log.Debugf("lastDisk IsDetachable?? %v", lastDisk.IsDetachable()) - if ! lastDisk.IsDetachable() { + if !lastDisk.IsDetachable() { self.doClearSecurityGroupComplete(ctx, guest) return }