diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index 9ce9b28255..6675d889be 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -1052,26 +1052,9 @@ func (self *SDisk) validateDeleteCondition(ctx context.Context, isPurge bool) er if cnt > 0 { return httperrors.NewNotEmptyError("Virtual disk used by virtual servers") } - /*cnt, err = self.getSnapshotpoliciesCount() - if err != nil { - return httperrors.NewInternalServerError("getSnapshotpoliciesCount fail %s", err) - } - if cnt > 0 { - return httperrors.NewNotEmptyError("Virtual disk associated with snapshot policies") - }*/ if !isPurge && self.IsValidPrePaid() { return httperrors.NewForbiddenError("not allow to delete prepaid disk in valid status") } - storage := self.GetStorage() - if storage != nil && storage.StorageType == api.STORAGE_RBD { - scnt, err := self.GetSnapshotCount() - if err != nil { - return err - } - if scnt > 0 { - return httperrors.NewBadRequestError("not allow to delete %s disk with snapshots", storage.StorageType) - } - } return self.SVirtualResourceBase.ValidateDeleteCondition(ctx) } diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 01ae5f741e..55e6cfedf9 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -4194,21 +4194,20 @@ func (self *SGuest) validateCreateInstanceSnapshot( func (self *SGuest) PerformInstanceSnapshot( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject, ) (jsonutils.JSONObject, error) { - ownerId := self.GetOwnerId() - lockman.LockClass(ctx, InstanceSnapshotManager, ownerId.GetProjectId()) - defer lockman.ReleaseClass(ctx, InstanceSnapshotManager, ownerId.GetProjectId()) + lockman.LockClass(ctx, InstanceSnapshotManager, userCred.GetProjectId()) + defer lockman.ReleaseClass(ctx, InstanceSnapshotManager, userCred.GetProjectId()) pendingUsage, err := self.validateCreateInstanceSnapshot(ctx, userCred, query, data) if err != nil { return nil, err } name, _ := data.GetString("name") - instanceSnapshot, err := InstanceSnapshotManager.CreateInstanceSnapshot(ctx, ownerId, self, name, false) + instanceSnapshot, err := InstanceSnapshotManager.CreateInstanceSnapshot(ctx, userCred, self, name, false) if err != nil { quotas.CancelPendingUsage( ctx, userCred, pendingUsage, pendingUsage) return nil, httperrors.NewInternalServerError("create instance snapshot failed: %s", err) } - err = self.InstaceCreateSnapshot(ctx, userCred, ownerId, instanceSnapshot, pendingUsage) + err = self.InstaceCreateSnapshot(ctx, userCred, instanceSnapshot, pendingUsage) if err != nil { quotas.CancelPendingUsage( ctx, userCred, pendingUsage, pendingUsage) @@ -4220,12 +4219,11 @@ func (self *SGuest) PerformInstanceSnapshot( func (self *SGuest) InstaceCreateSnapshot( ctx context.Context, userCred mcclient.TokenCredential, - ownerId mcclient.IIdentityProvider, instanceSnapshot *SInstanceSnapshot, pendingUsage *SRegionQuota, ) error { self.SetStatus(userCred, api.VM_START_INSTANCE_SNAPSHOT, "instance snapshot") - return instanceSnapshot.StartCreateInstanceSnapshotTask(ctx, userCred, ownerId, pendingUsage, "") + return instanceSnapshot.StartCreateInstanceSnapshotTask(ctx, userCred, pendingUsage, "") } func (self *SGuest) AllowPerformInstanceSnapshotReset(ctx context.Context, @@ -4340,7 +4338,7 @@ func (self *SGuest) PerformSnapshotAndClone( return nil, httperrors.NewInternalServerError("Generate snapshot name failed %s", err) } instanceSnapshot, err := InstanceSnapshotManager.CreateInstanceSnapshot( - ctx, self.GetOwnerId(), self, instanceSnapshotName, + ctx, userCred, self, instanceSnapshotName, jsonutils.QueryBoolean(data, "auto_delete_instance_snapshot", false)) if err != nil { quotas.CancelPendingUsage(ctx, userCred, &pendingUsage, &pendingUsage) diff --git a/pkg/compute/models/instance_snapshots.go b/pkg/compute/models/instance_snapshots.go index 66b1f99118..02a6ae2c33 100644 --- a/pkg/compute/models/instance_snapshots.go +++ b/pkg/compute/models/instance_snapshots.go @@ -137,7 +137,6 @@ func (self *SInstanceSnapshot) GetExtraDetails(ctx context.Context, userCred mcc func (self *SInstanceSnapshot) StartCreateInstanceSnapshotTask( ctx context.Context, userCred mcclient.TokenCredential, - ownerId mcclient.IIdentityProvider, pendingUsage quotas.IQuota, parentTaskId string, ) error { @@ -151,13 +150,13 @@ func (self *SInstanceSnapshot) StartCreateInstanceSnapshotTask( } func (manager *SInstanceSnapshotManager) CreateInstanceSnapshot( - ctx context.Context, ownerId mcclient.IIdentityProvider, guest *SGuest, name string, autoDelete bool, + ctx context.Context, userCred mcclient.TokenCredential, guest *SGuest, name string, autoDelete bool, ) (*SInstanceSnapshot, error) { instanceSnapshot := &SInstanceSnapshot{} instanceSnapshot.SetModelManager(manager, instanceSnapshot) instanceSnapshot.Name = name - instanceSnapshot.ProjectId = ownerId.GetProjectId() - instanceSnapshot.DomainId = ownerId.GetProjectDomainId() + instanceSnapshot.ProjectId = userCred.GetProjectId() + instanceSnapshot.DomainId = userCred.GetProjectDomainId() instanceSnapshot.GuestId = guest.Id instanceSnapshot.AutoDelete = autoDelete guestSchedInput := guest.ToSchedDesc() diff --git a/pkg/compute/tasks/instance_snapshot_and_clone_task.go b/pkg/compute/tasks/instance_snapshot_and_clone_task.go index dfc1ac6120..3744b47e4a 100644 --- a/pkg/compute/tasks/instance_snapshot_and_clone_task.go +++ b/pkg/compute/tasks/instance_snapshot_and_clone_task.go @@ -82,10 +82,8 @@ func (self *InstanceSnapshotAndCloneTask) OnInit( ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { isp := obj.(*models.SInstanceSnapshot) - guest := models.GuestManager.FetchGuestById(isp.GuestId) - self.SetStage("OnCreateInstanceSnapshot", nil) - err := isp.StartCreateInstanceSnapshotTask(ctx, self.UserCred, guest.GetOwnerId(), nil, self.Id) + err := isp.StartCreateInstanceSnapshotTask(ctx, self.UserCred, nil, self.Id) if err != nil { self.taskFailed(ctx, isp, err.Error()) return