secgroup-list remove rules

This commit is contained in:
ioito
2019-06-16 18:48:42 +08:00
parent 7481073a35
commit 77716076d5
2 changed files with 44 additions and 3 deletions
+9 -1
View File
@@ -26,7 +26,9 @@ import (
func init() {
type SecGroupsListOptions struct {
Equals string `help:"Secgroup ID or Name, filter secgroups whose rules equals the specified one"`
Equals string `help:"Secgroup ID or Name, filter secgroups whose rules equals the specified one"`
OrderByCache string `help:"Order by cache count" choices:"desc|asc"`
OrderByGuest string `help:"Order by guest count" choices:"desc|asc"`
options.BaseListOptions
}
@@ -43,6 +45,12 @@ func init() {
if len(args.Equals) > 0 {
params.Add(jsonutils.NewString(args.Equals), "equals")
}
if len(args.OrderByCache) > 0 {
params.Add(jsonutils.NewString(args.OrderByCache), "order_by_cache")
}
if len(args.OrderByGuest) > 0 {
params.Add(jsonutils.NewString(args.OrderByGuest), "order_by_guest")
}
result, err := modules.SecGroups.List(s, params)
if err != nil {
return err
+35 -2
View File
@@ -91,6 +91,41 @@ func (manager *SSecurityGroupManager) ListItemFilter(ctx context.Context, q *sql
}
q = q.In("id", secgroupIds)
}
orderByCache, _ := query.GetString("order_by_cache")
if orderByCache == "asc" || orderByCache == "desc" {
caches := SecurityGroupCacheManager.Query().SubQuery()
cacheQ := caches.Query(
caches.Field("secgroup_id"),
sqlchemy.COUNT("cache_cnt"),
)
cacheSQ := cacheQ.GroupBy(caches.Field("secgroup_id")).SubQuery()
q = q.LeftJoin(cacheSQ, sqlchemy.Equals(q.Field("id"), cacheSQ.Field("secgroup_id")))
switch orderByCache {
case "asc":
q = q.Asc(cacheSQ.Field("cache_cnt"))
case "desc":
q = q.Desc(cacheSQ.Field("cache_cnt"))
}
}
orderByGuest, _ := query.GetString("order_by_guest")
if orderByGuest == "asc" || orderByGuest == "desc" {
guests := GuestManager.Query().SubQuery()
guestQ := guests.Query(
guests.Field("secgrp_id"),
sqlchemy.COUNT("guest_cnt"),
)
guestSQ := guestQ.GroupBy(guests.Field("secgrp_id")).SubQuery()
q = q.LeftJoin(guestSQ, sqlchemy.Equals(q.Field("id"), guestSQ.Field("secgrp_id")))
switch orderByGuest {
case "asc":
q = q.Asc(guestSQ.Field("guest_cnt"))
case "desc":
q = q.Desc(guestSQ.Field("guest_cnt"))
}
}
return q, nil
}
@@ -158,8 +193,6 @@ func (self *SSecurityGroup) GetCustomizeColumns(ctx context.Context, userCred mc
extra.Add(jsonutils.NewInt(int64(cnt)), "cache_cnt")
extra.Add(jsonutils.NewTimeString(self.CreatedAt), "created_at")
extra.Add(jsonutils.NewString(self.Description), "description")
extra.Add(jsonutils.NewString(self.getSecurityRuleString("in")), "in_rules")
extra.Add(jsonutils.NewString(self.getSecurityRuleString("out")), "out_rules")
return extra
}