You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by al...@apache.org on 2026/05/26 02:29:06 UTC
(apisix-ingress-controller) branch fix/httproute-regex-uris-null created (now dc691f79)
This is an automated email from the ASF dual-hosted git repository.
AlinsRan pushed a change to branch fix/httproute-regex-uris-null
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
at dc691f79 fix: omit uris field when HTTPRoute path type is RegularExpression
This branch includes the following new commits:
new dc691f79 fix: omit uris field when HTTPRoute path type is RegularExpression
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(apisix-ingress-controller) 01/01: fix: omit uris field when HTTPRoute path type is RegularExpression
Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
AlinsRan pushed a commit to branch fix/httproute-regex-uris-null
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
commit dc691f793c0acc4a3dedb526deba26cb18eeed89
Author: rongxin <ro...@api7.ai>
AuthorDate: Tue May 26 10:28:53 2026 +0800
fix: omit uris field when HTTPRoute path type is RegularExpression
When path.type is RegularExpression, the controller sets route.Vars
for regex matching but leaves route.Uris as nil. The Uris field lacked
omitempty, causing it to serialize as "uris": null in the JSON payload.
APISIX Admin API v3 strictly requires uris to be an array, so it
rejects the entire bulk ADC sync payload with HTTP 400, breaking ALL
routes in the cluster, not just the offending one.
Add omitempty to the Uris JSON/YAML tag so the field is omitted when
nil. Add a unit test to verify that RegularExpression path matches
produce no Uris and the correct Vars entry.
Fixes #2764
Co-authored-by: Copilot <22...@users.noreply.github.com>
---
api/adc/types.go | 2 +-
internal/adc/translator/httproute_test.go | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/api/adc/types.go b/api/adc/types.go
index 130d63d0..0683c77f 100644
--- a/api/adc/types.go
+++ b/api/adc/types.go
@@ -135,7 +135,7 @@ type Route struct {
Priority *int64 `json:"priority,omitempty" yaml:"priority,omitempty"`
RemoteAddrs []string `json:"remote_addrs,omitempty" yaml:"remote_addrs,omitempty"`
Timeout *Timeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
- Uris []string `json:"uris" yaml:"uris"`
+ Uris []string `json:"uris,omitempty" yaml:"uris,omitempty"`
Vars Vars `json:"vars,omitempty" yaml:"vars,omitempty"`
}
diff --git a/internal/adc/translator/httproute_test.go b/internal/adc/translator/httproute_test.go
index 7b11e129..45079052 100644
--- a/internal/adc/translator/httproute_test.go
+++ b/internal/adc/translator/httproute_test.go
@@ -309,3 +309,28 @@ func TestAttachBackendTrafficPolicyHealthCheck(t *testing.T) {
})
}
}
+
+func TestTranslateGatewayHTTPRouteMatchRegexPath(t *testing.T) {
+ pathType := gatewayv1.PathMatchRegularExpression
+ pathValue := "/lk.*"
+
+ match := &gatewayv1.HTTPRouteMatch{
+ Path: &gatewayv1.HTTPPathMatch{
+ Type: &pathType,
+ Value: &pathValue,
+ },
+ }
+
+ translator := &Translator{Log: logr.Discard()}
+ route, err := translator.translateGatewayHTTPRouteMatch(match)
+ require.NoError(t, err)
+
+ // Uris must be nil (omitted) when path type is RegularExpression,
+ // so that the JSON payload does not contain "uris: null" which is
+ // rejected by APISIX Admin API v3.
+ assert.Nil(t, route.Uris, "Uris should be nil for RegularExpression path type")
+ assert.Len(t, route.Vars, 1)
+ assert.Equal(t, adctypes.StringOrSlice{StrVal: "uri"}, route.Vars[0][0])
+ assert.Equal(t, adctypes.StringOrSlice{StrVal: "~~"}, route.Vars[0][1])
+ assert.Equal(t, adctypes.StringOrSlice{StrVal: pathValue}, route.Vars[0][2])
+}