检查磁盘扩容大小

This commit is contained in:
屈轩
2018-12-01 15:50:00 +08:00
parent 7b2fed8d85
commit 719a8a1db5
8 changed files with 32 additions and 16 deletions
+3 -3
View File
@@ -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)
+1 -1
View File
@@ -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)
+9 -1
View File
@@ -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
}
+2 -2
View File
@@ -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 {
+4
View File
@@ -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")
+1 -1
View File
@@ -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")
}
+11 -7
View File
@@ -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) {
+1 -1
View File
@@ -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