From cb62883e5da15475de7097d958ed5044ec291d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Mon, 13 Aug 2018 18:59:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0disk=20provider=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/climc/shell/disks.go | 14 +++++++++----- pkg/compute/models/disks.go | 8 ++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cmd/climc/shell/disks.go b/cmd/climc/shell/disks.go index 3f4d35033b..36654af96e 100644 --- a/cmd/climc/shell/disks.go +++ b/cmd/climc/shell/disks.go @@ -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 diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index a5e552fd32..7b18930843 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -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)