diff --git a/internal/ingress/controller/template/template.go b/internal/ingress/controller/template/template.go index 132051cb3b..6643027e71 100644 --- a/internal/ingress/controller/template/template.go +++ b/internal/ingress/controller/template/template.go @@ -120,7 +120,7 @@ var ( } return true }, - "escapeLocationPathVar": escapeLocationPathVar, + "escapeLiteralDollar": escapeLiteralDollar, "shouldConfigureLuaRestyWAF": shouldConfigureLuaRestyWAF, "buildLuaSharedDictionaries": buildLuaSharedDictionaries, "buildLocation": buildLocation, @@ -162,13 +162,13 @@ var ( } ) -// escapeLocationPathVar will replace the $ character with ${literal_dollar} +// escapeLiteralDollar will replace the $ character with ${literal_dollar} // which is made to work via the following configuration in the http section of // the template: // geo $literal_dollar { // default "$"; // } -func escapeLocationPathVar(input interface{}) string { +func escapeLiteralDollar(input interface{}) string { inputStr, ok := input.(string) if !ok { return "" diff --git a/internal/ingress/controller/template/template_test.go b/internal/ingress/controller/template/template_test.go index fd3c5d0631..a5b11f75fb 100644 --- a/internal/ingress/controller/template/template_test.go +++ b/internal/ingress/controller/template/template_test.go @@ -835,15 +835,28 @@ func TestBuildUpstreamName(t *testing.T) { } } -func TestEscapeLocationPathVar(t *testing.T) { - escapedPath := escapeLocationPathVar("/$") +func TestEscapeLiteralDollar(t *testing.T) { + escapedPath := escapeLiteralDollar("/$") expected := "/${literal_dollar}" if escapedPath != expected { - t.Errorf("Expected %s but got %s", expected, escapedPath) + t.Errorf("Expected %v but returned %v", expected, escapedPath) } - escapedPath = escapeLocationPathVar(false) + + escapedPath = escapeLiteralDollar("/hello-$/world-$/") + expected = "/hello-${literal_dollar}/world-${literal_dollar}/" + if escapedPath != expected { + t.Errorf("Expected %v but returned %v", expected, escapedPath) + } + + leaveUnchagned := "/leave-me/unchagned" + escapedPath = escapeLiteralDollar(leaveUnchagned) + if escapedPath != leaveUnchagned { + t.Errorf("Expected %v but returned %v", leaveUnchagned, escapedPath) + } + + escapedPath = escapeLiteralDollar(false) expected = "" if escapedPath != expected { - t.Errorf("Expected %s but got %s", expected, escapedPath) + t.Errorf("Expected %v but returned %v", expected, escapedPath) } } diff --git a/rootfs/etc/nginx/template/nginx.tmpl b/rootfs/etc/nginx/template/nginx.tmpl index 23d6dfa1b7..714d46dd73 100644 --- a/rootfs/etc/nginx/template/nginx.tmpl +++ b/rootfs/etc/nginx/template/nginx.tmpl @@ -976,7 +976,7 @@ stream { set $ingress_name "{{ $ing.Rule }}"; set $service_name "{{ $ing.Service }}"; set $service_port "{{ $location.Port }}"; - set $location_path "{{ $location.Path | escapeLocationPathVar }}"; + set $location_path "{{ $location.Path | escapeLiteralDollar }}"; {{ if $all.Cfg.EnableOpentracing }} opentracing_propagate_context;