mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 06:09:39 +08:00
add snapshot-list filter by storage type
This commit is contained in:
@@ -12,6 +12,8 @@ func init() {
|
||||
options.BaseListOptions
|
||||
Disk string `help:"Disk snapshots"`
|
||||
FakeDeleted bool `help:"Show fake deleted snapshot or not"`
|
||||
Local bool `help:"Show local snapshots"`
|
||||
Share bool `help:"Show shared snapshots"`
|
||||
DiskType string `help: "Filter by disk type" choices:"sys|data"`
|
||||
Provider string `help: "Cloud provider" choices:"Aliyun|VMware|Azure"`
|
||||
}
|
||||
@@ -24,6 +26,12 @@ func init() {
|
||||
params.Add(jsonutils.NewString(args.Disk), "disk_id")
|
||||
}
|
||||
params.Add(jsonutils.NewBool(args.FakeDeleted), "fake_deleted")
|
||||
if args.Local {
|
||||
params.Add(jsonutils.NewBool(args.Local), "local")
|
||||
}
|
||||
if args.Share {
|
||||
params.Add(jsonutils.NewBool(args.Share), "share")
|
||||
}
|
||||
if len(args.Disk) > 0 {
|
||||
params.Add(jsonutils.NewString(args.Disk), "disk_id")
|
||||
}
|
||||
|
||||
@@ -87,6 +87,20 @@ func (manager *SSnapshotManager) ListItemFilter(ctx context.Context, q *sqlchemy
|
||||
q = q.Equals("fake_deleted", false)
|
||||
}
|
||||
|
||||
if jsonutils.QueryBoolean(query, "local", false) {
|
||||
storages := StorageManager.Query().SubQuery()
|
||||
sq := storages.Query(storages.Field("id")).Filter(sqlchemy.Equals(storages.Field("storage_type"), STORAGE_LOCAL))
|
||||
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
|
||||
}
|
||||
|
||||
// Public cloud snapshot doesn't have storage id
|
||||
if jsonutils.QueryBoolean(query, "share", false) {
|
||||
storages := StorageManager.Query().SubQuery()
|
||||
sq := storages.Query(storages.Field("id")).NotEquals("storage_type", "local")
|
||||
q = q.Filter(sqlchemy.OR(sqlchemy.IsNull(q.Field("storage_id")),
|
||||
sqlchemy.In(q.Field("storage_id"), sq)))
|
||||
}
|
||||
|
||||
if diskType, err := query.GetString("disk_type"); err == nil {
|
||||
diskTbl := DiskManager.Query().SubQuery()
|
||||
sq := diskTbl.Query(diskTbl.Field("id")).Equals("disk_type", diskType).SubQuery()
|
||||
@@ -112,12 +126,14 @@ func (self *SSnapshot) GetExtraDetails(ctx context.Context, userCred mcclient.To
|
||||
}
|
||||
|
||||
func (self *SSnapshot) getMoreDetails(extra *jsonutils.JSONDict) *jsonutils.JSONDict {
|
||||
if IStorage, _ := StorageManager.FetchById(self.StorageId); IStorage != nil {
|
||||
storage := IStorage.(*SStorage)
|
||||
extra.Add(jsonutils.NewString(storage.StorageType), "storage_type")
|
||||
}
|
||||
disk, _ := self.GetDisk()
|
||||
if disk != nil {
|
||||
extra.Add(jsonutils.NewString(disk.DiskType), "disk_type")
|
||||
if storage := disk.GetStorage(); storage != nil {
|
||||
extra.Add(jsonutils.NewString(storage.StorageType), "storage_type")
|
||||
}
|
||||
|
||||
guests := disk.GetGuests()
|
||||
if len(guests) == 1 {
|
||||
extra.Add(jsonutils.NewString(guests[0].Name), "guest")
|
||||
|
||||
Reference in New Issue
Block a user