Merge pull request #12159 from swordqiu/automated-cherry-pick-of-#12157-upstream-release-3.7

Automated cherry pick of #12157: fix: set disk driver and network driver for converting esxi to kvm
This commit is contained in:
Zexi Li
2021-09-08 23:06:37 +08:00
committed by GitHub
2 changed files with 19 additions and 11 deletions
+11 -10
View File
@@ -4339,22 +4339,23 @@ func (self *SGuest) PerformConvertToKvm(
if self.Status != api.VM_READY {
return nil, httperrors.NewBadRequestError("guest status must be ready")
}
newGuest, err := self.createConvertedServer(ctx, userCred)
newGuest, createInput, err := self.createConvertedServer(ctx, userCred)
if err != nil {
return nil, errors.Wrap(err, "create converted server")
}
return nil, self.StartConvertEsxiToKvmTask(ctx, userCred, preferHost, newGuest)
return nil, self.StartConvertEsxiToKvmTask(ctx, userCred, preferHost, newGuest, createInput)
}
func (self *SGuest) StartConvertEsxiToKvmTask(
ctx context.Context, userCred mcclient.TokenCredential,
preferHostId string, newGuest *SGuest,
preferHostId string, newGuest *SGuest, createInput *api.ServerCreateInput,
) error {
params := jsonutils.NewDict()
if len(preferHostId) > 0 {
params.Set("prefer_host_id", jsonutils.NewString(preferHostId))
}
params.Set("target_guest_id", jsonutils.NewString(newGuest.Id))
params.Set("input", jsonutils.Marshal(createInput))
task, err := taskman.TaskManager.NewTask(ctx, "GuestConvertEsxiToKvmTask", self, userCred,
params, "", "", nil)
if err != nil {
@@ -4368,28 +4369,28 @@ func (self *SGuest) StartConvertEsxiToKvmTask(
func (self *SGuest) createConvertedServer(
ctx context.Context, userCred mcclient.TokenCredential,
) (*SGuest, error) {
) (*SGuest, *api.ServerCreateInput, error) {
// set guest pending usage
pendingUsage, pendingRegionUsage, err := self.getGuestUsage(1)
keys, err := self.GetQuotaKeys()
if err != nil {
return nil, err
return nil, nil, errors.Wrap(err, "GetQuotaKeys")
}
pendingUsage.SetKeys(keys)
err = quotas.CheckSetPendingQuota(ctx, userCred, &pendingUsage)
if err != nil {
return nil, httperrors.NewOutOfQuotaError("Check set pending quota error %s", err)
return nil, nil, httperrors.NewOutOfQuotaError("Check set pending quota error %s", err)
}
regionKeys, err := self.GetRegionalQuotaKeys()
if err != nil {
quotas.CancelPendingUsage(ctx, userCred, &pendingUsage, &pendingUsage, false)
return nil, err
return nil, nil, errors.Wrap(err, "GetRegionalQuotaKeys")
}
pendingRegionUsage.SetKeys(regionKeys)
err = quotas.CheckSetPendingQuota(ctx, userCred, &pendingRegionUsage)
if err != nil {
quotas.CancelPendingUsage(ctx, userCred, &pendingUsage, &pendingUsage, false)
return nil, err
return nil, nil, errors.Wrap(err, "CheckSetPendingQuota")
}
// generate guest create params
createInput := self.ToCreateInput(userCred)
@@ -4413,9 +4414,9 @@ func (self *SGuest) createConvertedServer(
jsonutils.Marshal(createInput), self.GetOwnerId())
quotas.CancelPendingUsage(ctx, userCred, &pendingUsage, &pendingUsage, true)
if err != nil {
return nil, err
return nil, nil, errors.Wrap(err, "db.DoCreate")
}
return newGuest.(*SGuest), nil
return newGuest.(*SGuest), createInput, nil
}
func (self *SGuest) AllowPerformSyncFixNics(ctx context.Context,
@@ -116,7 +116,14 @@ func (self *GuestConvertEsxiToKvmTask) SaveScheduleResult(ctx context.Context, o
host, _ := targetGuest.GetHost()
//pendingUsage := models.SQuota{}
input := guest.ToCreateInput(self.UserCred)
input := new(api.ServerCreateInput)
err = self.Params.Unmarshal(input, "input")
if err != nil {
log.Errorf("fail to unmarshal params input")
input = guest.ToCreateInput(self.UserCred)
}
//pendingUsage.Storage = guest.GetDisksSize()
err = targetGuest.CreateDisksOnHost(ctx, self.UserCred, host, input.Disks, nil,
true, true, target.Disks, nil, true)