fix owner of instance snapshot

This commit is contained in:
wanyaoqi
2019-12-31 12:08:09 +08:00
parent 842a6c7c8f
commit 0bd76ccc5f
4 changed files with 10 additions and 32 deletions
-17
View File
@@ -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)
}
+6 -8
View File
@@ -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)
+3 -4
View File
@@ -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