Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkg/equality/elbv2/compare_option_for_rule_conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func CompareOptionForRuleCondition() cmp.Option {
cmpopts.IgnoreUnexported(elbv2types.QueryStringConditionConfig{}),
cmpopts.IgnoreUnexported(elbv2types.QueryStringKeyValuePair{}),
cmpopts.IgnoreUnexported(elbv2types.SourceIpConditionConfig{}),
cmpopts.IgnoreFields(elbv2types.RuleCondition{}, "Values"),
cmpopts.IgnoreFields(elbv2types.RuleCondition{}, "Values", "RegexValues"),
}
}

Expand Down
54 changes: 54 additions & 0 deletions pkg/equality/elbv2/compare_option_for_rule_conditions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,60 @@ func Test_CompareOptionForRuleConditions(t *testing.T) {
},
expected: true,
},
{
name: "equal - regex path pattern with AWS-mirrored top-level RegexValues",
desiredRuleCondition: []types.RuleCondition{
{
Field: awssdk.String("host-header"),
HostHeaderConfig: &types.HostHeaderConditionConfig{
Values: []string{"example.com"},
},
},
{
Field: awssdk.String("path-pattern"),
PathPatternConfig: &types.PathPatternConditionConfig{
RegexValues: []string{"^/api/v1/.*"},
},
},
},
actualRuleCondition: []types.RuleCondition{
{
Field: awssdk.String("host-header"),
HostHeaderConfig: &types.HostHeaderConditionConfig{
Values: []string{"example.com"},
},
},
{
Field: awssdk.String("path-pattern"),
PathPatternConfig: &types.PathPatternConditionConfig{
RegexValues: []string{"^/api/v1/.*"},
},
RegexValues: []string{"^/api/v1/.*"},
},
},
expected: true,
},
{
name: "not equal - different regex path pattern",
desiredRuleCondition: []types.RuleCondition{
{
Field: awssdk.String("path-pattern"),
PathPatternConfig: &types.PathPatternConditionConfig{
RegexValues: []string{"^/api/v1/.*"},
},
},
},
actualRuleCondition: []types.RuleCondition{
{
Field: awssdk.String("path-pattern"),
PathPatternConfig: &types.PathPatternConditionConfig{
RegexValues: []string{"^/api/v2/.*"},
},
RegexValues: []string{"^/api/v2/.*"},
},
},
expected: false,
},
}

for _, tc := range testCase {
Expand Down
16 changes: 14 additions & 2 deletions pkg/ingress/rule_optimizer.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ func isInfiniteRedirectRule(port int32, protocol elbv2model.Protocol, rule Rule)
case condition.Field == elbv2model.RuleConditionFieldHostHeader && condition.HostHeaderConfig != nil:
ruleHosts.Insert(condition.HostHeaderConfig.Values...)
case condition.Field == elbv2model.RuleConditionFieldPathPattern && condition.PathPatternConfig != nil:
// We dont check for infinite rules for regex paths
if len(condition.PathPatternConfig.RegexValues) > 0 {
return false
}
rulePaths.Insert(condition.PathPatternConfig.Values...)
}
}
Expand Down Expand Up @@ -146,7 +150,11 @@ func isSupersetConditions(lhsConditions []elbv2model.RuleCondition, rhsCondition
case condition.Field == elbv2model.RuleConditionFieldHostHeader && condition.HostHeaderConfig != nil:
lhsHosts.Insert(condition.HostHeaderConfig.Values...)
case condition.Field == elbv2model.RuleConditionFieldPathPattern && condition.PathPatternConfig != nil:
lhsPaths.Insert(condition.PathPatternConfig.Values...)
if len(condition.PathPatternConfig.RegexValues) > 0 {
lhsPaths.Insert(condition.PathPatternConfig.RegexValues...)
} else {
lhsPaths.Insert(condition.PathPatternConfig.Values...)
}
default:
// if there are any other conditions, then we treat it as not superset.
return false
Expand All @@ -160,7 +168,11 @@ func isSupersetConditions(lhsConditions []elbv2model.RuleCondition, rhsCondition
case condition.Field == elbv2model.RuleConditionFieldHostHeader && condition.HostHeaderConfig != nil:
rhsHosts.Insert(condition.HostHeaderConfig.Values...)
case condition.Field == elbv2model.RuleConditionFieldPathPattern && condition.PathPatternConfig != nil:
rhsPaths.Insert(condition.PathPatternConfig.Values...)
if len(condition.PathPatternConfig.RegexValues) > 0 {
rhsPaths.Insert(condition.PathPatternConfig.RegexValues...)
} else {
rhsPaths.Insert(condition.PathPatternConfig.Values...)
}
}
}

Expand Down
Loading