From 881387e5227e465df6406d18bac02ebcd308ad5e Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Mon, 11 Mar 2019 14:54:17 +0200 Subject: [PATCH] Fix HTTP URI match conditions --- docs/gitbook/how-it-works.md | 2 +- docs/gitbook/usage/ab-testing.md | 2 +- pkg/router/istio.go | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/gitbook/how-it-works.md b/docs/gitbook/how-it-works.md index 14e87b1ac..a09b9249a 100644 --- a/docs/gitbook/how-it-works.md +++ b/docs/gitbook/how-it-works.md @@ -347,7 +347,7 @@ You can enable A/B testing by specifying the HTTP match conditions and the numbe match: - headers: user-agent: - regex: "^(?!.*Chrome)(?=.*\bSafari\b).*$" + regex: "^(?!.*Chrome).*Safari.*" - headers: cookie: regex: "^(.*?;)?(user=test)(;.*)?$" diff --git a/docs/gitbook/usage/ab-testing.md b/docs/gitbook/usage/ab-testing.md index 650780435..50659bb45 100644 --- a/docs/gitbook/usage/ab-testing.md +++ b/docs/gitbook/usage/ab-testing.md @@ -72,7 +72,7 @@ spec: match: - headers: user-agent: - regex: "^(?!.*Chrome)(?=.*\bSafari\b).*$" + regex: "^(?!.*Chrome).*Safari.*" - headers: cookie: regex: "^(.*?;)?(type=insider)(;.*)?$" diff --git a/pkg/router/istio.go b/pkg/router/istio.go index 7f3ad674e..79ba9feb9 100644 --- a/pkg/router/istio.go +++ b/pkg/router/istio.go @@ -93,7 +93,7 @@ func (ir *IstioRouter) Sync(canary *flaggerv1.Canary) error { } if len(canary.Spec.CanaryAnalysis.Match) > 0 { - canaryMatch := append(canary.Spec.Service.Match, canary.Spec.CanaryAnalysis.Match...) + canaryMatch := mergeMatchConditions(canary.Spec.CanaryAnalysis.Match, canary.Spec.Service.Match) newSpec.Http = []istiov1alpha3.HTTPRoute{ { Match: canaryMatch, @@ -274,7 +274,7 @@ func (ir *IstioRouter) SetRoutes( // fix routing (A/B testing) if len(canary.Spec.CanaryAnalysis.Match) > 0 { // merge the common routes with the canary ones - canaryMatch := append(canary.Spec.Service.Match, canary.Spec.CanaryAnalysis.Match...) + canaryMatch := mergeMatchConditions(canary.Spec.CanaryAnalysis.Match, canary.Spec.Service.Match) vsCopy.Spec.Http = []istiov1alpha3.HTTPRoute{ { Match: canaryMatch, @@ -345,3 +345,16 @@ func addHeaders(canary *flaggerv1.Canary) (headers map[string]string) { return } + +// mergeMatchConditions appends the URI match rules to canary conditions +func mergeMatchConditions(canary, defaults []istiov1alpha3.HTTPMatchRequest) []istiov1alpha3.HTTPMatchRequest { + for i := range canary { + for _, d := range defaults { + if d.Uri != nil { + canary[i].Uri = d.Uri + } + } + } + + return canary +}