diff --git a/pkg/compute/guestdrivers/baremetals.go b/pkg/compute/guestdrivers/baremetals.go index b777532232..7343756de9 100644 --- a/pkg/compute/guestdrivers/baremetals.go +++ b/pkg/compute/guestdrivers/baremetals.go @@ -466,7 +466,7 @@ func (self *SBaremetalGuestDriver) RequestRebuildRootDisk(ctx context.Context, g return nil } -func (self *SBaremetalGuestDriver) PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, data *jsonutils.JSONDict) error { +func (self *SBaremetalGuestDriver) PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, data *jsonutils.JSONDict, parentTaskId string) error { return guest.StartGueststartTask(ctx, userCred, data, "") } diff --git a/pkg/compute/guestdrivers/virtualization.go b/pkg/compute/guestdrivers/virtualization.go index 1fd3bd6dfa..af29871336 100644 --- a/pkg/compute/guestdrivers/virtualization.go +++ b/pkg/compute/guestdrivers/virtualization.go @@ -314,8 +314,8 @@ func (self *SVirtualizedGuestDriver) ValidateCreateDataOnHost(ctx context.Contex return input, nil } -func (self *SVirtualizedGuestDriver) PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, data *jsonutils.JSONDict) error { - return guest.StartGueststartTask(ctx, userCred, data, "") +func (self *SVirtualizedGuestDriver) PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, data *jsonutils.JSONDict, parentTaskId string) error { + return guest.StartGueststartTask(ctx, userCred, data, parentTaskId) } func (self *SVirtualizedGuestDriver) CheckDiskTemplateOnStorage(ctx context.Context, userCred mcclient.TokenCredential, imageId string, format string, storageId string, task taskman.ITask) error { diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index a06f52a25d..e351341f50 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1044,7 +1044,7 @@ func (self *SGuest) PerformStart( } if self.isAllDisksReady() { kwargs := jsonutils.Marshal(input).(*jsonutils.JSONDict) - err := self.GetDriver().PerformStart(ctx, userCred, self, kwargs) + err := self.GetDriver().PerformStart(ctx, userCred, self, kwargs, "") return nil, err } else { return nil, httperrors.NewInvalidStatusError("Some disk not ready") diff --git a/pkg/compute/models/guestdrivers.go b/pkg/compute/models/guestdrivers.go index 61a4cc1723..d0b53c82a7 100644 --- a/pkg/compute/models/guestdrivers.go +++ b/pkg/compute/models/guestdrivers.go @@ -128,7 +128,7 @@ type IGuestDriver interface { OnDeleteGuestFinalCleanup(ctx context.Context, guest *SGuest, userCred mcclient.TokenCredential) error - PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *SGuest, data *jsonutils.JSONDict) error + PerformStart(ctx context.Context, userCred mcclient.TokenCredential, guest *SGuest, data *jsonutils.JSONDict, parentTaskId string) error CheckDiskTemplateOnStorage(ctx context.Context, userCred mcclient.TokenCredential, imageId string, format string, storageId string, task taskman.ITask) error diff --git a/pkg/compute/tasks/guest_change_config_task.go b/pkg/compute/tasks/guest_change_config_task.go index 24231702da..e6a1aed7c7 100644 --- a/pkg/compute/tasks/guest_change_config_task.go +++ b/pkg/compute/tasks/guest_change_config_task.go @@ -433,7 +433,11 @@ func (task *GuestChangeConfigTask) OnSyncStatusComplete(ctx context.Context, obj guest := obj.(*models.SGuest) if guest.Status == api.VM_READY && jsonutils.QueryBoolean(task.Params, "auto_start", false) { task.SetStage("OnGuestStartComplete", nil) - guest.StartGueststartTask(ctx, task.UserCred, nil, task.GetTaskId()) + drv := guest.GetDriver() + if err := drv.PerformStart(ctx, task.GetUserCred(), guest, nil, task.GetTaskId()); err != nil { + task.OnGuestStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) + return + } } else { dt := jsonutils.NewDict() dt.Add(jsonutils.NewString(guest.Id), "id")