mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
检查磁盘扩容大小
This commit is contained in:
@@ -29,14 +29,14 @@ func (self *SAliyunHostDriver) GetHostType() string {
|
||||
return models.HOST_TYPE_ALIYUN
|
||||
}
|
||||
|
||||
func (self *SAliyunHostDriver) ValidateCreateDisk(storage *models.SStorage, sizeGb int) error {
|
||||
func (self *SAliyunHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
if utils.IsInStringArray(storage.StorageType, []string{models.STORAGE_CLOUD_EFFICIENCY, models.STORAGE_CLOUD_SSD, models.STORAGE_CLOUD_ESSD}) {
|
||||
if sizeGb < 20 || sizeGb > 32768 {
|
||||
return fmt.Errorf("The %s disk size must be in the range of 20G ~ 32768G", storage.StorageType)
|
||||
return fmt.Errorf("The %s disk size must be in the range of 20G ~ 32768GB", storage.StorageType)
|
||||
}
|
||||
} else if storage.StorageType == models.STORAGE_PUBLIC_CLOUD {
|
||||
if sizeGb < 5 || sizeGb > 2000 {
|
||||
return fmt.Errorf("The %s disk size must be in the range of 5G ~ 2000G", storage.StorageType)
|
||||
return fmt.Errorf("The %s disk size must be in the range of 5G ~ 2000GB", storage.StorageType)
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("Not support create %s disk", storage.StorageType)
|
||||
|
||||
@@ -24,7 +24,7 @@ func (self *SAwsHostDriver) GetHostType() string {
|
||||
return models.HOST_TYPE_AWS
|
||||
}
|
||||
|
||||
func (self *SAwsHostDriver) ValidateCreateDisk(storage *models.SStorage, sizeGb int) error {
|
||||
func (self *SAwsHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
if storage.StorageType == models.STORAGE_GP2_SSD {
|
||||
if sizeGb < 1 || sizeGb > 16384 {
|
||||
return fmt.Errorf("The %s disk size must be in the range of 1G ~ 16384GB", storage.StorageType)
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/compute/options"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/pkg/utils"
|
||||
)
|
||||
|
||||
type SAzureHostDriver struct {
|
||||
@@ -36,7 +37,14 @@ func (self *SAzureHostDriver) ValidateUpdateDisk(ctx context.Context, userCred m
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (self *SAzureHostDriver) ValidateCreateDisk(storage *models.SStorage, sizeGb int) error {
|
||||
func (self *SAzureHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
if utils.IsInStringArray(storage.StorageType, []string{models.STORAGE_STANDARD_LRS, models.STORAGE_STANDARDSSD_LRS, models.STORAGE_PREMIUM_LRS}) {
|
||||
if sizeGb < 1 || sizeGb > 4095 {
|
||||
return fmt.Errorf("The %s disk size must be in the range of 1G ~ 4095GB", storage.StorageType)
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("Not support create %s disk", storage.StorageType)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ func (self *SBaseHostDriver) ValidateUpdateDisk(ctx context.Context, userCred mc
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (self *SBaseHostDriver) ValidateCreateDisk(storage *models.SStorage, sizeGb int) error {
|
||||
return fmt.Errorf("ot Implement ValidateCreateDisk")
|
||||
func (self *SBaseHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
return fmt.Errorf("Not Implement ValidateDiskSize")
|
||||
}
|
||||
|
||||
func (self *SBaseHostDriver) RequestDeleteSnapshotsWithStorage(ctx context.Context, host *models.SHost, snapshot *models.SSnapshot, task taskman.ITask) error {
|
||||
|
||||
@@ -29,6 +29,10 @@ func (self *SKVMHostDriver) GetHostType() string {
|
||||
return models.HOST_TYPE_HYPERVISOR
|
||||
}
|
||||
|
||||
func (self *SKVMHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SKVMHostDriver) CheckAndSetCacheImage(ctx context.Context, host *models.SHost, storageCache *models.SStoragecache, task taskman.ITask) error {
|
||||
params := task.GetParams()
|
||||
imageId, err := params.GetString("image_id")
|
||||
|
||||
@@ -28,7 +28,7 @@ func (self *SQcloudHostDriver) GetHostType() string {
|
||||
return models.HOST_TYPE_QCLOUD
|
||||
}
|
||||
|
||||
func (self *SQcloudHostDriver) ValidateCreateDisk(storage *models.SStorage, sizeGb int) error {
|
||||
func (self *SQcloudHostDriver) ValidateDiskSize(storage *models.SStorage, sizeGb int) error {
|
||||
if sizeGb%10 != 0 {
|
||||
return fmt.Errorf("The disk size must be a multiple of 10Gb")
|
||||
}
|
||||
|
||||
@@ -310,10 +310,9 @@ func (manager *SDiskManager) validateDiskOnStorage(diskConfig *SDiskConfig, stor
|
||||
if storage.StorageType != diskConfig.Backend {
|
||||
return httperrors.NewInputParameterError("Storage type[%s] not match backend %s", storage.StorageType, diskConfig.Backend)
|
||||
}
|
||||
sizeGb := diskConfig.SizeMb >> 10
|
||||
if host := storage.GetMasterHost(); host != nil {
|
||||
//公有云磁盘大小检查。
|
||||
if err := host.GetHostDriver().ValidateCreateDisk(storage, sizeGb); err != nil {
|
||||
if err := host.GetHostDriver().ValidateDiskSize(storage, diskConfig.SizeMb>>10); err != nil {
|
||||
return httperrors.NewInputParameterError(err.Error())
|
||||
}
|
||||
}
|
||||
@@ -565,21 +564,26 @@ func (self *SDisk) PerformResize(ctx context.Context, userCred mcclient.TokenCre
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
size, err := fileutils.GetSizeMb(sizeStr, 'M', 1024)
|
||||
sizeMb, err := fileutils.GetSizeMb(sizeStr, 'M', 1024)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if self.Status != DISK_READY {
|
||||
return nil, httperrors.NewResourceNotReadyError("Resize disk when disk is READY")
|
||||
}
|
||||
if size < self.DiskSize {
|
||||
if sizeMb < self.DiskSize {
|
||||
return nil, httperrors.NewUnsupportOperationError("Disk cannot be thrink")
|
||||
}
|
||||
if size == self.DiskSize {
|
||||
if sizeMb == self.DiskSize {
|
||||
return nil, nil
|
||||
}
|
||||
addDisk := size - self.DiskSize
|
||||
addDisk := sizeMb - self.DiskSize
|
||||
storage := self.GetStorage()
|
||||
if host := storage.GetMasterHost(); host != nil {
|
||||
if err := host.GetHostDriver().ValidateDiskSize(storage, sizeMb>>10); err != nil {
|
||||
return nil, httperrors.NewInputParameterError(err.Error())
|
||||
}
|
||||
}
|
||||
if addDisk > storage.GetFreeCapacity() && !storage.IsEmulated {
|
||||
return nil, httperrors.NewOutOfResourceError("Not enough free space")
|
||||
}
|
||||
@@ -592,7 +596,7 @@ func (self *SDisk) PerformResize(ctx context.Context, userCred mcclient.TokenCre
|
||||
if err := QuotaManager.CheckSetPendingQuota(ctx, userCred, userCred.GetProjectId(), &pendingUsage); err != nil {
|
||||
return nil, httperrors.NewOutOfQuotaError(err.Error())
|
||||
}
|
||||
return nil, self.StartDiskResizeTask(ctx, userCred, int64(size), "", &pendingUsage)
|
||||
return nil, self.StartDiskResizeTask(ctx, userCred, int64(sizeMb), "", &pendingUsage)
|
||||
}
|
||||
|
||||
func (self *SDisk) GetIStorage() (cloudprovider.ICloudStorage, error) {
|
||||
|
||||
@@ -14,7 +14,7 @@ type IHostDriver interface {
|
||||
GetHostType() string
|
||||
CheckAndSetCacheImage(ctx context.Context, host *SHost, storagecache *SStoragecache, task taskman.ITask) error
|
||||
ValidateUpdateDisk(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
|
||||
ValidateCreateDisk(storage *SStorage, sizeGb int) error
|
||||
ValidateDiskSize(storage *SStorage, sizeGb int) error
|
||||
RequestPrepareSaveDiskOnHost(ctx context.Context, host *SHost, disk *SDisk, imageId string, task taskman.ITask) error
|
||||
RequestSaveUploadImageOnHost(ctx context.Context, host *SHost, disk *SDisk, imageId string, task taskman.ITask, data jsonutils.JSONObject) error
|
||||
RequestAllocateDiskOnStorage(ctx context.Context, host *SHost, storage *SStorage, disk *SDisk, task taskman.ITask, content *jsonutils.JSONDict) error
|
||||
|
||||
Reference in New Issue
Block a user