Automatic merge from release/2.2.0 -> release/2.3.0

* commit 'ac2263a6918d47308892d960177ebedefd59a640':
  disk-list filter public & private cloud
This commit is contained in:
万垚奇
2019-01-24 13:31:55 +08:00
2 changed files with 24 additions and 6 deletions
+15 -6
View File
@@ -11,12 +11,13 @@ import (
func init() {
type DiskListOptions struct {
options.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"`
Provider string `help:"Provider for disk" choices:"Aliyun|VMware|Azure"`
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|Azure"`
CloudType string `help:"Public cloud or private cloud" choices:"Public|Private"`
}
R(&DiskListOptions{}, "disk-list", "List virtual disks", func(s *mcclient.ClientSession, suboptions *DiskListOptions) error {
var params *jsonutils.JSONDict
@@ -46,6 +47,14 @@ func init() {
if len(suboptions.Provider) > 0 {
params.Add(jsonutils.NewString(suboptions.Provider), "provider")
}
if len(suboptions.CloudType) > 0 {
if suboptions.CloudType == "Public" {
params.Add(jsonutils.JSONTrue, "public_cloud")
} else if suboptions.CloudType == "Private" {
params.Add(jsonutils.JSONTrue, "private_cloud")
}
}
result, err := modules.Disks.List(s, params)
if err != nil {
return err
+9
View File
@@ -133,6 +133,15 @@ func (manager *SDiskManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu
sq := storages.Query(storages.Field("id")).Filter(sqlchemy.NotIn(storages.Field("storage_type"), STORAGE_LOCAL_TYPES))
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
}
if jsonutils.QueryBoolean(query, "public_cloud", false) {
sq := storages.Query(storages.Field("id")).Filter(sqlchemy.IsNotNull(storages.Field("manager_id")))
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
} else if jsonutils.QueryBoolean(query, "private_cloud", false) {
sq := storages.Query(storages.Field("id")).Filter(sqlchemy.IsNull(storages.Field("manager_id")))
q = q.Filter(sqlchemy.In(q.Field("storage_id"), sq))
}
if jsonutils.QueryBoolean(query, "local", false) {
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))