Skip to content

Commit 48870d0

Browse files
authored
Merge pull request #1450 from ioito/hotfix/qx-listener-rule
fix(aws): lb listener rule
2 parents 5f8df55 + 8725daf commit 48870d0

File tree

4 files changed

+80
-63
lines changed

4 files changed

+80
-63
lines changed

pkg/multicloud/aws/loadbalancercert.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ type SElbCertificate struct {
3838
cert *x509.Certificate
3939

4040
Path string `json:"Path"`
41-
ServerCertificateName string `json:"ServerCertificateName"`
42-
ServerCertificateID string `json:"ServerCertificateId"`
43-
Arn string `json:"Arn"`
44-
UploadDate time.Time `json:"UploadDate"`
45-
Expiration time.Time `json:"Expiration"`
41+
ServerCertificateName string `xml:"ServerCertificateName"`
42+
ServerCertificateID string `xml:"ServerCertificateId"`
43+
Arn string `xml:"Arn"`
44+
UploadDate time.Time `xml:"UploadDate"`
45+
Expiration time.Time `xml:"Expiration"`
4646
PublicKey string
4747
}
4848

pkg/multicloud/aws/loadbalancerlistener.go

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,22 @@ type SElbListener struct {
4242
lb *SElb
4343
group *SElbBackendGroup
4444

45-
Port int `json:"Port"`
46-
Protocol string `json:"Protocol"`
45+
Port int `xml:"Port"`
46+
Protocol string `xml:"Protocol"`
4747
DefaultActions []DefaultAction `xml:"DefaultActions>member"`
48-
SSLPolicy string `json:"SslPolicy"`
49-
Certificates []Certificate `json:"Certificates"`
50-
LoadBalancerArn string `json:"LoadBalancerArn"`
51-
ListenerArn string `json:"ListenerArn"`
48+
SSLPolicy string `xml:"SslPolicy"`
49+
Certificates []Certificate `xml:"Certificates>member"`
50+
LoadBalancerArn string `xml:"LoadBalancerArn"`
51+
ListenerArn string `xml:"ListenerArn"`
5252
}
5353

5454
type Certificate struct {
55-
CertificateArn string `json:"CertificateArn"`
55+
CertificateArn string `xml:"CertificateArn"`
5656
}
5757

5858
type DefaultAction struct {
59-
TargetGroupArn string `json:"TargetGroupArn"`
60-
Type string `json:"Type"`
59+
TargetGroupArn string `xml:"TargetGroupArn"`
60+
Type string `xml:"Type"`
6161
}
6262

6363
func (self *SElbListener) GetId() string {
@@ -379,7 +379,7 @@ func (self *SElbListener) CreateILoadBalancerListenerRule(rule *cloudprovider.SL
379379
}
380380

381381
func (self *SElbListener) GetILoadBalancerListenerRuleById(ruleId string) (cloudprovider.ICloudLoadbalancerListenerRule, error) {
382-
rule, err := self.lb.region.GetElbListenerRule(ruleId)
382+
rule, err := self.lb.region.GetElbListenerRule(self.ListenerArn, ruleId)
383383
if err != nil {
384384
return nil, errors.Wrap(err, "GetElbListenerRule")
385385
}
@@ -389,19 +389,13 @@ func (self *SElbListener) GetILoadBalancerListenerRuleById(ruleId string) (cloud
389389

390390
func (self *SElbListener) GetILoadbalancerListenerRules() ([]cloudprovider.ICloudLoadbalancerListenerRule, error) {
391391
ret := []cloudprovider.ICloudLoadbalancerListenerRule{}
392-
marker := ""
393-
for {
394-
part, marker, err := self.lb.region.GetElbListenerRules(self.ListenerArn, "", marker)
395-
if err != nil {
396-
return nil, err
397-
}
398-
for i := range part {
399-
part[i].listener = self
400-
ret = append(ret, &part[i])
401-
}
402-
if len(marker) == 0 || len(part) == 0 {
403-
break
404-
}
392+
rules, err := self.lb.region.GetElbListenerRules(self.ListenerArn, "")
393+
if err != nil {
394+
return nil, err
395+
}
396+
for i := range rules {
397+
rules[i].listener = self
398+
ret = append(ret, &rules[i])
405399
}
406400
return ret, nil
407401
}
@@ -603,36 +597,45 @@ func (self *SRegion) CreateElbListener(lbId string, opts *cloudprovider.SLoadbal
603597
return nil, errors.Wrapf(cloudprovider.ErrNotFound, "after created")
604598
}
605599

606-
func (self *SRegion) GetElbListenerRules(listenerId string, ruleId, marker string) ([]SElbListenerRule, string, error) {
600+
func (self *SRegion) GetElbListenerRules(listenerId string, ruleId string) ([]SElbListenerRule, error) {
607601
params := map[string]string{}
608602
if len(listenerId) > 0 {
609603
params["ListenerArn"] = listenerId
610604
}
611605
if len(ruleId) > 0 {
612606
params["RuleArns.member.1"] = ruleId
613607
}
614-
if len(marker) > 0 {
615-
params["Marker"] = marker
616-
}
617-
ret := &SElbListenerRules{}
618-
err := self.elbRequest("DescribeRules", params, ret)
619-
if err != nil {
620-
return nil, "", errors.Wrapf(err, "DescribeRules")
608+
609+
ret := []SElbListenerRule{}
610+
for {
611+
part := struct {
612+
Rules []SElbListenerRule `xml:"Rules>member"`
613+
NextMarker string
614+
}{}
615+
err := self.elbRequest("DescribeRules", params, &part)
616+
if err != nil {
617+
return nil, errors.Wrapf(err, "DescribeRules")
618+
}
619+
ret = append(ret, part.Rules...)
620+
if len(part.NextMarker) == 0 || len(part.Rules) == 0 {
621+
break
622+
}
623+
params["Marker"] = part.NextMarker
621624
}
622-
return ret.Rules, ret.NextMarker, nil
625+
return ret, nil
623626
}
624627

625-
func (self *SRegion) GetElbListenerRule(id string) (*SElbListenerRule, error) {
626-
rules, _, err := self.GetElbListenerRules("", id, "")
628+
func (self *SRegion) GetElbListenerRule(lisId, ruleId string) (*SElbListenerRule, error) {
629+
rules, err := self.GetElbListenerRules(lisId, ruleId)
627630
if err != nil {
628631
return nil, errors.Wrapf(err, "GetElbListenerRules")
629632
}
630633
for i := range rules {
631-
if rules[i].RuleArn == id {
634+
if rules[i].RuleArn == ruleId {
632635
return &rules[i], nil
633636
}
634637
}
635-
return nil, errors.Wrapf(cloudprovider.ErrNotFound, id)
638+
return nil, errors.Wrapf(cloudprovider.ErrNotFound, ruleId)
636639
}
637640

638641
func (self *SRegion) DeleteElbListener(id string) error {

pkg/multicloud/aws/loadbalancerlistenerrule.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,45 +40,45 @@ type SElbListenerRule struct {
4040
listener *SElbListener
4141
region *SRegion
4242

43-
Priority string `json:"Priority"`
44-
IsDefaultRule bool `json:"IsDefault"`
45-
Actions []Action `json:"Actions"`
46-
RuleArn string `json:"RuleArn"`
47-
Conditions []Condition `json:"Conditions"`
43+
Priority string `xml:"Priority"`
44+
IsDefaultRule bool `xml:"IsDefault"`
45+
Actions []Action `xml:"Actions>member"`
46+
RuleArn string `xml:"RuleArn"`
47+
Conditions []Condition `xml:"Conditions>member"`
4848
}
4949

5050
type Action struct {
51-
TargetGroupArn string `json:"TargetGroupArn"`
52-
Type string `json:"Type"`
51+
TargetGroupArn string `xml:"TargetGroupArn"`
52+
Type string `xml:"Type"`
5353
}
5454

5555
type Condition struct {
56-
Field string `json:"field"`
57-
HTTPRequestMethodConfig *Config `json:"httpRequestMethodConfig,omitempty"`
58-
Values []string `json:"values"`
59-
SourceIPConfig *Config `json:"sourceIpConfig,omitempty"`
60-
QueryStringConfig *QueryStringConfig `json:"queryStringConfig,omitempty"`
61-
HTTPHeaderConfig *HTTPHeaderConfig `json:"httpHeaderConfig,omitempty"`
62-
PathPatternConfig *Config `json:"pathPatternConfig,omitempty"`
63-
HostHeaderConfig *Config `json:"hostHeaderConfig,omitempty"`
56+
Field string `xml:"Field"`
57+
HTTPRequestMethodConfig *Config `xml:"HttpRequestMethodConfig"`
58+
Values []string `xml:"Values>member"`
59+
SourceIPConfig *Config `xml:"SourceIpConfig"`
60+
QueryStringConfig *QueryStringConfig `xml:"QueryStringConfig"`
61+
HTTPHeaderConfig *HTTPHeaderConfig `xml:"HttpHeaderConfig"`
62+
PathPatternConfig *Config `xml:"PathPatternConfig"`
63+
HostHeaderConfig *Config `xml:"HostHeaderConfig"`
6464
}
6565

6666
type HTTPHeaderConfig struct {
67-
HTTPHeaderName string `json:"HttpHeaderName"`
68-
Values []string `json:"values"`
67+
HTTPHeaderName string `xml:"HttpHeaderName"`
68+
Values []string `xml:"Values>member"`
6969
}
7070

7171
type Config struct {
72-
Values []string `json:"values"`
72+
Values []string `xml:"Values>member"`
7373
}
7474

7575
type QueryStringConfig struct {
76-
Values []Query `json:"values"`
76+
Values []Query `xml:"Values>member"`
7777
}
7878

7979
type Query struct {
80-
Key string `json:"key"`
81-
Value string `json:"value"`
80+
Key string `xml:"key"`
81+
Value string `xml:"value"`
8282
}
8383

8484
func (self *SElbListenerRule) GetId() string {
@@ -99,7 +99,7 @@ func (self *SElbListenerRule) GetStatus() string {
9999
}
100100

101101
func (self *SElbListenerRule) Refresh() error {
102-
rule, err := self.region.GetElbListenerRule(self.RuleArn)
102+
rule, err := self.region.GetElbListenerRule(self.listener.ListenerArn, self.RuleArn)
103103
if err != nil {
104104
return err
105105
}

pkg/multicloud/aws/shell/lb.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,18 @@ func init() {
115115
return nil
116116
})
117117

118+
type LbListenerRuleListOptions struct {
119+
ListenerId string
120+
RuleId string
121+
}
122+
123+
shellutils.R(&LbListenerRuleListOptions{}, "lb-listener-rule-list", "List loadbalancer listener rules", func(cli *aws.SRegion, args *LbListenerRuleListOptions) error {
124+
rules, err := cli.GetElbListenerRules(args.ListenerId, args.RuleId)
125+
if err != nil {
126+
return err
127+
}
128+
printList(rules, 0, 0, 0, nil)
129+
return nil
130+
})
131+
118132
}

0 commit comments

Comments
 (0)