添加aliyun disk resize内容

This commit is contained in:
屈轩
2018-08-13 20:27:29 +08:00
parent b2c0bc8e63
commit f8a299e167
5 changed files with 32 additions and 9 deletions
+1
View File
@@ -189,6 +189,7 @@ type ICloudDisk interface {
GetCacheMode() string
GetMountpoint() string
Delete() error
Resize(int64) error
}
type ICloudVpc interface {
+11 -1
View File
@@ -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
}
+2 -2
View File
@@ -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)}
+5 -6
View File
@@ -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)
+13
View File
@@ -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
}