From 8fc8d892fae001d5e5e988113a40d8bf4e1b84ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 29 Sep 2018 18:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=AE=89=E5=85=A8=E7=BB=84?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/guests.go | 4 ++-- pkg/compute/models/secgroups.go | 18 ++++++++++++------ pkg/mcclient/modules/mod_secgroups.go | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 454e438dfe..9c952822f5 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1151,7 +1151,7 @@ func (self *SGuest) getAdminSecgroupName() string { func (self *SGuest) getSecurityRules() string { secgrp := self.getSecgroup() if secgrp != nil { - return secgrp.getSecurityRuleString() + return secgrp.getSecurityRuleString("") } else { return options.Options.DefaultSecurityRules } @@ -1160,7 +1160,7 @@ func (self *SGuest) getSecurityRules() string { func (self *SGuest) getAdminSecurityRules() string { secgrp := self.getAdminSecgroup() if secgrp != nil { - return secgrp.getSecurityRuleString() + return secgrp.getSecurityRuleString("") } else { return options.Options.DefaultAdminSecurityRules } diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index 1fc2ca24bd..15407fe8e6 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -9,6 +9,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/pkg/utils" "yunion.io/x/sqlchemy" ) @@ -56,7 +57,7 @@ func (self *SSecurityGroup) GetGuests() []SGuest { func (self *SSecurityGroup) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict { extra := self.SSharableVirtualResourceBase.GetExtraDetails(ctx, userCred, query) extra.Add(jsonutils.NewInt(int64(len(self.GetGuests()))), "guest_cnt") - extra.Add(jsonutils.NewString(self.getSecurityRuleString()), "rules") + extra.Add(jsonutils.NewString(self.getSecurityRuleString("")), "rules") return extra } @@ -65,6 +66,8 @@ func (self *SSecurityGroup) GetCustomizeColumns(ctx context.Context, userCred mc extra.Add(jsonutils.NewInt(int64(len(self.GetGuests()))), "guest_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 } @@ -89,9 +92,12 @@ func (manager *SSecurityGroupManager) FetchSecgroupById(secId string) *SSecurity return nil } -func (self *SSecurityGroup) getSecurityRules() (rules []SSecurityGroupRule) { +func (self *SSecurityGroup) getSecurityRules(direction string) (rules []SSecurityGroupRule) { secgrouprules := SecurityGroupRuleManager.Query().SubQuery() - sql := secgrouprules.Query().Filter(sqlchemy.Equals(secgrouprules.Field("secgroup_id"), self.Id)) + sql := secgrouprules.Query().Filter(sqlchemy.Equals(secgrouprules.Field("secgroup_id"), self.Id)).Desc("priority") + if len(direction) > 0 && utils.IsInStringArray(direction, []string{"in", "out"}) { + sql = sql.Equals("direction", direction) + } if err := db.FetchModelObjects(SecurityGroupRuleManager, sql, &rules); err != nil { log.Errorf("GetGuests fail %s", err) return nil @@ -99,8 +105,8 @@ func (self *SSecurityGroup) getSecurityRules() (rules []SSecurityGroupRule) { return } -func (self *SSecurityGroup) getSecurityRuleString() string { - secgrouprules := self.getSecurityRules() +func (self *SSecurityGroup) getSecurityRuleString(direction string) string { + secgrouprules := self.getSecurityRules(direction) var rules []string for _, rule := range secgrouprules { rules = append(rules, rule.GetRule()) @@ -138,7 +144,7 @@ func (self *SSecurityGroup) PerformClone(ctx context.Context, userCred mcclient. return nil, err //db.OpsLog.LogCloneEvent(self, secgroup, userCred, nil) } - secgrouprules := self.getSecurityRules() + secgrouprules := self.getSecurityRules("") for _, rule := range secgrouprules { secgrouprule := &SSecurityGroupRule{} secgrouprule.SetModelManager(SecurityGroupRuleManager) diff --git a/pkg/mcclient/modules/mod_secgroups.go b/pkg/mcclient/modules/mod_secgroups.go index 78dbaacae0..7208a5bcb4 100644 --- a/pkg/mcclient/modules/mod_secgroups.go +++ b/pkg/mcclient/modules/mod_secgroups.go @@ -8,7 +8,7 @@ func init() { SecGroups = NewComputeManager("secgroup", "secgroups", []string{"ID", "Name", "Rules", "Is_public", "Created_at", - "Guest_cnt", "Description"}, + "Guest_cnt", "Description", "in_rules", "out_rules"}, []string{}) registerCompute(&SecGroups)