mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: backup bugifxes: 1. not inherit projects of disk. 2. class not (#14000)
inherit by disk 3. fail to creat guest image Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
@@ -271,6 +271,8 @@ func (db *SDiskBackup) CustomizeCreate(ctx context.Context, userCred mcclient.To
|
||||
db.DiskSizeMb = disk.DiskSize
|
||||
db.OsArch = disk.OsArch
|
||||
db.StorageId = disk.StorageId
|
||||
db.DomainId = disk.DomainId
|
||||
db.ProjectId = disk.ProjectId
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -391,6 +393,9 @@ func (self *SDiskBackup) StartBackupDeleteTask(ctx context.Context, userCred mcc
|
||||
}
|
||||
|
||||
func (self *SDiskBackup) PerformRecovery(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.DiskBackupRecoveryInput) (jsonutils.JSONObject, error) {
|
||||
if self.Status != api.BACKUP_STATUS_READY {
|
||||
return nil, errors.Wrapf(httperrors.ErrInvalidStatus, "cannot recover backup in status %s", self.Status)
|
||||
}
|
||||
return nil, self.StartRecoveryTask(ctx, userCred, "", input.Name)
|
||||
}
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ func (self *SGuest) PerformSaveGuestImage(ctx context.Context, userCred mcclient
|
||||
return nil, errors.Wrap(err, "unable to GetAllClassMetadata")
|
||||
}
|
||||
if len(cm) > 0 {
|
||||
_, err = image.Images.PerformAction(s, guestImageId, "set-class-metadata", jsonutils.Marshal(cm))
|
||||
_, err = image.GuestImages.PerformAction(s, guestImageId, "set-class-metadata", jsonutils.Marshal(cm))
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to SetClassMetadata for guest image %s", guestImageId)
|
||||
}
|
||||
|
||||
@@ -5,15 +5,12 @@ import (
|
||||
"fmt"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/auth"
|
||||
compute_modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
|
||||
"yunion.io/x/onecloud/pkg/util/logclient"
|
||||
)
|
||||
|
||||
@@ -53,21 +50,35 @@ func (self *DiskBackupRecoveryTask) OnInit(ctx context.Context, obj db.IStandalo
|
||||
input.Description = fmt.Sprintf("recovery from backup %s", backup.GetName())
|
||||
input.Hypervisor = api.HYPERVISOR_KVM
|
||||
input.DiskConfig = diskConfig
|
||||
ownerId := backup.GetOwnerId()
|
||||
input.ProjectDomainId = ownerId.GetProjectDomainId()
|
||||
input.ProjectId = ownerId.GetProjectId()
|
||||
|
||||
taskHeader := self.GetTaskRequestHeader()
|
||||
session := auth.GetSession(ctx, self.UserCred, "", "")
|
||||
log.Infof("task_notify_url: %s\ntask_id: %s\n", taskHeader.Get(mcclient.TASK_NOTIFY_URL), taskHeader.Get(mcclient.TASK_ID))
|
||||
session.Header.Set(mcclient.TASK_NOTIFY_URL, taskHeader.Get(mcclient.TASK_NOTIFY_URL))
|
||||
session.Header.Set(mcclient.TASK_ID, taskHeader.Get(mcclient.TASK_ID))
|
||||
diskData, err := compute_modules.Disks.Create(session, jsonutils.Marshal(input))
|
||||
params := input.JSON(input)
|
||||
diskObj, err := db.DoCreate(models.DiskManager, ctx, self.UserCred, nil, params, ownerId)
|
||||
if err != nil {
|
||||
self.taskFaild(ctx, backup, jsonutils.NewString(err.Error()))
|
||||
return
|
||||
}
|
||||
diskId, _ := diskData.GetString("id")
|
||||
params := jsonutils.NewDict()
|
||||
params.Set("disk_id", jsonutils.NewString(diskId))
|
||||
disk := diskObj.(*models.SDisk)
|
||||
err = backup.InheritTo(ctx, disk)
|
||||
if err != nil {
|
||||
self.taskFaild(ctx, backup, jsonutils.NewString(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
func() {
|
||||
lockman.LockObject(ctx, disk)
|
||||
defer lockman.ReleaseObject(ctx, disk)
|
||||
|
||||
disk.PostCreate(ctx, self.UserCred, backup.GetOwnerId(), nil, params)
|
||||
}()
|
||||
|
||||
params.Set("disk_id", jsonutils.NewString(disk.Id))
|
||||
self.SetStage("OnCreateDisk", params)
|
||||
|
||||
params.Set("parent_task_id", jsonutils.NewString(self.GetTaskId()))
|
||||
models.DiskManager.OnCreateComplete(ctx, []db.IModel{disk}, self.UserCred, ownerId, nil, params)
|
||||
}
|
||||
|
||||
func (self *DiskBackupRecoveryTask) OnCreateDisk(ctx context.Context, backup *models.SDiskBackup, data jsonutils.JSONObject) {
|
||||
|
||||
Reference in New Issue
Block a user