This is an automated email from the ASF dual-hosted git repository.

zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 32561d01 fix: allow passing plugin config name for route with no 
backends (#1578)
32561d01 is described below

commit 32561d01e7a99bae01a392f46f95cdd388073f5b
Author: ikatlinsky <[email protected]>
AuthorDate: Tue Jan 10 10:48:33 2023 +0100

    fix: allow passing plugin config name for route with no backends (#1578)
    
    Co-authored-by: Katlinsky, Ilya <[email protected]>
---
 pkg/providers/apisix/translation/apisix_route.go   |  6 +--
 .../apisix/translation/apisix_route_test.go        | 39 ++++++++++++++
 .../suite-plugins-other/plugin_config.go           | 63 ++++++++++++++++++++++
 3 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/pkg/providers/apisix/translation/apisix_route.go 
b/pkg/providers/apisix/translation/apisix_route.go
index 1d7f4042..2706f0f8 100644
--- a/pkg/providers/apisix/translation/apisix_route.go
+++ b/pkg/providers/apisix/translation/apisix_route.go
@@ -325,6 +325,9 @@ func (t *translator) translateHTTPRouteV2(ctx 
*translation.TranslateContext, ar
                route.EnableWebsocket = part.Websocket
                route.Plugins = pluginMap
                route.Timeout = timeout
+               if part.PluginConfigName != "" {
+                       route.PluginConfigId = 
id.GenID(apisixv1.ComposePluginConfigName(ar.Namespace, part.PluginConfigName))
+               }
                for k, v := range ar.ObjectMeta.Labels {
                        route.Metadata.Labels[k] = v
                }
@@ -351,9 +354,6 @@ func (t *translator) translateHTTPRouteV2(ctx 
*translation.TranslateContext, ar
 
                        upstreamName := 
apisixv1.ComposeUpstreamName(ar.Namespace, backend.ServiceName, backend.Subset, 
svcPort, backend.ResolveGranularity)
                        route.UpstreamId = id.GenID(upstreamName)
-                       if part.PluginConfigName != "" {
-                               route.PluginConfigId = 
id.GenID(apisixv1.ComposePluginConfigName(ar.Namespace, part.PluginConfigName))
-                       }
 
                        if len(backends) > 0 {
                                weight := translation.DefaultWeight
diff --git a/pkg/providers/apisix/translation/apisix_route_test.go 
b/pkg/providers/apisix/translation/apisix_route_test.go
index e95e6a46..ab7ebabf 100644
--- a/pkg/providers/apisix/translation/apisix_route_test.go
+++ b/pkg/providers/apisix/translation/apisix_route_test.go
@@ -741,3 +741,42 @@ func TestTranslateApisixRouteV2WithUpstream(t *testing.T) {
                TLS:     nil,
        }, ups)
 }
+
+func TestTranslateApisixRouteV2WithUpstreamNoBackendsAndPluginConfigName(t 
*testing.T) {
+       tr, processCh := mockTranslatorV2(t)
+       <-processCh
+       <-processCh
+
+       ar := &configv2.ApisixRoute{
+               ObjectMeta: metav1.ObjectMeta{
+                       Name:      "ar",
+                       Namespace: "test",
+               },
+               Spec: configv2.ApisixRouteSpec{
+                       HTTP: []configv2.ApisixRouteHTTP{
+                               {
+                                       Name: "rule1",
+                                       Match: configv2.ApisixRouteHTTPMatch{
+                                               Paths: []string{
+                                                       "/*",
+                                               },
+                                       },
+                                       Upstreams: 
[]configv2.ApisixRouteUpstreamReference{
+                                               {
+                                                       Name:   "au",
+                                                       Weight: ptrOf(1),
+                                               },
+                                       },
+                                       PluginConfigName: 
"test-PluginConfigName-1",
+                               },
+                       },
+               },
+       }
+
+       tctx, err := tr.TranslateRouteV2(ar)
+       assert.NoError(t, err)
+       assert.Len(t, tctx.PluginConfigs, 0)
+       assert.Len(t, tctx.Routes, 1)
+       expectedPluginId := 
id.GenID(apisixv1.ComposePluginConfigName(ar.Namespace, 
ar.Spec.HTTP[0].PluginConfigName))
+       assert.Equal(t, expectedPluginId, tctx.Routes[0].PluginConfigId)
+}
diff --git a/test/e2e/suite-plugins/suite-plugins-other/plugin_config.go 
b/test/e2e/suite-plugins/suite-plugins-other/plugin_config.go
index 3daa07f2..d1cfbb48 100644
--- a/test/e2e/suite-plugins/suite-plugins-other/plugin_config.go
+++ b/test/e2e/suite-plugins/suite-plugins-other/plugin_config.go
@@ -539,5 +539,68 @@ spec:
        })
        ginkgo.Describe("suite-plugins-other: scaffold v2", func() {
                suites(scaffold.NewDefaultV2Scaffold)
+
+               s := scaffold.NewDefaultV2Scaffold()
+               ginkgo.It("applies plugin config for route with upstream", 
func() {
+                       apc := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v2
+kind: ApisixPluginConfig
+metadata:
+ name: httpbin-plugins
+spec:
+ plugins:
+ - name: proxy-rewrite
+   enable: true
+   config:
+     regex_uri:
+     - ^/httpbin/(.*)
+     - /$1                     
+`)
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixResource(apc))
+
+                       au := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v2
+kind: ApisixUpstream
+metadata:
+ name: httpbin-upstream
+spec:
+ externalNodes:
+ - type: Domain
+   name: httpbin.org
+`)
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixResource(au))
+
+                       ar := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v2
+kind: ApisixRoute
+metadata:
+ name: httpbin-route
+spec:
+ http:
+ - name: httpbin-route-rule
+   match:
+    hosts:
+    - httpbin.org
+    paths:
+    - /httpbin/*
+    methods:
+    - GET
+   upstreams:
+   - name: httpbin-upstream
+   plugin_config_name: httpbin-plugins
+`)
+
+                       assert.Nil(ginkgo.GinkgoT(), 
s.CreateVersionedApisixResource(ar))
+
+                       err := s.EnsureNumApisixUpstreamsCreated(1)
+                       assert.Nil(ginkgo.GinkgoT(), err, "Checking number of 
upstreams")
+                       err = s.EnsureNumApisixPluginConfigCreated(1)
+                       assert.Nil(ginkgo.GinkgoT(), err, "Checking number of 
pluginConfigs")
+                       err = s.EnsureNumApisixRoutesCreated(1)
+                       assert.Nil(ginkgo.GinkgoT(), err, "Checking number of 
routes")
+
+                       resp := 
s.NewAPISIXClient().GET("/httpbin/ip").WithHeader("Host", 
"httpbin.org").Expect()
+                       resp.Status(http.StatusOK)
+               })
        })
 })

Reply via email to