mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
添加aliyun disk resize内容
This commit is contained in:
@@ -189,6 +189,7 @@ type ICloudDisk interface {
|
||||
GetCacheMode() string
|
||||
GetMountpoint() string
|
||||
Delete() error
|
||||
Resize(int64) error
|
||||
}
|
||||
|
||||
type ICloudVpc interface {
|
||||
|
||||
@@ -79,8 +79,18 @@ func (self *SAliyunHostDriver) RequestDeallocateDiskOnHost(host *models.SHost, s
|
||||
}
|
||||
|
||||
func (self *SAliyunHostDriver) RequestResizeDiskOnHostOnline(host *models.SHost, storage *models.SStorage, disk *models.SDisk, size int64, task taskman.ITask) error {
|
||||
return nil
|
||||
return self.RequestResizeDiskOnHost(host, storage, disk, size, task)
|
||||
}
|
||||
|
||||
func (self *SAliyunHostDriver) RequestResizeDiskOnHost(host *models.SHost, storage *models.SStorage, disk *models.SDisk, size int64, task taskman.ITask) error {
|
||||
if iCloudStorage, err := storage.GetIStorage(); err != nil {
|
||||
return err
|
||||
} else if iDisk, err := iCloudStorage.GetIDisk(disk.GetExternalId()); err != nil {
|
||||
return err
|
||||
} else if err := iDisk.Resize(size); err != nil {
|
||||
return err
|
||||
} else {
|
||||
task.ScheduleRun(jsonutils.Marshal(map[string]int64{"disk_size": size}))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ func (manager *SDiskManager) ValidateCreateData(ctx context.Context, userCred mc
|
||||
if len(hoststorage) == 0 {
|
||||
return nil, httperrors.NewInputParameterError("Storage[%s] must attach to a host", storage.Name)
|
||||
}
|
||||
if diskConfig.Size > storage.GetFreeCapacity() {
|
||||
if diskConfig.Size > storage.GetFreeCapacity() && !storage.IsEmulated {
|
||||
return nil, httperrors.NewInputParameterError("Not enough free space")
|
||||
}
|
||||
if _, err := manager.SSharableVirtualResourceBaseManager.ValidateCreateData(ctx, userCred, ownerProjId, query, data); err != nil {
|
||||
@@ -338,7 +338,7 @@ func (self *SDisk) PerformResize(ctx context.Context, userCred mcclient.TokenCre
|
||||
} else {
|
||||
addDisk := size - self.DiskSize
|
||||
storage := self.GetStorage()
|
||||
if addDisk > storage.GetFreeCapacity() {
|
||||
if addDisk > storage.GetFreeCapacity() && !storage.IsEmulated {
|
||||
return nil, httperrors.NewOutOfResourceError("Not enough free space")
|
||||
}
|
||||
pendingUsage := SQuota{Storage: int(addDisk)}
|
||||
|
||||
@@ -54,7 +54,7 @@ func (self *DiskResizeTask) StartResizeDisk(ctx context.Context, host *models.SH
|
||||
}
|
||||
if err := proc(host, storage, disk, size, self); err != nil {
|
||||
log.Errorf("request_resize_disk_on_host: %v", err)
|
||||
self.OnStartResizeDiskFailed(ctx, err)
|
||||
self.OnStartResizeDiskFailed(ctx, disk, err)
|
||||
return
|
||||
}
|
||||
self.OnStartResizeDiskSucc(ctx, disk)
|
||||
@@ -64,8 +64,7 @@ func (self *DiskResizeTask) OnStartResizeDiskSucc(ctx context.Context, disk *mod
|
||||
disk.SetStatus(self.GetUserCred(), models.DISK_RESIZING, "")
|
||||
}
|
||||
|
||||
func (self *DiskResizeTask) OnStartResizeDiskFailed(ctx context.Context, resion error) {
|
||||
disk := self.getDisk()
|
||||
func (self *DiskResizeTask) OnStartResizeDiskFailed(ctx context.Context, disk *models.SDisk, resion error) {
|
||||
disk.SetStatus(self.GetUserCred(), models.DISK_READY, resion.Error())
|
||||
self.SetStageFailed(ctx, resion.Error())
|
||||
db.OpsLog.LogEvent(disk, db.ACT_RESIZE_FAIL, resion.Error(), self.GetUserCred())
|
||||
@@ -75,13 +74,13 @@ func (self *DiskResizeTask) OnDiskResizeComplete(ctx context.Context, disk *mode
|
||||
jSize, err := data.Get("disk_size")
|
||||
if err != nil {
|
||||
log.Errorf("OnDiskResizeComplete error: %s", err.Error())
|
||||
self.OnStartResizeDiskFailed(ctx, err)
|
||||
self.OnStartResizeDiskFailed(ctx, disk, err)
|
||||
return
|
||||
}
|
||||
size, err := jSize.Int()
|
||||
if err != nil {
|
||||
log.Errorf("OnDiskResizeComplete error: %s", err.Error())
|
||||
self.OnStartResizeDiskFailed(ctx, err)
|
||||
self.OnStartResizeDiskFailed(ctx, disk, err)
|
||||
return
|
||||
}
|
||||
oldStatus := disk.Status
|
||||
@@ -92,7 +91,7 @@ func (self *DiskResizeTask) OnDiskResizeComplete(ctx context.Context, disk *mode
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf("OnDiskResizeComplete error: %s", err.Error())
|
||||
self.OnStartResizeDiskFailed(ctx, err)
|
||||
self.OnStartResizeDiskFailed(ctx, disk, err)
|
||||
return
|
||||
}
|
||||
notes := fmt.Sprintf("%s=>%s", oldStatus, disk.Status)
|
||||
|
||||
@@ -100,6 +100,10 @@ func (self *SDisk) Delete() error {
|
||||
return self.storage.zone.region.deleteDisk(self.DiskId)
|
||||
}
|
||||
|
||||
func (self *SDisk) Resize(size int64) error {
|
||||
return self.storage.zone.region.resizeDisk(self.DiskId, size)
|
||||
}
|
||||
|
||||
func (self *SDisk) GetName() string {
|
||||
return self.DiskId
|
||||
}
|
||||
@@ -218,3 +222,12 @@ func (self *SRegion) deleteDisk(diskId string) error {
|
||||
_, err := self.ecsRequest("DeleteDisk", params)
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *SRegion) resizeDisk(diskId string, size int64) error {
|
||||
params := make(map[string]string)
|
||||
params["DiskId"] = diskId
|
||||
params["NewSize"] = fmt.Sprintf("%d", size)
|
||||
|
||||
_, err := self.ecsRequest("ResizeDisk", params)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user