mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
Merge pull request #1044 in YUNIONIO/onecloud from ~QIUJIAN/onecloud:hotfix/qj-guest-driver-sysdisk-info to release/2.4.0
* commit '5ceaaf716e300f7fd1c037d4c49bb9ba1557defe': update: customize system disk size and backend for each hypervisor
This commit is contained in:
@@ -31,6 +31,14 @@ func (self *SAliyunGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_ALIYUN
|
||||
}
|
||||
|
||||
func (self *SAliyunGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_CLOUD_EFFICIENCY
|
||||
}
|
||||
|
||||
func (self *SAliyunGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return 20
|
||||
}
|
||||
|
||||
func (self *SAliyunGuestDriver) ChooseHostStorage(host *models.SHost, backend string) *models.SStorage {
|
||||
storages := host.GetAttachedStorages("")
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
@@ -38,7 +46,13 @@ func (self *SAliyunGuestDriver) ChooseHostStorage(host *models.SHost, backend st
|
||||
return &storages[i]
|
||||
}
|
||||
}
|
||||
for _, stype := range []string{"cloud_efficiency", "cloud_ssd", "cloud", "ephemeral_ssd"} {
|
||||
for _, stype := range []string{
|
||||
models.STORAGE_CLOUD_EFFICIENCY,
|
||||
models.STORAGE_CLOUD_SSD,
|
||||
models.STORAGE_CLOUD_ESSD,
|
||||
models.STORAGE_PUBLIC_CLOUD,
|
||||
models.STORAGE_EPHEMERAL_SSD,
|
||||
} {
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
if storages[i].StorageType == stype {
|
||||
return &storages[i]
|
||||
|
||||
@@ -29,6 +29,14 @@ func (self *SAwsGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_AWS
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_GP2_SSD
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return 10
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) ChooseHostStorage(host *models.SHost, backend string) *models.SStorage {
|
||||
storages := host.GetAttachedStorages("")
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
@@ -37,7 +45,13 @@ func (self *SAwsGuestDriver) ChooseHostStorage(host *models.SHost, backend strin
|
||||
}
|
||||
}
|
||||
|
||||
for _, stype := range []string{"gp2", "io1", "st1", "sc1", "standard"} {
|
||||
for _, stype := range []string{
|
||||
models.STORAGE_GP2_SSD,
|
||||
models.STORAGE_IO1_SSD,
|
||||
models.STORAGE_ST1_HDD,
|
||||
models.STORAGE_SC1_HDD,
|
||||
models.STORAGE_STANDARD_HDD,
|
||||
} {
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
if storages[i].StorageType == stype {
|
||||
return &storages[i]
|
||||
|
||||
@@ -35,6 +35,14 @@ func (self *SAzureGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_AZURE
|
||||
}
|
||||
|
||||
func (self *SAzureGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_STANDARD_LRS
|
||||
}
|
||||
|
||||
func (self *SAzureGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return 10
|
||||
}
|
||||
|
||||
func (self *SAzureGuestDriver) ChooseHostStorage(host *models.SHost, backend string) *models.SStorage {
|
||||
storages := host.GetAttachedStorages("")
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
@@ -42,7 +50,11 @@ func (self *SAzureGuestDriver) ChooseHostStorage(host *models.SHost, backend str
|
||||
return &storages[i]
|
||||
}
|
||||
}
|
||||
for _, stype := range []string{"standard_lrs", "standardssd_lrs", "premium_lrs"} {
|
||||
for _, stype := range []string{
|
||||
models.STORAGE_STANDARD_LRS,
|
||||
models.STORAGE_STANDARDSSD_LRS,
|
||||
models.STORAGE_PREMIUM_LRS,
|
||||
} {
|
||||
for i := 0; i < len(storages); i += 1 {
|
||||
if storages[i].StorageType == stype {
|
||||
return &storages[i]
|
||||
|
||||
@@ -34,6 +34,14 @@ func (self *SBaremetalGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_BAREMETAL
|
||||
}
|
||||
|
||||
func (self *SBaremetalGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_LOCAL
|
||||
}
|
||||
|
||||
func (self *SBaremetalGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return options.Options.DefaultDiskSizeMB / 1024
|
||||
}
|
||||
|
||||
func (self *SBaremetalGuestDriver) GetMaxSecurityGroupCount() int {
|
||||
//暂不支持绑定安全组
|
||||
return 0
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
"yunion.io/x/onecloud/pkg/compute/options"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
@@ -48,6 +49,14 @@ func (self *SContainerDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_CONTAINER
|
||||
}
|
||||
|
||||
func (self *SContainerDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_LOCAL
|
||||
}
|
||||
|
||||
func (self *SContainerDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return options.Options.DefaultDiskSizeMB / 1024
|
||||
}
|
||||
|
||||
func (self *SContainerDriver) RequestGuestCreateAllDisks(ctx context.Context, guest *models.SGuest, task taskman.ITask) error {
|
||||
// do nothing, call next stage
|
||||
task.ScheduleRun(nil)
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
"yunion.io/x/onecloud/pkg/compute/options"
|
||||
"yunion.io/x/onecloud/pkg/util/billing"
|
||||
)
|
||||
|
||||
@@ -28,6 +29,14 @@ func (self *SESXiGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_ESXI
|
||||
}
|
||||
|
||||
func (self *SESXiGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_LOCAL
|
||||
}
|
||||
|
||||
func (self *SESXiGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return options.Options.DefaultDiskSizeMB / 1024
|
||||
}
|
||||
|
||||
func (self *SESXiGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error {
|
||||
task.ScheduleRun(nil)
|
||||
return nil
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
"yunion.io/x/onecloud/pkg/compute/options"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
)
|
||||
@@ -30,6 +31,14 @@ func (self *SKVMGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_KVM
|
||||
}
|
||||
|
||||
func (self *SKVMGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_LOCAL
|
||||
}
|
||||
|
||||
func (self *SKVMGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return options.Options.DefaultDiskSizeMB / 1024
|
||||
}
|
||||
|
||||
func (self *SKVMGuestDriver) RequestDetachDisksFromGuestForDelete(ctx context.Context, guest *models.SGuest, task taskman.ITask) error {
|
||||
subtask, err := taskman.TaskManager.NewTask(ctx, "GuestDetachAllDisksTask", guest, task.GetUserCred(), task.GetParams(), task.GetTaskId(), "", nil)
|
||||
if err != nil {
|
||||
|
||||
@@ -33,6 +33,14 @@ func (self *SQcloudGuestDriver) GetHypervisor() string {
|
||||
return models.HYPERVISOR_QCLOUD
|
||||
}
|
||||
|
||||
func (self *SQcloudGuestDriver) GetDefaultSysDiskBackend() string {
|
||||
return models.STORAGE_CLOUD_BASIC
|
||||
}
|
||||
|
||||
func (self *SQcloudGuestDriver) GetMinimalSysDiskSizeGb() int {
|
||||
return 50
|
||||
}
|
||||
|
||||
func (self *SQcloudGuestDriver) ChooseHostStorage(host *models.SHost, backend string) *models.SStorage {
|
||||
storages := host.GetAttachedStorages("")
|
||||
for i := 0; i < len(storages); i++ {
|
||||
@@ -40,7 +48,13 @@ func (self *SQcloudGuestDriver) ChooseHostStorage(host *models.SHost, backend st
|
||||
return &storages[i]
|
||||
}
|
||||
}
|
||||
for _, stype := range []string{"cloud_basic", "cloud_premium", "cloud_ssd", "local_basic", "local_ssd"} {
|
||||
for _, stype := range []string{
|
||||
models.STORAGE_CLOUD_BASIC,
|
||||
models.STORAGE_CLOUD_PREMIUM,
|
||||
models.STORAGE_CLOUD_SSD,
|
||||
models.STORAGE_LOCAL_BASIC,
|
||||
models.STORAGE_LOCAL_SSD,
|
||||
} {
|
||||
for i := 0; i < len(storages); i++ {
|
||||
if storages[i].StorageType == stype {
|
||||
return &storages[i]
|
||||
|
||||
@@ -1173,9 +1173,11 @@ func parseDiskInfo(ctx context.Context, userCred mcclient.TokenCredential, info
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(diskConfig.ImageId) > 0 && diskConfig.SizeMb == 0 {
|
||||
diskConfig.SizeMb = options.Options.DefaultDiskSize // MB
|
||||
} else if len(diskConfig.ImageId) == 0 && diskConfig.SizeMb == 0 {
|
||||
// XXX: do not set default disk size here, set it by each hypervisor driver
|
||||
// if len(diskConfig.ImageId) > 0 && diskConfig.SizeMb == 0 {
|
||||
// diskConfig.SizeMb = options.Options.DefaultDiskSize // MB
|
||||
// else
|
||||
if len(diskConfig.ImageId) == 0 && diskConfig.SizeMb == 0 {
|
||||
return nil, httperrors.NewInputParameterError("Diskinfo not contains either imageID or size")
|
||||
}
|
||||
return &diskConfig, nil
|
||||
|
||||
@@ -19,6 +19,9 @@ type IGuestDriver interface {
|
||||
GetMaxVMemSizeGB() int
|
||||
GetMaxSecurityGroupCount() int
|
||||
|
||||
GetDefaultSysDiskBackend() string
|
||||
GetMinimalSysDiskSizeGb() int
|
||||
|
||||
IsSupportedBillingCycle(bc billing.SBillingCycle) bool
|
||||
|
||||
RequestRenewInstance(guest *SGuest, bc billing.SBillingCycle) (time.Time, error)
|
||||
|
||||
@@ -715,7 +715,7 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
|
||||
|
||||
var err error
|
||||
var hypervisor string
|
||||
var rootStorageType string
|
||||
// var rootStorageType string
|
||||
var osProf osprofile.SOSProfile
|
||||
hypervisor, _ = data.GetString("hypervisor")
|
||||
if hypervisor != HYPERVISOR_CONTAINER {
|
||||
@@ -736,10 +736,10 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
|
||||
return nil, httperrors.NewBadRequestError("Miss operate system???")
|
||||
}
|
||||
|
||||
if len(diskConfig.Backend) == 0 {
|
||||
diskConfig.Backend = STORAGE_LOCAL
|
||||
}
|
||||
rootStorageType = diskConfig.Backend
|
||||
// if len(diskConfig.Backend) == 0 {
|
||||
// diskConfig.Backend = STORAGE_LOCAL
|
||||
// }
|
||||
// rootStorageType = diskConfig.Backend
|
||||
|
||||
data.Add(jsonutils.Marshal(diskConfig), "disk.0")
|
||||
|
||||
@@ -818,7 +818,7 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
|
||||
dataDiskDefs := make([]string, 0)
|
||||
if sku != nil && sku.AttachedDiskCount > 0 {
|
||||
for i := 0; i < sku.AttachedDiskCount; i += 1 {
|
||||
dataDiskDefs = append(dataDiskDefs, fmt.Sprintf("%dgb:%s", sku.AttachedDiskSizeGB, sku.AttachedDiskType))
|
||||
dataDiskDefs = append(dataDiskDefs, fmt.Sprintf("%dg:%s", sku.AttachedDiskSizeGB, sku.AttachedDiskType))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,6 +832,18 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
|
||||
dataDiskDefs = append(dataDiskDefs, diskJson)
|
||||
}
|
||||
|
||||
rootDiskConfig, err := parseDiskInfo(ctx, userCred, jsonArray[0])
|
||||
if err != nil {
|
||||
return nil, httperrors.NewGeneralError(err) // should no error
|
||||
}
|
||||
if len(rootDiskConfig.Backend) == 0 {
|
||||
rootDiskConfig.Backend = GetDriver(hypervisor).GetDefaultSysDiskBackend()
|
||||
}
|
||||
if rootDiskConfig.SizeMb == 0 {
|
||||
rootDiskConfig.SizeMb = GetDriver(hypervisor).GetMinimalSysDiskSizeGb() * 1024
|
||||
}
|
||||
data.Set("disk.0", jsonutils.Marshal(rootDiskConfig))
|
||||
|
||||
for i := 0; i < len(dataDiskDefs); i += 1 {
|
||||
diskConfig, err := parseDiskInfo(ctx, userCred, jsonutils.NewString(dataDiskDefs[i]))
|
||||
if err != nil {
|
||||
@@ -841,12 +853,12 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
|
||||
return nil, httperrors.NewBadRequestError("Snapshot error: disk index %d > 0 but disk type is %s", i+1, DISK_TYPE_SYS)
|
||||
}
|
||||
if len(diskConfig.Backend) == 0 {
|
||||
diskConfig.Backend = rootStorageType
|
||||
diskConfig.Backend = rootDiskConfig.Backend
|
||||
}
|
||||
if len(diskConfig.Driver) == 0 {
|
||||
diskConfig.Driver = osProf.DiskDriver
|
||||
}
|
||||
data.Add(jsonutils.Marshal(diskConfig), fmt.Sprintf("disk.%d", i+1))
|
||||
data.Set(fmt.Sprintf("disk.%d", i+1), jsonutils.Marshal(diskConfig))
|
||||
}
|
||||
|
||||
resourceTypeStr := jsonutils.GetAnyString(data, []string{"resource_type"})
|
||||
|
||||
@@ -19,7 +19,7 @@ type ComputeOptions struct {
|
||||
DefaultSecurityRules string `help:"Default security rules" default:"allow any"`
|
||||
DefaultAdminSecurityRules string `help:"Default admin security rules" default:""`
|
||||
|
||||
DefaultDiskSize int `default:"30720" help:"Default disk size in MB if not specified, default to 30GiB"`
|
||||
DefaultDiskSizeMB int `default:"30720" help:"Default disk size in MB if not specified, default to 30GiB" json:"default_disk_size"`
|
||||
|
||||
EnablePendingDelete bool `default:"true" help:"Turn on/off pending delete VM and disk, default is on"`
|
||||
PendingDeleteCheckSeconds int `default:"3600" help:"How long to wait to scan pending delete VM or disks, default is 1 hour"`
|
||||
|
||||
Reference in New Issue
Block a user