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:
Jian Qiu
2022-04-13 01:39:36 +08:00
committed by GitHub
co-authored by Qiu Jian
parent 6d8c326103
commit 76c26458ac
3 changed files with 30 additions and 14 deletions
+5
View File
@@ -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)
}
+1 -1
View File
@@ -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)
}
+24 -13
View File
@@ -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) {