diff --git a/go.mod b/go.mod index 618a87362c..a52eba9754 100644 --- a/go.mod +++ b/go.mod @@ -83,7 +83,7 @@ require ( k8s.io/client-go v0.19.3 k8s.io/cluster-bootstrap v0.19.3 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230904084148-c98f51a511c0 + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230910053442-8d45e74f111b yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 yunion.io/x/jsonutils v1.0.1-0.20230613121553-0f3b41e2ef19 yunion.io/x/log v1.0.1-0.20230411060016-feb3f46ab361 diff --git a/go.sum b/go.sum index 39933c1b87..cdbfcac02c 100644 --- a/go.sum +++ b/go.sum @@ -1174,8 +1174,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230904084148-c98f51a511c0 h1:Xr/uiR0SjP5CPlAkJZAsJ6trL0wsJP7yRFQUpqKE5jM= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230904084148-c98f51a511c0/go.mod h1:2sgCN7nRPQL3woLfdgqLDd92vwAHqtlz3KKiHxC5BAw= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230910053442-8d45e74f111b h1:Kw1gNCTZ0uED77s051x7n1RyiEha5hltoF/5hxHRmAI= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230910053442-8d45e74f111b/go.mod h1:2sgCN7nRPQL3woLfdgqLDd92vwAHqtlz3KKiHxC5BAw= yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 h1:v7POYkQwo1XzOxBoIoRVr/k0V9Y5JyjpshlIFa9raug= yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= diff --git a/pkg/compute/guestdrivers/aliyun.go b/pkg/compute/guestdrivers/aliyun.go index 6fd98728e9..a954de0eb9 100644 --- a/pkg/compute/guestdrivers/aliyun.go +++ b/pkg/compute/guestdrivers/aliyun.go @@ -83,7 +83,7 @@ func (self *SAliyunGuestDriver) GetStorageTypes() []string { } func (self *SAliyunGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SAliyunGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/aws.go b/pkg/compute/guestdrivers/aws.go index e2a74e1347..43532c3f9c 100644 --- a/pkg/compute/guestdrivers/aws.go +++ b/pkg/compute/guestdrivers/aws.go @@ -164,7 +164,7 @@ func (self *SAwsGuestDriver) GetStorageTypes() []string { } func (self *SAwsGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SAwsGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index 09ac4b184a..c236bab739 100644 --- a/pkg/compute/guestdrivers/azure.go +++ b/pkg/compute/guestdrivers/azure.go @@ -79,7 +79,7 @@ func (self *SAzureGuestDriver) GetStorageTypes() []string { } func (self *SAzureGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SAzureGuestDriver) GetMaxSecurityGroupCount() int { diff --git a/pkg/compute/guestdrivers/base.go b/pkg/compute/guestdrivers/base.go index 5108439c0e..b4d1bbdc1b 100644 --- a/pkg/compute/guestdrivers/base.go +++ b/pkg/compute/guestdrivers/base.go @@ -57,11 +57,11 @@ type SBaseGuestDriver struct { SBaseGuestScheduleDriver } -func (self *SBaseGuestDriver) IsAllowSaveImageOnRunning() bool { +func (drv *SBaseGuestDriver) IsAllowSaveImageOnRunning() bool { return false } -func (self *SBaseGuestDriver) StartGuestCreateTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict, pendingUsage quotas.IQuota, parentTaskId string) error { +func (drv *SBaseGuestDriver) StartGuestCreateTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict, pendingUsage quotas.IQuota, parentTaskId string) error { task, err := taskman.TaskManager.NewTask(ctx, "GuestCreateTask", guest, userCred, data, parentTaskId, "", pendingUsage) if err != nil { return err @@ -70,7 +70,7 @@ func (self *SBaseGuestDriver) StartGuestCreateTask(guest *models.SGuest, ctx con return nil } -func (self *SBaseGuestDriver) OnGuestCreateTaskComplete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) OnGuestCreateTaskComplete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { duration, _ := task.GetParams().GetString("duration") if len(duration) > 0 { bc, err := billing.ParseBillingCycle(duration) @@ -95,7 +95,7 @@ func (self *SBaseGuestDriver) OnGuestCreateTaskComplete(ctx context.Context, gue } } -func (self *SBaseGuestDriver) StartDeleteGuestTask(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, params *jsonutils.JSONDict, parentTaskId string) error { +func (drv *SBaseGuestDriver) StartDeleteGuestTask(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, params *jsonutils.JSONDict, parentTaskId string) error { task, err := taskman.TaskManager.NewTask(ctx, "GuestDeleteTask", guest, userCred, params, parentTaskId, "", nil) if err != nil { return err @@ -104,114 +104,114 @@ func (self *SBaseGuestDriver) StartDeleteGuestTask(ctx context.Context, userCred return nil } -func (self *SBaseGuestDriver) ValidateImage(ctx context.Context, image *cloudprovider.SImage) error { +func (drv *SBaseGuestDriver) ValidateImage(ctx context.Context, image *cloudprovider.SImage) error { return nil } -func (self *SBaseGuestDriver) RequestDetachDisksFromGuestForDelete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestDetachDisksFromGuestForDelete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { task.ScheduleRun(nil) return nil } -func (self *SBaseGuestDriver) OnDeleteGuestFinalCleanup(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential) error { +func (drv *SBaseGuestDriver) OnDeleteGuestFinalCleanup(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential) error { return guest.DeleteAllDisksInDB(ctx, userCred) } -func (self *SBaseGuestDriver) RequestDetachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestDetachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { task.ScheduleRun(nil) return nil } -func (self *SBaseGuestDriver) RequestAttachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestAttachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { task.ScheduleRun(nil) return nil } -func (self *SBaseGuestDriver) RequestOpenForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.OpenForwardRequest) (*guestdriver_types.OpenForwardResponse, error) { +func (drv *SBaseGuestDriver) RequestOpenForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.OpenForwardRequest) (*guestdriver_types.OpenForwardResponse, error) { return nil, cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestListForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.ListForwardRequest) (*guestdriver_types.ListForwardResponse, error) { +func (drv *SBaseGuestDriver) RequestListForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.ListForwardRequest) (*guestdriver_types.ListForwardResponse, error) { return nil, cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestCloseForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.CloseForwardRequest) (*guestdriver_types.CloseForwardResponse, error) { +func (drv *SBaseGuestDriver) RequestCloseForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.CloseForwardRequest) (*guestdriver_types.CloseForwardResponse, error) { return nil, cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestSaveImage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSaveImage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { return errors.Wrapf(cloudprovider.ErrNotImplemented, "RequestSaveImage") } -func (self *SBaseGuestDriver) RequestGuestCreateAllDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestGuestCreateAllDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) GetDetachDiskStatus() ([]string, error) { +func (drv *SBaseGuestDriver) GetDetachDiskStatus() ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetDetachDiskStatus") } -func (self *SBaseGuestDriver) GetAttachDiskStatus() ([]string, error) { +func (drv *SBaseGuestDriver) GetAttachDiskStatus() ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetAttachDiskStatus") } -func (self *SBaseGuestDriver) GetRebuildRootStatus() ([]string, error) { +func (drv *SBaseGuestDriver) GetRebuildRootStatus() ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetRebuildRootStatus") } -func (self *SBaseGuestDriver) IsRebuildRootSupportChangeImage() bool { +func (drv *SBaseGuestDriver) IsRebuildRootSupportChangeImage() bool { return true } -func (self *SBaseGuestDriver) IsRebuildRootSupportChangeUEFI() bool { +func (drv *SBaseGuestDriver) IsRebuildRootSupportChangeUEFI() bool { return true } -func (self *SBaseGuestDriver) GetChangeConfigStatus(guest *models.SGuest) ([]string, error) { +func (drv *SBaseGuestDriver) GetChangeConfigStatus(guest *models.SGuest) ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetChangeConfigStatus") } -func (self *SBaseGuestDriver) ValidateChangeConfig(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, cpuChanged bool, memChanged bool, newDisks []*api.DiskConfig) error { +func (drv *SBaseGuestDriver) ValidateChangeConfig(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, cpuChanged bool, memChanged bool, newDisks []*api.DiskConfig) error { return nil } -func (self *SBaseGuestDriver) ValidateDetachDisk(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, disk *models.SDisk) error { +func (drv *SBaseGuestDriver) ValidateDetachDisk(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, disk *models.SDisk) error { return nil } -func (self *SBaseGuestDriver) ValidateCreateEip(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerCreateEipInput) error { +func (drv *SBaseGuestDriver) ValidateCreateEip(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerCreateEipInput) error { return httperrors.NewInputParameterError("Not Implement ValidateCreateEip") } -func (self *SBaseGuestDriver) ValidateResizeDisk(guest *models.SGuest, disk *models.SDisk, storage *models.SStorage) error { +func (drv *SBaseGuestDriver) ValidateResizeDisk(guest *models.SGuest, disk *models.SDisk, storage *models.SStorage) error { return fmt.Errorf("This Guest driver dose not implement ValidateResizeDisk") } -func (self *SBaseGuestDriver) GetDeployStatus() ([]string, error) { +func (drv *SBaseGuestDriver) GetDeployStatus() ([]string, error) { return []string{}, fmt.Errorf("This Guest driver dose not implement GetDeployStatus") } -func (self *SBaseGuestDriver) IsNeedRestartForResetLoginInfo() bool { +func (drv *SBaseGuestDriver) IsNeedRestartForResetLoginInfo() bool { return true } -func (self *SBaseGuestDriver) RequestDeleteDetachedDisk(ctx context.Context, disk *models.SDisk, task taskman.ITask, isPurge bool) error { +func (drv *SBaseGuestDriver) RequestDeleteDetachedDisk(ctx context.Context, disk *models.SDisk, task taskman.ITask, isPurge bool) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestSuspendOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSuspendOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestResumeOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestResumeOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) StartGuestResetTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, isHard bool, parentTaskId string) error { +func (drv *SBaseGuestDriver) StartGuestResetTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, isHard bool, parentTaskId string) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) StartGuestRestartTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, isForce bool, parentTaskId string) error { +func (drv *SBaseGuestDriver) StartGuestRestartTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, isForce bool, parentTaskId string) error { data := jsonutils.NewDict() data.Set("is_force", jsonutils.NewBool(isForce)) if err := guest.SetStatus(userCred, api.VM_STOPPING, ""); err != nil { @@ -225,248 +225,248 @@ func (self *SBaseGuestDriver) StartGuestRestartTask(guest *models.SGuest, ctx co return nil } -func (self *SBaseGuestDriver) RequestSoftReset(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSoftReset(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) AllowReconfigGuest() bool { +func (drv *SBaseGuestDriver) AllowReconfigGuest() bool { return true } -func (self *SBaseGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *models.SGuest, task taskman.ITask, instanceType string, vcpuCount, vmemSize int64) error { +func (drv *SBaseGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *models.SGuest, task taskman.ITask, instanceType string, vcpuCount, vmemSize int64) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) NeedRequestGuestHotAddIso(ctx context.Context, guest *models.SGuest) bool { +func (drv *SBaseGuestDriver) NeedRequestGuestHotAddIso(ctx context.Context, guest *models.SGuest) bool { return false } -func (self *SBaseGuestDriver) RequestGuestHotAddIso(ctx context.Context, guest *models.SGuest, path string, boot bool, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestGuestHotAddIso(ctx context.Context, guest *models.SGuest, path string, boot bool, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestGuestHotRemoveIso(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestGuestHotRemoveIso(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestRebuildRootDisk(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestRebuildRootDisk(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) NeedRequestGuestHotAddVfd(ctx context.Context, guest *models.SGuest) bool { +func (drv *SBaseGuestDriver) NeedRequestGuestHotAddVfd(ctx context.Context, guest *models.SGuest) bool { return false } -func (self *SBaseGuestDriver) RequestGuestHotAddVfd(ctx context.Context, guest *models.SGuest, path string, boot bool, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestGuestHotAddVfd(ctx context.Context, guest *models.SGuest, path string, boot bool, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestGuestHotRemoveVfd(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestGuestHotRemoveVfd(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, snapshotId, diskId string) error { +func (drv *SBaseGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, snapshotId, diskId string) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestDeleteSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { +func (drv *SBaseGuestDriver) RequestDeleteSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestReloadDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { +func (drv *SBaseGuestDriver) RequestReloadDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestSyncToBackup(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSyncToBackup(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) RequestSlaveBlockStreamDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSlaveBlockStreamDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement") } -func (self *SBaseGuestDriver) GetMaxSecurityGroupCount() int { +func (drv *SBaseGuestDriver) GetMaxSecurityGroupCount() int { return 5 } -func (self *SBaseGuestDriver) getTaskRequestHeader(task taskman.ITask) http.Header { +func (drv *SBaseGuestDriver) getTaskRequestHeader(task taskman.ITask) http.Header { return task.GetTaskRequestHeader() } -func (self *SBaseGuestDriver) IsSupportedBillingCycle(bc billing.SBillingCycle) bool { +func (drv *SBaseGuestDriver) IsSupportedBillingCycle(bc billing.SBillingCycle) bool { return true } -func (self *SBaseGuestDriver) IsSupportPostpaidExpire() bool { +func (drv *SBaseGuestDriver) IsSupportPostpaidExpire() bool { return true } -func (self *SBaseGuestDriver) IsSupportShutdownMode() bool { +func (drv *SBaseGuestDriver) IsSupportShutdownMode() bool { return false } -func (self *SBaseGuestDriver) RequestRenewInstance(ctx context.Context, guest *models.SGuest, bc billing.SBillingCycle) (time.Time, error) { +func (drv *SBaseGuestDriver) RequestRenewInstance(ctx context.Context, guest *models.SGuest, bc billing.SBillingCycle) (time.Time, error) { return time.Time{}, nil } -func (self *SBaseGuestDriver) IsSupportEip() bool { +func (drv *SBaseGuestDriver) IsSupportEip() bool { return false } -func (self *SBaseGuestDriver) IsSupportPublicIp() bool { +func (drv *SBaseGuestDriver) IsSupportPublicIp() bool { return false } -func (self *SBaseGuestDriver) NeedStopForChangeSpec(ctx context.Context, guest *models.SGuest, cpuChanged, memChanged bool) bool { +func (drv *SBaseGuestDriver) NeedStopForChangeSpec(ctx context.Context, guest *models.SGuest, cpuChanged, memChanged bool) bool { return false } -func (self *SBaseGuestDriver) RemoteDeployGuestForCreate(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SBaseGuestDriver) RemoteDeployGuestForCreate(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { return nil, cloudprovider.ErrNotSupported } -func (self *SBaseGuestDriver) RemoteDeployGuestSyncHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, iVM cloudprovider.ICloudVM) (cloudprovider.ICloudHost, error) { +func (drv *SBaseGuestDriver) RemoteDeployGuestSyncHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, iVM cloudprovider.ICloudVM) (cloudprovider.ICloudHost, error) { return nil, cloudprovider.ErrNotSupported } -func (self *SBaseGuestDriver) RemoteActionAfterGuestCreated(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, ivm cloudprovider.ICloudVM, desc *cloudprovider.SManagedVMCreateConfig) { +func (drv *SBaseGuestDriver) RemoteActionAfterGuestCreated(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, ivm cloudprovider.ICloudVM, desc *cloudprovider.SManagedVMCreateConfig) { return } -func (self *SBaseGuestDriver) RemoteDeployGuestForDeploy(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SBaseGuestDriver) RemoteDeployGuestForDeploy(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { return nil, cloudprovider.ErrNotSupported } -func (self *SBaseGuestDriver) RemoteDeployGuestForRebuildRoot(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SBaseGuestDriver) RemoteDeployGuestForRebuildRoot(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { return nil, cloudprovider.ErrNotSupported } -func (self *SBaseGuestDriver) GetGuestInitialStateAfterCreate() string { +func (drv *SBaseGuestDriver) GetGuestInitialStateAfterCreate() string { return api.VM_READY } -func (self *SBaseGuestDriver) GetGuestInitialStateAfterRebuild() string { +func (drv *SBaseGuestDriver) GetGuestInitialStateAfterRebuild() string { return api.VM_READY } -func (self *SBaseGuestDriver) IsNeedInjectPasswordByCloudInit() bool { +func (drv *SBaseGuestDriver) IsNeedInjectPasswordByCloudInit() bool { return false } -func (self *SBaseGuestDriver) GetWindowsUserDataType() string { +func (drv *SBaseGuestDriver) GetWindowsUserDataType() string { return cloudprovider.CLOUD_POWER_SHELL } -func (self *SBaseGuestDriver) IsWindowsUserDataTypeNeedEncode() bool { +func (drv *SBaseGuestDriver) IsWindowsUserDataTypeNeedEncode() bool { return false } -func (self *SBaseGuestDriver) IsSupportdDcryptPasswordFromSecretKey() bool { +func (drv *SBaseGuestDriver) IsSupportdDcryptPasswordFromSecretKey() bool { return true } -func (self *SBaseGuestDriver) GetUserDataType() string { +func (drv *SBaseGuestDriver) GetUserDataType() string { return cloudprovider.CLOUD_CONFIG } -func (self *SBaseGuestDriver) GetDefaultAccount(osType, osDist, imageType string) string { +func (drv *SBaseGuestDriver) GetDefaultAccount(osType, osDist, imageType string) string { if strings.ToLower(osType) == strings.ToLower(osprofile.OS_TYPE_WINDOWS) { return api.VM_DEFAULT_WINDOWS_LOGIN_USER } return api.VM_DEFAULT_LINUX_LOGIN_USER } -func (self *SBaseGuestDriver) OnGuestChangeCpuMemFailed(ctx context.Context, guest *models.SGuest, data *jsonutils.JSONDict, task taskman.ITask) error { +func (drv *SBaseGuestDriver) OnGuestChangeCpuMemFailed(ctx context.Context, guest *models.SGuest, data *jsonutils.JSONDict, task taskman.ITask) error { return nil } -func (self *SBaseGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { return fmt.Errorf("SBaseGuestDriver: Not Implement") } -func (self *SBaseGuestDriver) IsSupportGuestClone() bool { +func (drv *SBaseGuestDriver) IsSupportGuestClone() bool { return true } -func (self *SBaseGuestDriver) RequestSyncSecgroupsOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSyncSecgroupsOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { return nil // do nothing } -func (self *SBaseGuestDriver) CancelExpireTime( +func (drv *SBaseGuestDriver) CancelExpireTime( ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest) error { return guest.CancelExpireTime(ctx, userCred) } -func (self *SBaseGuestDriver) IsSupportPublicipToEip() bool { +func (drv *SBaseGuestDriver) IsSupportPublicipToEip() bool { return false } -func (self *SBaseGuestDriver) RequestConvertPublicipToEip(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestConvertPublicipToEip(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { return fmt.Errorf("Not Implement RequestConvertPublicipToEip") } -func (self *SBaseGuestDriver) IsSupportSetAutoRenew() bool { +func (drv *SBaseGuestDriver) IsSupportSetAutoRenew() bool { return false } -func (self *SBaseGuestDriver) RequestSetAutoRenewInstance(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input api.GuestAutoRenewInput, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSetAutoRenewInstance(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input api.GuestAutoRenewInput, task taskman.ITask) error { return fmt.Errorf("Not Implement RequestSetAutoRenewInstance") } -func (self *SBaseGuestDriver) IsSupportMigrate() bool { +func (drv *SBaseGuestDriver) IsSupportMigrate() bool { return false } -func (self *SBaseGuestDriver) IsSupportLiveMigrate() bool { +func (drv *SBaseGuestDriver) IsSupportLiveMigrate() bool { return false } -func (self *SBaseGuestDriver) CheckMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestMigrateInput) error { +func (drv *SBaseGuestDriver) CheckMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestMigrateInput) error { return httperrors.NewNotAcceptableError("Not allow for hypervisor %s", guest.GetHypervisor()) } -func (self *SBaseGuestDriver) CheckLiveMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestLiveMigrateInput) error { +func (drv *SBaseGuestDriver) CheckLiveMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestLiveMigrateInput) error { return httperrors.NewNotAcceptableError("Not allow for hypervisor %s", guest.GetHypervisor()) } -func (self *SBaseGuestDriver) RequestMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestMigrateInput, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestMigrateInput, task taskman.ITask) error { return errors.Wrapf(cloudprovider.ErrNotImplemented, "RequestMigrate") } -func (self *SBaseGuestDriver) RequestLiveMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestLiveMigrateInput, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestLiveMigrate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.GuestLiveMigrateInput, task taskman.ITask) error { return errors.Wrapf(cloudprovider.ErrNotImplemented, "RequestLiveMigrate") } -func (self *SVirtualizedGuestDriver) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { +func (drv *SVirtualizedGuestDriver) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { return input, nil } -func (self *SBaseGuestDriver) ValidateUpdateData(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.ServerUpdateInput) (api.ServerUpdateInput, error) { +func (drv *SBaseGuestDriver) ValidateUpdateData(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, input api.ServerUpdateInput) (api.ServerUpdateInput, error) { return input, nil } -func (self *SBaseGuestDriver) RequestRemoteUpdate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, replaceTags bool) error { +func (drv *SBaseGuestDriver) RequestRemoteUpdate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, replaceTags bool) error { // nil ops return nil } -func (self *SBaseGuestDriver) ValidateRebuildRoot(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerRebuildRootInput) (*api.ServerRebuildRootInput, error) { +func (drv *SBaseGuestDriver) ValidateRebuildRoot(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerRebuildRootInput) (*api.ServerRebuildRootInput, error) { return input, nil } -func (self *SBaseGuestDriver) ValidateDetachNetwork(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest) error { +func (drv *SBaseGuestDriver) ValidateDetachNetwork(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest) error { return nil } -func (self *SBaseGuestDriver) ValidateChangeDiskStorage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, targetStorageId string) error { +func (drv *SBaseGuestDriver) ValidateChangeDiskStorage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, targetStorageId string) error { return cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) StartChangeDiskStorageTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, params *api.ServerChangeDiskStorageInternalInput, parentTaskId string) error { +func (drv *SBaseGuestDriver) StartChangeDiskStorageTask(guest *models.SGuest, ctx context.Context, userCred mcclient.TokenCredential, params *api.ServerChangeDiskStorageInternalInput, parentTaskId string) error { task, err := taskman.TaskManager.NewTask(ctx, "GuestChangeDiskStorageTask", guest, userCred, jsonutils.Marshal(params).(*jsonutils.JSONDict), parentTaskId, "", nil) if err != nil { return err @@ -475,40 +475,40 @@ func (self *SBaseGuestDriver) StartChangeDiskStorageTask(guest *models.SGuest, c return nil } -func (self *SBaseGuestDriver) RequestChangeDiskStorage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerChangeDiskStorageInternalInput, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestChangeDiskStorage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerChangeDiskStorageInternalInput, task taskman.ITask) error { return cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestSwitchToTargetStorageDisk(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerChangeDiskStorageInternalInput, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSwitchToTargetStorageDisk(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input *api.ServerChangeDiskStorageInternalInput, task taskman.ITask) error { return cloudprovider.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestSyncIsolatedDevice(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SBaseGuestDriver) RequestSyncIsolatedDevice(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { task.ScheduleRun(nil) return nil } -func (self *SBaseGuestDriver) RequestCPUSet(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, guest *models.SGuest, input *api.ServerCPUSetInput) (*api.ServerCPUSetResp, error) { +func (drv *SBaseGuestDriver) RequestCPUSet(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, guest *models.SGuest, input *api.ServerCPUSetInput) (*api.ServerCPUSetResp, error) { return nil, httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestCPUSetRemove(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, guest *models.SGuest, input *api.ServerCPUSetRemoveInput) error { +func (drv *SBaseGuestDriver) RequestCPUSetRemove(ctx context.Context, userCred mcclient.TokenCredential, host *models.SHost, guest *models.SGuest, input *api.ServerCPUSetRemoveInput) error { return httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) QgaRequestGuestPing(ctx context.Context, header http.Header, host *models.SHost, guest *models.SGuest, async bool, input *api.ServerQgaTimeoutInput) error { +func (drv *SBaseGuestDriver) QgaRequestGuestPing(ctx context.Context, header http.Header, host *models.SHost, guest *models.SGuest, async bool, input *api.ServerQgaTimeoutInput) error { return httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) QgaRequestSetUserPassword(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerQgaSetPasswordInput) error { +func (drv *SBaseGuestDriver) QgaRequestSetUserPassword(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerQgaSetPasswordInput) error { return httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestQgaCommand(ctx context.Context, userCred mcclient.TokenCredential, body jsonutils.JSONObject, host *models.SHost, guest *models.SGuest) (jsonutils.JSONObject, error) { +func (drv *SBaseGuestDriver) RequestQgaCommand(ctx context.Context, userCred mcclient.TokenCredential, body jsonutils.JSONObject, host *models.SHost, guest *models.SGuest) (jsonutils.JSONObject, error) { return nil, httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) FetchMonitorUrl(ctx context.Context, guest *models.SGuest) string { +func (drv *SBaseGuestDriver) FetchMonitorUrl(ctx context.Context, guest *models.SGuest) string { s := auth.GetAdminSessionWithPublic(ctx, consts.GetRegion()) influxdbUrl, err := s.GetServiceURL(apis.SERVICE_TYPE_INFLUXDB, options.Options.MonitorEndpointType) if err != nil { @@ -517,10 +517,14 @@ func (self *SBaseGuestDriver) FetchMonitorUrl(ctx context.Context, guest *models return influxdbUrl } -func (self *SBaseGuestDriver) RequestResetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerNicTrafficLimit) error { +func (drv *SBaseGuestDriver) RequestResetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerNicTrafficLimit) error { return httperrors.ErrNotImplemented } -func (self *SBaseGuestDriver) RequestSetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerNicTrafficLimit) error { +func (drv *SBaseGuestDriver) RequestSetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *models.SHost, guest *models.SGuest, input *api.ServerNicTrafficLimit) error { return httperrors.ErrNotImplemented } + +func (drv *SBaseGuestDriver) SyncOsInfo(ctx context.Context, userCred mcclient.TokenCredential, g *models.SGuest, extVM cloudprovider.IOSInfo) error { + return nil +} diff --git a/pkg/compute/guestdrivers/esxi.go b/pkg/compute/guestdrivers/esxi.go index 73699906aa..f1bced623a 100644 --- a/pkg/compute/guestdrivers/esxi.go +++ b/pkg/compute/guestdrivers/esxi.go @@ -780,3 +780,33 @@ func (self *SESXiGuestDriver) StartDeleteGuestTask(ctx context.Context, userCred params.Add(jsonutils.JSONTrue, "delete_snapshots") return self.SBaseGuestDriver.StartDeleteGuestTask(ctx, userCred, guest, params, parentTaskId) } + +func (self *SESXiGuestDriver) SyncOsInfo(ctx context.Context, userCred mcclient.TokenCredential, g *models.SGuest, extVM cloudprovider.IOSInfo) error { + ometa, err := g.GetAllMetadata(ctx, userCred) + if err != nil { + return errors.Wrap(err, "GetAllMetadata") + } + // save os info + osinfo := map[string]interface{}{} + for k, v := range map[string]string{ + "os_full_name": extVM.GetFullOsName(), + "os_name": string(extVM.GetOsType()), + "os_arch": extVM.GetOsArch(), + "os_type": string(extVM.GetOsType()), + "os_distribution": extVM.GetOsDist(), + "os_version": extVM.GetOsVersion(), + "os_language": extVM.GetOsLang(), + } { + if len(v) == 0 || len(ometa[k]) > 0 { + continue + } + osinfo[k] = v + } + if len(osinfo) > 0 { + err := g.SetAllMetadata(ctx, osinfo, userCred) + if err != nil { + return errors.Wrap(err, "SetAllMetadata") + } + } + return nil +} diff --git a/pkg/compute/guestdrivers/google.go b/pkg/compute/guestdrivers/google.go index 8ad473b4f7..01e8c0d200 100644 --- a/pkg/compute/guestdrivers/google.go +++ b/pkg/compute/guestdrivers/google.go @@ -110,7 +110,7 @@ func (self *SGoogleGuestDriver) GetStorageTypes() []string { } func (self *SGoogleGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SGoogleGuestDriver) GetGuestInitialStateAfterCreate() string { diff --git a/pkg/compute/guestdrivers/h3c.go b/pkg/compute/guestdrivers/h3c.go index 45254e2303..d9d45f0296 100644 --- a/pkg/compute/guestdrivers/h3c.go +++ b/pkg/compute/guestdrivers/h3c.go @@ -83,7 +83,7 @@ func (self *SH3CGuestDriver) GetStorageTypes() []string { } func (self *SH3CGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SH3CGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/hcs.go b/pkg/compute/guestdrivers/hcs.go index b114857866..76588da4f4 100644 --- a/pkg/compute/guestdrivers/hcs.go +++ b/pkg/compute/guestdrivers/hcs.go @@ -83,7 +83,7 @@ func (self *SHCSGuestDriver) GetStorageTypes() []string { } func (self *SHCSGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SHCSGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/hcsop.go b/pkg/compute/guestdrivers/hcsop.go index d7a9c91eb7..a4eb2795e1 100644 --- a/pkg/compute/guestdrivers/hcsop.go +++ b/pkg/compute/guestdrivers/hcsop.go @@ -83,7 +83,7 @@ func (self *SHCSOPGuestDriver) GetStorageTypes() []string { } func (self *SHCSOPGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SHCSOPGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/huawei.go b/pkg/compute/guestdrivers/huawei.go index 675e059e1d..61b270ea57 100644 --- a/pkg/compute/guestdrivers/huawei.go +++ b/pkg/compute/guestdrivers/huawei.go @@ -74,7 +74,7 @@ func (self *SHuaweiGuestDriver) GetStorageTypes() []string { } func (self *SHuaweiGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SHuaweiGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/huaweistack.go b/pkg/compute/guestdrivers/huaweistack.go index 7929538d94..95adf9ef29 100644 --- a/pkg/compute/guestdrivers/huaweistack.go +++ b/pkg/compute/guestdrivers/huaweistack.go @@ -78,7 +78,7 @@ func (self *SHCSOGuestDriver) GetStorageTypes() []string { } func (self *SHCSOGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SHCSOGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index de86be7726..737111f41e 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -60,7 +60,7 @@ func (d SManagedVirtualizedGuestDriver) DoScheduleStorageFilter() bool { return func (d SManagedVirtualizedGuestDriver) DoScheduleCloudproviderTagFilter() bool { return true } -func (self *SManagedVirtualizedGuestDriver) GetJsonDescAtHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, params *jsonutils.JSONDict) (jsonutils.JSONObject, error) { +func (drv *SManagedVirtualizedGuestDriver) GetJsonDescAtHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, params *jsonutils.JSONDict) (jsonutils.JSONObject, error) { config := cloudprovider.SManagedVMCreateConfig{ IsNeedInjectPasswordByCloudInit: guest.GetDriver().IsNeedInjectPasswordByCloudInit(), UserDataType: guest.GetDriver().GetUserDataType(), @@ -173,7 +173,7 @@ func (self *SManagedVirtualizedGuestDriver) GetJsonDescAtHost(ctx context.Contex return jsonutils.Marshal(&config), nil } -func (self *SManagedVirtualizedGuestDriver) RequestSaveImage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestSaveImage(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iVm, err := guest.GetIVM(ctx) if err != nil { @@ -282,7 +282,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSaveImage(ctx context.Context return nil } -func (self *SManagedVirtualizedGuestDriver) RequestGuestCreateAllDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestGuestCreateAllDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { diskCat := guest.CategorizeDisks() var imageId string if diskCat.Root != nil { @@ -309,7 +309,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestGuestCreateAllDisks(ctx conte return storageCache.StartImageCacheTask(ctx, task.GetUserCred(), input) } -func (self *SManagedVirtualizedGuestDriver) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { +func (drv *SManagedVirtualizedGuestDriver) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerCreateInput) (*api.ServerCreateInput, error) { if input.Cdrom != "" { return nil, httperrors.NewInputParameterError("%s not support cdrom params", input.Hypervisor) } @@ -323,11 +323,11 @@ func (self *SManagedVirtualizedGuestDriver) ValidateCreateData(ctx context.Conte return input, nil } -func (self *SManagedVirtualizedGuestDriver) ValidateCreateEip(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerCreateEipInput) error { +func (drv *SManagedVirtualizedGuestDriver) ValidateCreateEip(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerCreateEipInput) error { return nil } -func (self *SManagedVirtualizedGuestDriver) RequestDetachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestDetachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iVM, err := guest.GetIVM(ctx) if err != nil { @@ -384,7 +384,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestDetachDisk(ctx context.Contex return nil } -func (self *SManagedVirtualizedGuestDriver) RequestAttachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestAttachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iVM, err := guest.GetIVM(ctx) if err != nil { @@ -432,7 +432,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestAttachDisk(ctx context.Contex return nil } -func (self *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, userCred mcclient.TokenCredential, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, userCred mcclient.TokenCredential, task taskman.ITask) error { ivm, err := guest.GetIVM(ctx) if err != nil { return errors.Wrapf(err, "GetIVM") @@ -455,7 +455,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestStartOnHost(ctx context.Conte return guest.SetStatus(userCred, api.VM_RUNNING, "StartOnHost") } -func (self *SManagedVirtualizedGuestDriver) RequestDeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestDeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { config, err := guest.GetDeployConfigOnHost(ctx, task.GetUserCred(), host, task.GetParams()) if err != nil { return errors.Wrapf(err, "GetDeployConfigOnHost") @@ -560,15 +560,15 @@ func (self *SManagedVirtualizedGuestDriver) RequestDeployGuestOnHost(ctx context return nil } -func (self *SManagedVirtualizedGuestDriver) GetGuestInitialStateAfterCreate() string { +func (drv *SManagedVirtualizedGuestDriver) GetGuestInitialStateAfterCreate() string { return api.VM_READY } -func (self *SManagedVirtualizedGuestDriver) GetGuestInitialStateAfterRebuild() string { +func (drv *SManagedVirtualizedGuestDriver) GetGuestInitialStateAfterRebuild() string { return api.VM_READY } -func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForCreate(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SManagedVirtualizedGuestDriver) RemoteDeployGuestForCreate(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { ihost, err := host.GetIHost(ctx) if err != nil { return nil, errors.Wrapf(err, "RemoteDeployGuestForCreate.GetIHost") @@ -694,7 +694,7 @@ func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForCreate(ctx conte return data, nil } -func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestSyncHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, iVM cloudprovider.ICloudVM) (cloudprovider.ICloudHost, error) { +func (drv *SManagedVirtualizedGuestDriver) RemoteDeployGuestSyncHost(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, iVM cloudprovider.ICloudVM) (cloudprovider.ICloudHost, error) { if hostId := iVM.GetIHostId(); len(hostId) > 0 { nh, err := db.FetchByExternalIdAndManagerId(models.HostManager, hostId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { return q.Equals("manager_id", host.ManagerId) @@ -710,7 +710,7 @@ func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestSyncHost(ctx contex return host.GetIHost(ctx) } -func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForDeploy(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SManagedVirtualizedGuestDriver) RemoteDeployGuestForDeploy(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { iVM, err := ihost.GetIVMById(guest.GetExternalId()) if err != nil || iVM == nil { log.Errorf("cannot find vm %s", err) @@ -762,7 +762,7 @@ func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForDeploy(ctx conte return data, nil } -func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForRebuildRoot(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { +func (drv *SManagedVirtualizedGuestDriver) RemoteDeployGuestForRebuildRoot(ctx context.Context, guest *models.SGuest, ihost cloudprovider.ICloudHost, task taskman.ITask, desc cloudprovider.SManagedVMCreateConfig) (jsonutils.JSONObject, error) { iVM, err := ihost.GetIVMById(guest.GetExternalId()) if err != nil { return nil, errors.Wrapf(err, "ihost.GetIVMById(%s)", guest.GetExternalId()) @@ -837,7 +837,7 @@ func (self *SManagedVirtualizedGuestDriver) RemoteDeployGuestForRebuildRoot(ctx return data, nil } -func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { ihost, err := host.GetIHost(ctx) if err != nil { @@ -894,7 +894,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx conte return nil } -func (self *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error { +func (drv *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { ivm, err := guest.GetIVM(ctx) if err != nil { @@ -919,7 +919,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestStopOnHost(ctx context.Contex return nil } -func (self *SManagedVirtualizedGuestDriver) RequestSyncstatusOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, userCred mcclient.TokenCredential, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestSyncstatusOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, userCred mcclient.TokenCredential, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { ihost, err := host.GetIHost(ctx) if err != nil { @@ -944,7 +944,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncstatusOnHost(ctx context. return nil } -func (self *SManagedVirtualizedGuestDriver) GetGuestVncInfo(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, input *cloudprovider.ServerVncInput) (*cloudprovider.ServerVncOutput, error) { +func (drv *SManagedVirtualizedGuestDriver) GetGuestVncInfo(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost, input *cloudprovider.ServerVncInput) (*cloudprovider.ServerVncOutput, error) { ihost, err := host.GetIHost(ctx) if err != nil { return nil, err @@ -959,7 +959,7 @@ func (self *SManagedVirtualizedGuestDriver) GetGuestVncInfo(ctx context.Context, return iVM.GetVNCInfo(input) } -func (self *SManagedVirtualizedGuestDriver) RequestRebuildRootDisk(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestRebuildRootDisk(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { subtask, err := taskman.TaskManager.NewTask(ctx, "ManagedGuestRebuildRootTask", guest, task.GetUserCred(), task.GetParams(), task.GetTaskId(), "", nil) if err != nil { return err @@ -968,7 +968,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestRebuildRootDisk(ctx context.C return nil } -func (self *SManagedVirtualizedGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { subtask, err := taskman.TaskManager.NewTask(ctx, "ManagedGuestCreateDiskTask", guest, task.GetUserCred(), task.GetParams(), task.GetTaskId(), "", nil) if err != nil { return err @@ -977,7 +977,7 @@ func (self *SManagedVirtualizedGuestDriver) DoGuestCreateDisksTask(ctx context.C return nil } -func (self *SManagedVirtualizedGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *models.SGuest, task taskman.ITask, instanceType string, vcpuCount, vmemSize int64) error { +func (drv *SManagedVirtualizedGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *models.SGuest, task taskman.ITask, instanceType string, vcpuCount, vmemSize int64) error { host, _ := guest.GetHost() ihost, err := host.GetIHost(ctx) if err != nil { @@ -1054,7 +1054,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestChangeVmConfig(ctx context.Co return nil } -func (self *SManagedVirtualizedGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Context, guest *models.SGuest, task taskman.ITask, data jsonutils.JSONObject) error { +func (drv *SManagedVirtualizedGuestDriver) OnGuestDeployTaskDataReceived(ctx context.Context, guest *models.SGuest, task taskman.ITask, data jsonutils.JSONObject) error { uuid, _ := data.GetString("uuid") if len(uuid) > 0 { @@ -1176,7 +1176,7 @@ func (self *SManagedVirtualizedGuestDriver) OnGuestDeployTaskDataReceived(ctx co return nil } -func (self *SManagedVirtualizedGuestDriver) RequestSyncSecgroupsOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestSyncSecgroupsOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { iVM, err := guest.GetIVM(ctx) if err != nil { return err @@ -1218,7 +1218,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncSecgroupsOnHost(ctx conte return iVM.SetSecurityGroups(externalIds) } -func (self *SManagedVirtualizedGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { if jsonutils.QueryBoolean(task.GetParams(), "fw_only", false) { @@ -1233,7 +1233,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncConfigOnHost(ctx context. return nil } -func (self *SManagedVirtualizedGuestDriver) RequestRenewInstance(ctx context.Context, guest *models.SGuest, bc billing.SBillingCycle) (time.Time, error) { +func (drv *SManagedVirtualizedGuestDriver) RequestRenewInstance(ctx context.Context, guest *models.SGuest, bc billing.SBillingCycle) (time.Time, error) { iVM, err := guest.GetIVM(ctx) if err != nil { return time.Time{}, err @@ -1258,11 +1258,11 @@ func (self *SManagedVirtualizedGuestDriver) RequestRenewInstance(ctx context.Con return iVM.GetExpiredAt(), nil } -func (self *SManagedVirtualizedGuestDriver) IsSupportEip() bool { +func (drv *SManagedVirtualizedGuestDriver) IsSupportEip() bool { return true } -func (self *SManagedVirtualizedGuestDriver) chooseHostStorage( +func chooseHostStorage( drv models.IGuestDriver, host *models.SHost, backend string, @@ -1287,11 +1287,11 @@ func (self *SManagedVirtualizedGuestDriver) chooseHostStorage( return nil } -func (self *SManagedVirtualizedGuestDriver) IsSupportCdrom(guest *models.SGuest) (bool, error) { +func (drv *SManagedVirtualizedGuestDriver) IsSupportCdrom(guest *models.SGuest) (bool, error) { return false, nil } -func (self *SManagedVirtualizedGuestDriver) IsSupportFloppy(guest *models.SGuest) (bool, error) { +func (drv *SManagedVirtualizedGuestDriver) IsSupportFloppy(guest *models.SGuest) (bool, error) { return false, nil } @@ -1319,7 +1319,7 @@ func GetCloudVMStatus(vm cloudprovider.ICloudVM) string { return status } -func (self *SManagedVirtualizedGuestDriver) RequestConvertPublicipToEip(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestConvertPublicipToEip(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iVM, err := guest.GetIVM(ctx) if err != nil { @@ -1370,7 +1370,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestConvertPublicipToEip(ctx cont return nil } -func (self *SManagedVirtualizedGuestDriver) RequestSetAutoRenewInstance(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input api.GuestAutoRenewInput, task taskman.ITask) error { +func (drv *SManagedVirtualizedGuestDriver) RequestSetAutoRenewInstance(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, input api.GuestAutoRenewInput, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iVM, err := guest.GetIVM(ctx) if err != nil { @@ -1391,7 +1391,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSetAutoRenewInstance(ctx cont return nil } -func (self *SManagedVirtualizedGuestDriver) RequestRemoteUpdate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, replaceTags bool) error { +func (drv *SManagedVirtualizedGuestDriver) RequestRemoteUpdate(ctx context.Context, guest *models.SGuest, userCred mcclient.TokenCredential, replaceTags bool) error { // nil ops iVM, err := guest.GetIVM(ctx) if err != nil { @@ -1444,3 +1444,29 @@ func (self *SManagedVirtualizedGuestDriver) RequestRemoteUpdate(ctx context.Cont return nil } + +func (drv *SManagedVirtualizedGuestDriver) SyncOsInfo(ctx context.Context, userCred mcclient.TokenCredential, g *models.SGuest, extVM cloudprovider.IOSInfo) error { + // save os info + osinfo := map[string]interface{}{} + for k, v := range map[string]string{ + "os_full_name": extVM.GetFullOsName(), + "os_name": string(extVM.GetOsType()), + "os_arch": extVM.GetOsArch(), + "os_type": string(extVM.GetOsType()), + "os_distribution": extVM.GetOsDist(), + "os_version": extVM.GetOsVersion(), + "os_language": extVM.GetOsLang(), + } { + if len(v) == 0 { + continue + } + osinfo[k] = v + } + if len(osinfo) > 0 { + err := g.SetAllMetadata(ctx, osinfo, userCred) + if err != nil { + return errors.Wrap(err, "SetAllMetadata") + } + } + return nil +} diff --git a/pkg/compute/guestdrivers/nutanix.go b/pkg/compute/guestdrivers/nutanix.go index 1050a25982..3bda5bef29 100644 --- a/pkg/compute/guestdrivers/nutanix.go +++ b/pkg/compute/guestdrivers/nutanix.go @@ -98,7 +98,7 @@ func (self *SNutanixGuestDriver) IsNeedInjectPasswordByCloudInit() bool { } func (self *SNutanixGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SNutanixGuestDriver) GetMinimalSysDiskSizeGb() int { diff --git a/pkg/compute/guestdrivers/openstack.go b/pkg/compute/guestdrivers/openstack.go index 5fee1ed730..b270e28a2e 100644 --- a/pkg/compute/guestdrivers/openstack.go +++ b/pkg/compute/guestdrivers/openstack.go @@ -118,7 +118,7 @@ func (self *SOpenStackGuestDriver) GetStorageTypes() []string { } func (self *SOpenStackGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SOpenStackGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/qcloud.go b/pkg/compute/guestdrivers/qcloud.go index 50f044afcd..ee202f7718 100644 --- a/pkg/compute/guestdrivers/qcloud.go +++ b/pkg/compute/guestdrivers/qcloud.go @@ -79,7 +79,7 @@ func (self *SQcloudGuestDriver) GetStorageTypes() []string { } func (self *SQcloudGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SQcloudGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/guestdrivers/zstack.go b/pkg/compute/guestdrivers/zstack.go index 59e8c2ca3f..8feef9fb23 100644 --- a/pkg/compute/guestdrivers/zstack.go +++ b/pkg/compute/guestdrivers/zstack.go @@ -85,7 +85,7 @@ func (self *SZStackGuestDriver) GetMaxSecurityGroupCount() int { } func (self *SZStackGuestDriver) ChooseHostStorage(host *models.SHost, guest *models.SGuest, diskConfig *api.DiskConfig, storageIds []string) (*models.SStorage, error) { - return self.chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil + return chooseHostStorage(self, host, diskConfig.Backend, storageIds), nil } func (self *SZStackGuestDriver) GetDetachDiskStatus() ([]string, error) { diff --git a/pkg/compute/models/guestdrivers.go b/pkg/compute/models/guestdrivers.go index d5814beaf7..4cb17f0c9b 100644 --- a/pkg/compute/models/guestdrivers.go +++ b/pkg/compute/models/guestdrivers.go @@ -238,6 +238,8 @@ type IGuestDriver interface { FetchMonitorUrl(ctx context.Context, guest *SGuest) string RequestResetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *SHost, guest *SGuest, input *api.ServerNicTrafficLimit) error RequestSetNicTrafficLimit(ctx context.Context, task taskman.ITask, host *SHost, guest *SGuest, input *api.ServerNicTrafficLimit) error + + SyncOsInfo(ctx context.Context, userCred mcclient.TokenCredential, g *SGuest, extVM cloudprovider.IOSInfo) error } var guestDrivers map[string]IGuestDriver diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index dd26a37551..fcfa50a112 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -2962,43 +2962,21 @@ func (guest *SGuest) SyncAllWithCloudVM(ctx context.Context, userCred mcclient.T } func (g *SGuest) SyncOsInfo(ctx context.Context, userCred mcclient.TokenCredential, extVM cloudprovider.IOSInfo) error { - // save os info - osinfo := map[string]interface{}{} - for k, v := range map[string]string{ - "os_full_name": extVM.GetFullOsName(), - "os_name": string(extVM.GetOsType()), - "os_arch": extVM.GetOsArch(), - "os_type": string(extVM.GetOsType()), - "os_distribution": extVM.GetOsDist(), - "os_version": extVM.GetOsVersion(), - "os_language": extVM.GetOsLang(), - } { - if len(v) == 0 { - continue - } - osinfo[k] = v - } - if len(osinfo) > 0 { - err := g.SetAllMetadata(ctx, osinfo, userCred) - if err != nil { - return errors.Wrap(err, "SetAllMetadata") - } - } - return nil + return g.GetDriver().SyncOsInfo(ctx, userCred, g, extVM) } -func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, syncOwnerId mcclient.IIdentityProvider, syncStatus bool) error { +func (g *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.TokenCredential, provider cloudprovider.ICloudProvider, host *SHost, extVM cloudprovider.ICloudVM, syncOwnerId mcclient.IIdentityProvider, syncStatus bool) error { recycle := false - if provider.GetFactory().IsSupportPrepaidResources() && self.IsPrepaidRecycle() { + if provider.GetFactory().IsSupportPrepaidResources() && g.IsPrepaidRecycle() { recycle = true } - diff, err := db.UpdateWithLock(ctx, self, func() error { + diff, err := db.UpdateWithLock(ctx, g, func() error { if options.Options.EnableSyncName && !recycle { - newName, _ := db.GenerateAlterName(self, extVM.GetName()) - if len(newName) > 0 && newName != self.Name { - self.Name = newName + newName, _ := db.GenerateAlterName(g, extVM.GetName()) + if len(newName) > 0 && newName != g.Name { + g.Name = newName } } hostname := pinyinutils.Text2Pinyin(extVM.GetHostname()) @@ -3006,64 +2984,64 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token hostname = hostname[:128] } if extVM.GetName() != hostname { - self.Hostname = hostname + g.Hostname = hostname } - if !self.IsFailureStatus() && syncStatus { - self.Status = extVM.GetStatus() - self.PowerStates = extVM.GetPowerStates() - self.inferPowerStates() + if !g.IsFailureStatus() && syncStatus { + g.Status = extVM.GetStatus() + g.PowerStates = extVM.GetPowerStates() + g.inferPowerStates() } - self.VcpuCount = extVM.GetVcpuCount() - self.BootOrder = extVM.GetBootOrder() - self.Vga = extVM.GetVga() - self.Vdi = extVM.GetVdi() + g.VcpuCount = extVM.GetVcpuCount() + g.BootOrder = extVM.GetBootOrder() + g.Vga = extVM.GetVga() + g.Vdi = extVM.GetVdi() if len(extVM.GetOsArch()) > 0 { - self.OsArch = extVM.GetOsArch() + g.OsArch = extVM.GetOsArch() } - if len(self.OsType) == 0 { - self.OsType = string(extVM.GetOsType()) + if len(g.OsType) == 0 { + g.OsType = string(extVM.GetOsType()) } - if len(self.Bios) == 0 { - self.Bios = string(extVM.GetBios()) + if len(g.Bios) == 0 { + g.Bios = string(extVM.GetBios()) } - self.Machine = extVM.GetMachine() + g.Machine = extVM.GetMachine() if !recycle { - self.HostId = host.Id + g.HostId = host.Id } - self.InternetMaxBandwidthOut = extVM.GetInternetMaxBandwidthOut() - self.Throughput = extVM.GetThroughput() + g.InternetMaxBandwidthOut = extVM.GetInternetMaxBandwidthOut() + g.Throughput = extVM.GetThroughput() instanceType := extVM.GetInstanceType() if len(instanceType) > 0 { - self.InstanceType = instanceType + g.InstanceType = instanceType } memSizeMb := extVM.GetVmemSizeMB() - if self.VmemSize == 0 || self.VmemSize != memSizeMb { + if g.VmemSize == 0 || g.VmemSize != memSizeMb { if memSizeMb > 0 { - self.VmemSize = memSizeMb + g.VmemSize = memSizeMb } else { sku, _ := ServerSkuManager.FetchSkuByNameAndProvider(instanceType, provider.GetFactory().GetName(), false) if sku != nil && sku.MemorySizeMB > 0 { - self.VmemSize = sku.MemorySizeMB + g.VmemSize = sku.MemorySizeMB } } } - self.Hypervisor = extVM.GetHypervisor() + g.Hypervisor = extVM.GetHypervisor() - if len(self.Description) == 0 { - self.Description = extVM.GetDescription() + if len(g.Description) == 0 { + g.Description = extVM.GetDescription() } - self.IsEmulated = extVM.IsEmulated() + g.IsEmulated = extVM.IsEmulated() if provider.GetFactory().IsSupportPrepaidResources() && !recycle { - self.BillingType = extVM.GetBillingType() - self.ExpiredAt = extVM.GetExpiredAt() - if self.GetDriver().IsSupportSetAutoRenew() { - self.AutoRenew = extVM.IsAutoRenew() + g.BillingType = extVM.GetBillingType() + g.ExpiredAt = extVM.GetExpiredAt() + if g.GetDriver().IsSupportSetAutoRenew() { + g.AutoRenew = extVM.IsAutoRenew() } } return nil @@ -3073,22 +3051,22 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token return err } - db.OpsLog.LogSyncUpdate(self, diff, userCred) + db.OpsLog.LogSyncUpdate(g, diff, userCred) if len(diff) > 0 { notifyclient.EventNotify(ctx, userCred, notifyclient.SEventNotifyParam{ - Obj: self, + Obj: g, Action: notifyclient.ActionSyncUpdate, }) } - self.SyncOsInfo(ctx, userCred, extVM) + g.SyncOsInfo(ctx, userCred, extVM) - syncVirtualResourceMetadata(ctx, userCred, self, extVM) - SyncCloudProject(ctx, userCred, self, syncOwnerId, extVM, host.ManagerId) + syncVirtualResourceMetadata(ctx, userCred, g, extVM) + SyncCloudProject(ctx, userCred, g, syncOwnerId, extVM, host.ManagerId) if provider.GetFactory().IsSupportPrepaidResources() && recycle { - vhost, _ := self.GetHost() + vhost, _ := g.GetHost() err = vhost.syncWithCloudPrepaidVM(extVM, host) if err != nil { return err diff --git a/vendor/modules.txt b/vendor/modules.txt index 1ccd82cb52..5e57591833 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1437,7 +1437,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.2.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230904084148-c98f51a511c0 +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230910053442-8d45e74f111b ## explicit; go 1.18 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/esxi/virtualmachine.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/esxi/virtualmachine.go index 5d84ada3c2..b2dfb68bad 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/esxi/virtualmachine.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/esxi/virtualmachine.go @@ -852,10 +852,7 @@ func (svm *SVirtualMachine) fetchHardwareInfo() error { if reflectutils.StructContains(devType, etherType) { vnic := NewVirtualNIC(svm, dev, len(svm.vnics)) - if len(vnic.GetIP()) > 0 { - // only nics with ip is valid - svm.vnics = append(svm.vnics, vnic) - } + svm.vnics = append(svm.vnics, vnic) } else if reflectutils.StructContains(devType, diskType) { svm.vdisks = append(svm.vdisks, NewVirtualDisk(svm, dev, len(svm.vdisks))) } else if reflectutils.StructContains(devType, vgaType) {