From ce06e078f0e905f1b5b060e0cff816b0923f1914 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Sun, 25 Oct 2020 08:34:51 +0800 Subject: [PATCH] fix: server usage status not correct --- pkg/apis/compute/guests.go | 3 +++ pkg/compute/models/guests.go | 18 +++++++++++++----- pkg/compute/usages/handler.go | 4 ++-- pkg/mcclient/options/servers.go | 2 ++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/apis/compute/guests.go b/pkg/apis/compute/guests.go index 8649522ace..92b8f35671 100644 --- a/pkg/apis/compute/guests.go +++ b/pkg/apis/compute/guests.go @@ -98,6 +98,9 @@ type ServerListInput struct { SrcMacCheck *bool `json:"src_mac_check"` InstanceType []string `json:"instance_type"` + + // 是否调度到宿主机上 + WithHost *bool `json:"with_host"` } func (input *ServerListInput) AfterUnmarshal() { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index a978070ed6..b379231a06 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -494,6 +494,13 @@ func (manager *SGuestManager) ListItemFilter( if len(query.InstanceType) > 0 { q = q.In("instance_type", query.InstanceType) } + if query.WithHost != nil { + if *query.WithHost { + q = q.IsNotEmpty("host_id") + } else { + q = q.IsNullOrEmpty("host_id") + } + } return q, nil } @@ -3123,12 +3130,11 @@ func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCred func filterGuestByRange(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery { hosts := HostManager.Query().SubQuery() + subq := hosts.Query(hosts.Field("id")) + subq = AttachUsageQuery(subq, hosts, hostTypes, resourceTypes, providers, brands, cloudEnv, rangeObjs) - q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), q.Field("host_id"))) - //q = q.Filter(sqlchemy.IsTrue(hosts.Field("enabled"))) - // q = q.Filter(sqlchemy.Equals(hosts.Field("host_status"), HOST_ONLINE)) + q = q.In("host_id", subq.SubQuery()) - q = AttachUsageQuery(q, hosts, hostTypes, resourceTypes, providers, brands, cloudEnv, rangeObjs) return q } @@ -3236,7 +3242,9 @@ func _guestResourceCountQuery( q = q.LeftJoin(isoDevSubQuery, sqlchemy.Equals(isoDevSubQuery.Field("guest_id"), guests.Field("id"))) - q = filterGuestByRange(q, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv) + if len(rangeObjs) > 0 || len(hostTypes) > 0 || len(resourceTypes) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 { + q = filterGuestByRange(q, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv) + } switch scope { case rbacutils.ScopeSystem: diff --git a/pkg/compute/usages/handler.go b/pkg/compute/usages/handler.go index d5b8a23c4d..e18b23d418 100644 --- a/pkg/compute/usages/handler.go +++ b/pkg/compute/usages/handler.go @@ -676,7 +676,7 @@ func HostAllUsage(pref string, userCred mcclient.IIdentityProvider, scope rbacut if len(pref) > 0 { prefix = fmt.Sprintf("%s.%s", prefix, pref) } - return hostUsage(userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.None, tristate.None) + return hostUsage(userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.None, tristate.False) } func HostEnabledUsage(pref string, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope, rangeObjs []db.IStandaloneModel, @@ -685,7 +685,7 @@ func HostEnabledUsage(pref string, userCred mcclient.IIdentityProvider, scope rb if len(pref) > 0 { prefix = fmt.Sprintf("%s.%s", prefix, pref) } - return hostUsage(userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.True, tristate.None) + return hostUsage(userCred, scope, prefix, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, tristate.True, tristate.False) } func BaremetalUsage(userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope, rangeObjs []db.IStandaloneModel, diff --git a/pkg/mcclient/options/servers.go b/pkg/mcclient/options/servers.go index 3e0cac6681..de40d3956b 100644 --- a/pkg/mcclient/options/servers.go +++ b/pkg/mcclient/options/servers.go @@ -71,6 +71,8 @@ type ServerListOptions struct { WithMeta *bool `help:"filter by metadata" negative:"without_meta"` WithUserMeta *bool `help:"filter by user metadata" negative:"without_user_meta"` + + WithHost *bool `help:"filter guest with host or not" negative:"without_host"` } func (o *ServerListOptions) Params() (jsonutils.JSONObject, error) {