Merge branch 'release/2.1.0' of ssh://git.yunion.io/~quxuan/onecloud into feature/qx-disk-resize

This commit is contained in:
屈轩
2018-08-13 21:33:21 +08:00
4 changed files with 39 additions and 12 deletions
+9 -5
View File
@@ -10,11 +10,12 @@ import (
func init() {
type DiskListOptions struct {
BaseListOptions
Unused bool `help:"Show unused disks"`
Share bool `help:"Show Share storage disks"`
Local bool `help:"Show Local storage disks"`
Guest string `help:"Guest ID or name"`
Storage string `help:"Storage ID or name"`
Unused bool `help:"Show unused disks"`
Share bool `help:"Show Share storage disks"`
Local bool `help:"Show Local storage disks"`
Guest string `help:"Guest ID or name"`
Storage string `help:"Storage ID or name"`
Provider string `help:"Provider for disk" choices:"Aliyun|VMware"`
}
R(&DiskListOptions{}, "disk-list", "List virtual disks", func(s *mcclient.ClientSession, suboptions *DiskListOptions) error {
params := FetchPagingParams(suboptions.BaseListOptions)
@@ -33,6 +34,9 @@ func init() {
if len(suboptions.Storage) > 0 {
params.Add(jsonutils.NewString(suboptions.Storage), "storage")
}
if len(suboptions.Provider) > 0 {
params.Add(jsonutils.NewString(suboptions.Provider), "provider")
}
result, err := modules.Disks.List(s, params)
if err != nil {
return err
+12 -4
View File
@@ -4,6 +4,7 @@ import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
"yunion.io/x/onecloud/pkg/compute/models"
)
@@ -55,12 +56,19 @@ func (self *SAliyunHostDriver) RequestAllocateDiskOnStorage(host *models.SHost,
return err
} else {
size = size >> 10
if disk, err := iCloudStorage.CreateIDisk(disk.GetName(), int(size), ""); err != nil {
if iDisk, err := iCloudStorage.CreateIDisk(disk.GetName(), int(size), ""); err != nil {
return err
} else {
if _, err := disk.GetModelManager().TableSpec().Update(disk, func() error {
disk.ExternalId = iDisk.GetGlobalId()
return nil
}); err != nil {
log.Errorf("Update disk externalId err: %v", err)
return err
}
data := jsonutils.NewDict()
data.Add(jsonutils.NewInt(int64(disk.GetDiskSizeMB())), "disk_size")
data.Add(jsonutils.NewString(disk.GetDiskFormat()), "disk_format")
data.Add(jsonutils.NewInt(int64(iDisk.GetDiskSizeMB())), "disk_size")
data.Add(jsonutils.NewString(iDisk.GetDiskFormat()), "disk_format")
task.ScheduleRun(data)
}
}
@@ -87,7 +95,7 @@ func (self *SAliyunHostDriver) RequestResizeDiskOnHost(host *models.SHost, stora
return err
} else if iDisk, err := iCloudStorage.GetIDisk(disk.GetExternalId()); err != nil {
return err
} else if err := iDisk.Resize(size); err != nil {
} else if err := iDisk.Resize(size >> 10); err != nil {
return err
} else {
task.ScheduleRun(jsonutils.Marshal(map[string]int64{"disk_size": size}))
+8
View File
@@ -115,6 +115,14 @@ func (manager *SDiskManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu
sq := storages.Query(storages.Field("id")).Filter(sqlchemy.In(storages.Field("storage_type"), STORAGE_LOCAL_TYPES))
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
}
if provier, _ := queryDict.GetString("provider"); len(provier) > 0 {
cloudprovider := CloudproviderManager.Query().SubQuery()
sq := storages.Query(storages.Field("id")).Join(cloudprovider,
sqlchemy.AND(
sqlchemy.Equals(cloudprovider.Field("id"), storages.Field("manager_id")),
sqlchemy.Equals(cloudprovider.Field("provider"), provier)))
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
}
guestId, _ := queryDict.GetString("guest")
if len(guestId) != 0 {
guest := GuestManager.FetchGuestById(guestId)
+10 -3
View File
@@ -4,6 +4,7 @@ import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
@@ -54,9 +55,15 @@ func (self *DiskCreateTask) OnStartAllocateFailed(ctx context.Context, disk *mod
func (self *DiskCreateTask) OnDiskReady(ctx context.Context, disk *models.SDisk, data jsonutils.JSONObject) {
diskSize, _ := data.Int("disk_size")
disk.DiskSize = int(diskSize)
disk.DiskFormat, _ = data.GetString("disk_format")
disk.AccessPath, _ = data.GetString("disk_path")
if _, err := disk.GetModelManager().TableSpec().Update(disk, func() error {
disk.DiskSize = int(diskSize)
disk.DiskFormat, _ = data.GetString("disk_format")
disk.AccessPath, _ = data.GetString("disk_path")
return nil
}); err != nil {
log.Errorf("update disk info error: %v", err)
}
disk.SetStatus(self.UserCred, models.DISK_READY, "")
self.CleanHostSchedCache(disk)
db.OpsLog.LogEvent(disk, db.ACT_ALLOCATE, disk.GetShortDesc(), self.UserCred)