mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user