mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix owner of instance snapshot
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user