Skip to content

Commit

Permalink
fix: allow passing plugin config name for route with no backends (#1578
Browse files Browse the repository at this point in the history
…) (#1594)

Co-authored-by: Jintao Zhang <zhangjintao@apache.org>
Co-authored-by: ikatlinsky <ilya.katlinsky@gmail.com>
Co-authored-by: Katlinsky, Ilya <i.katlinsky@itransition.com>
  • Loading branch information
4 people committed Jan 10, 2023
1 parent c4ba664 commit dec4439
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 3 deletions.
7 changes: 4 additions & 3 deletions pkg/providers/apisix/translation/apisix_route.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,10 @@ 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))
}

ctx.AddRoute(route)

// --- translate "Backends" ---
Expand All @@ -347,9 +351,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
Expand Down
39 changes: 39 additions & 0 deletions pkg/providers/apisix/translation/apisix_route_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
63 changes: 63 additions & 0 deletions test/e2e/suite-plugins/suite-plugins-other/plugin_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
})
})

0 comments on commit dec4439

Please sign in to comment.