From 1abdb4f13629eb5fa69fd7995a3e97bc0a5cb006 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 28 Apr 2020 22:04:06 +0800 Subject: [PATCH] vpcagent: models: sort security group rules --- pkg/vpcagent/models/secgrouprules_sort.go | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 pkg/vpcagent/models/secgrouprules_sort.go diff --git a/pkg/vpcagent/models/secgrouprules_sort.go b/pkg/vpcagent/models/secgrouprules_sort.go new file mode 100644 index 0000000000..26e628b1be --- /dev/null +++ b/pkg/vpcagent/models/secgrouprules_sort.go @@ -0,0 +1,37 @@ +package models + +import ( + "sort" +) + +func (el *Guest) OrderedSecurityGroupRules() []*SecurityGroupRule { + rs := []*SecurityGroupRule{} + for _, secgroup := range el.SecurityGroups { + rs = append(rs, secgroup.securityGroupRules()...) + } + sort.Slice(rs, SecurityGroupRuleLessFunc(rs)) + if el.AdminSecurityGroup != nil { + rs = append(rs, el.AdminSecurityGroup.OrderedSecurityGroupRules()...) + } + return rs +} + +func (el *SecurityGroup) securityGroupRules() []*SecurityGroupRule { + rs := make([]*SecurityGroupRule, 0, len(el.SecurityGroupRules)) + for _, r := range el.SecurityGroupRules { + rs = append(rs, r) + } + return rs +} + +func (el *SecurityGroup) OrderedSecurityGroupRules() []*SecurityGroupRule { + rs := el.securityGroupRules() + sort.Slice(rs, SecurityGroupRuleLessFunc(rs)) + return rs +} + +func SecurityGroupRuleLessFunc(rs []*SecurityGroupRule) func(i, j int) bool { + return func(i, j int) bool { + return rs[i].Priority < rs[i].Priority + } +}