You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by zh...@apache.org on 2022/08/30 10:11:00 UTC
[apisix-ingress-controller] branch master updated: chore(refactor): annotations handle (#1245)
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 0b999ec1 chore(refactor): annotations handle (#1245)
0b999ec1 is described below
commit 0b999ec1d3087f7bf0037acbe2d398eaa0efab2a
Author: Xin Rong <ro...@api7.ai>
AuthorDate: Tue Aug 30 18:10:55 2022 +0800
chore(refactor): annotations handle (#1245)
---
pkg/providers/ingress/translation/annotations.go | 46 +++++++++-----
.../{csrf.go => pluginconfig/pluginconfig.go} | 33 ++--------
.../annotations/{ => plugins}/authorization.go | 20 +++---
.../translation/annotations/{ => plugins}/cors.go | 22 +++----
.../annotations/{ => plugins}/cors_test.go | 19 +++---
.../translation/annotations/{ => plugins}/csrf.go | 16 ++---
.../annotations/{ => plugins}/forward_auth.go | 25 +++-----
.../annotations/{ => plugins}/forward_auth_test.go | 23 +++----
.../annotations/{ => plugins}/iprestriction.go | 16 ++---
.../{ => plugins}/iprestriction_test.go | 19 +++---
.../plugins/plugins.go} | 44 +++++++++----
.../annotations/{ => plugins}/redirect.go | 19 ++----
.../annotations/{ => plugins}/rewrite.go | 19 ++----
.../annotations/{csrf.go => regex/regex.go} | 33 ++--------
.../ingress/translation/annotations/types.go | 63 ++++++++++++++----
.../{csrf.go => websocket/websocket.go} | 33 ++--------
.../ingress/translation/annotations_test.go | 74 ++++++++++++++++++++++
pkg/providers/ingress/translation/translator.go | 55 ++++++----------
18 files changed, 311 insertions(+), 268 deletions(-)
diff --git a/pkg/providers/ingress/translation/annotations.go b/pkg/providers/ingress/translation/annotations.go
index 6b9d3d81..7ddbeddf 100644
--- a/pkg/providers/ingress/translation/annotations.go
+++ b/pkg/providers/ingress/translation/annotations.go
@@ -15,40 +15,54 @@
package translation
import (
+ "github.com/imdario/mergo"
"go.uber.org/zap"
"github.com/apache/apisix-ingress-controller/pkg/log"
"github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations/pluginconfig"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations/plugins"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations/regex"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations/websocket"
apisix "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
+// Structure extracted by Ingress Resource
+type Ingress struct {
+ Plugins apisix.Plugins
+ UseRegex bool
+ EnableWebSocket bool
+ PluginConfigName string
+}
+
var (
- _handlers = []annotations.Handler{
- annotations.NewCorsHandler(),
- annotations.NewIPRestrictionHandler(),
- annotations.NewRewriteHandler(),
- annotations.NewRedirectHandler(),
- annotations.NewForwardAuthHandler(),
- annotations.NewBasicAuthHandler(),
- annotations.NewKeyAuthHandler(),
- annotations.NewCSRFHandler(),
+ _parsers = map[string]annotations.IngressAnnotationsParser{
+ "Plugins": plugins.NewParser(),
+ "UseRegex": regex.NewParser(),
+ "EnableWebSocket": websocket.NewParser(),
+ "PluginConfigName": pluginconfig.NewParser(),
}
)
-func (t *translator) TranslateAnnotations(anno map[string]string) apisix.Plugins {
+func (t *translator) TranslateAnnotations(anno map[string]string) *Ingress {
+ ing := &Ingress{}
extractor := annotations.NewExtractor(anno)
- plugins := make(apisix.Plugins)
- for _, handler := range _handlers {
- out, err := handler.Handle(extractor)
+ data := make(map[string]interface{})
+ for name, parser := range _parsers {
+ out, err := parser.Parse(extractor)
if err != nil {
- log.Warnw("failed to handle annotations",
+ log.Warnw("failed to parse annotations",
zap.Error(err),
)
continue
}
if out != nil {
- plugins[handler.PluginName()] = out
+ data[name] = out
}
}
- return plugins
+ err := mergo.MapWithOverwrite(ing, data)
+ if err != nil {
+ log.Errorw("unexpected error merging extracted annotations", zap.Error(err))
+ }
+ return ing
}
diff --git a/pkg/providers/ingress/translation/annotations/csrf.go b/pkg/providers/ingress/translation/annotations/pluginconfig/pluginconfig.go
similarity index 54%
copy from pkg/providers/ingress/translation/annotations/csrf.go
copy to pkg/providers/ingress/translation/annotations/pluginconfig/pluginconfig.go
index d3cc087b..1847625a 100644
--- a/pkg/providers/ingress/translation/annotations/csrf.go
+++ b/pkg/providers/ingress/translation/annotations/pluginconfig/pluginconfig.go
@@ -12,37 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package pluginconfig
import (
- apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
)
-const (
- _enableCsrf = AnnotationsPrefix + "enable-csrf"
- _csrfKey = AnnotationsPrefix + "csrf-key"
-)
-
-type csrf struct{}
-
-// NewCSRFHandler creates a handler to convert annotations about
-// CSRF to APISIX csrf plugin.
-func NewCSRFHandler() Handler {
- return &csrf{}
-}
+type pluginconfig struct{}
-func (c *csrf) PluginName() string {
- return "csrf"
+func NewParser() annotations.IngressAnnotationsParser {
+ return &pluginconfig{}
}
-func (c *csrf) Handle(e Extractor) (interface{}, error) {
- if !e.GetBoolAnnotation(_enableCsrf) {
- return nil, nil
- }
- var plugin apisixv1.CSRFConfig
- plugin.Key = e.GetStringAnnotation(_csrfKey)
- if plugin.Key != "" {
- return &plugin, nil
- }
- return nil, nil
+func (w *pluginconfig) Parse(e annotations.Extractor) (interface{}, error) {
+ return e.GetStringAnnotation(annotations.AnnotationsPluginConfigName), nil
}
diff --git a/pkg/providers/ingress/translation/annotations/authorization.go b/pkg/providers/ingress/translation/annotations/plugins/authorization.go
similarity index 74%
rename from pkg/providers/ingress/translation/annotations/authorization.go
rename to pkg/providers/ingress/translation/annotations/plugins/authorization.go
index c97567a4..246e754a 100644
--- a/pkg/providers/ingress/translation/annotations/authorization.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/authorization.go
@@ -12,22 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- // auth-type: keyAuth | basicAuth
- _authType = AnnotationsPrefix + "auth-type"
-)
-
type basicAuth struct{}
// NewkeyBasicHandler creates a handler to convert
// annotations about basicAuth control to APISIX basic-auth plugin.
-func NewBasicAuthHandler() Handler {
+func NewBasicAuthHandler() PluginAnnotationsHandler {
return &basicAuth{}
}
@@ -35,8 +31,8 @@ func (b *basicAuth) PluginName() string {
return "basic-auth"
}
-func (b *basicAuth) Handle(e Extractor) (interface{}, error) {
- if e.GetStringAnnotation(_authType) != "basicAuth" {
+func (b *basicAuth) Handle(e annotations.Extractor) (interface{}, error) {
+ if e.GetStringAnnotation(annotations.AnnotationsAuthType) != "basicAuth" {
return nil, nil
}
plugin := apisixv1.BasicAuthConfig{}
@@ -47,7 +43,7 @@ type keyAuth struct{}
// NewkeyAuthHandler creates a handler to convert
// annotations about keyAuth control to APISIX key-auth plugin.
-func NewKeyAuthHandler() Handler {
+func NewKeyAuthHandler() PluginAnnotationsHandler {
return &keyAuth{}
}
@@ -55,8 +51,8 @@ func (k *keyAuth) PluginName() string {
return "key-auth"
}
-func (k *keyAuth) Handle(e Extractor) (interface{}, error) {
- if e.GetStringAnnotation(_authType) != "keyAuth" {
+func (k *keyAuth) Handle(e annotations.Extractor) (interface{}, error) {
+ if e.GetStringAnnotation(annotations.AnnotationsAuthType) != "keyAuth" {
return nil, nil
}
plugin := apisixv1.KeyAuthConfig{}
diff --git a/pkg/providers/ingress/translation/annotations/cors.go b/pkg/providers/ingress/translation/annotations/plugins/cors.go
similarity index 66%
rename from pkg/providers/ingress/translation/annotations/cors.go
rename to pkg/providers/ingress/translation/annotations/plugins/cors.go
index ee88e6c4..42d63b71 100644
--- a/pkg/providers/ingress/translation/annotations/cors.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/cors.go
@@ -12,24 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _enableCors = AnnotationsPrefix + "enable-cors"
- _corsAllowOrigin = AnnotationsPrefix + "cors-allow-origin"
- _corsAllowHeaders = AnnotationsPrefix + "cors-allow-headers"
- _corsAllowMethods = AnnotationsPrefix + "cors-allow-methods"
-)
-
type cors struct{}
// NewCorsHandler creates a handler to convert annotations about
// CORS to APISIX cors plugin.
-func NewCorsHandler() Handler {
+func NewCorsHandler() PluginAnnotationsHandler {
return &cors{}
}
@@ -37,13 +31,13 @@ func (c *cors) PluginName() string {
return "cors"
}
-func (c *cors) Handle(e Extractor) (interface{}, error) {
- if !e.GetBoolAnnotation(_enableCors) {
+func (c *cors) Handle(e annotations.Extractor) (interface{}, error) {
+ if !e.GetBoolAnnotation(annotations.AnnotationsEnableCors) {
return nil, nil
}
return &apisixv1.CorsConfig{
- AllowOrigins: e.GetStringAnnotation(_corsAllowOrigin),
- AllowMethods: e.GetStringAnnotation(_corsAllowMethods),
- AllowHeaders: e.GetStringAnnotation(_corsAllowHeaders),
+ AllowOrigins: e.GetStringAnnotation(annotations.AnnotationsCorsAllowOrigin),
+ AllowMethods: e.GetStringAnnotation(annotations.AnnotationsCorsAllowMethods),
+ AllowHeaders: e.GetStringAnnotation(annotations.AnnotationsCorsAllowHeaders),
}, nil
}
diff --git a/pkg/providers/ingress/translation/annotations/cors_test.go b/pkg/providers/ingress/translation/annotations/plugins/cors_test.go
similarity index 72%
rename from pkg/providers/ingress/translation/annotations/cors_test.go
rename to pkg/providers/ingress/translation/annotations/plugins/cors_test.go
index 342c0f29..cf6a9f95 100644
--- a/pkg/providers/ingress/translation/annotations/cors_test.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/cors_test.go
@@ -12,25 +12,26 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
func TestCorsHandler(t *testing.T) {
- annotations := map[string]string{
- _enableCors: "true",
- _corsAllowHeaders: "abc,def",
- _corsAllowOrigin: "https://a.com",
- _corsAllowMethods: "GET,HEAD",
+ anno := map[string]string{
+ annotations.AnnotationsEnableCors: "true",
+ annotations.AnnotationsCorsAllowHeaders: "abc,def",
+ annotations.AnnotationsCorsAllowOrigin: "https://a.com",
+ annotations.AnnotationsCorsAllowMethods: "GET,HEAD",
}
p := NewCorsHandler()
- out, err := p.Handle(NewExtractor(annotations))
+ out, err := p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
config := out.(*apisixv1.CorsConfig)
assert.Equal(t, "abc,def", config.AllowHeaders)
@@ -39,8 +40,8 @@ func TestCorsHandler(t *testing.T) {
assert.Equal(t, "cors", p.PluginName())
- annotations[_enableCors] = "false"
- out, err = p.Handle(NewExtractor(annotations))
+ anno[annotations.AnnotationsEnableCors] = "false"
+ out, err = p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
assert.Nil(t, out, "checking given output")
}
diff --git a/pkg/providers/ingress/translation/annotations/csrf.go b/pkg/providers/ingress/translation/annotations/plugins/csrf.go
similarity index 76%
copy from pkg/providers/ingress/translation/annotations/csrf.go
copy to pkg/providers/ingress/translation/annotations/plugins/csrf.go
index d3cc087b..b8d595f5 100644
--- a/pkg/providers/ingress/translation/annotations/csrf.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/csrf.go
@@ -12,22 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _enableCsrf = AnnotationsPrefix + "enable-csrf"
- _csrfKey = AnnotationsPrefix + "csrf-key"
-)
-
type csrf struct{}
// NewCSRFHandler creates a handler to convert annotations about
// CSRF to APISIX csrf plugin.
-func NewCSRFHandler() Handler {
+func NewCSRFHandler() PluginAnnotationsHandler {
return &csrf{}
}
@@ -35,12 +31,12 @@ func (c *csrf) PluginName() string {
return "csrf"
}
-func (c *csrf) Handle(e Extractor) (interface{}, error) {
- if !e.GetBoolAnnotation(_enableCsrf) {
+func (c *csrf) Handle(e annotations.Extractor) (interface{}, error) {
+ if !e.GetBoolAnnotation(annotations.AnnotationsEnableCsrf) {
return nil, nil
}
var plugin apisixv1.CSRFConfig
- plugin.Key = e.GetStringAnnotation(_csrfKey)
+ plugin.Key = e.GetStringAnnotation(annotations.AnnotationsCsrfKey)
if plugin.Key != "" {
return &plugin, nil
}
diff --git a/pkg/providers/ingress/translation/annotations/forward_auth.go b/pkg/providers/ingress/translation/annotations/plugins/forward_auth.go
similarity index 61%
rename from pkg/providers/ingress/translation/annotations/forward_auth.go
rename to pkg/providers/ingress/translation/annotations/plugins/forward_auth.go
index c55016d4..b5a7543f 100644
--- a/pkg/providers/ingress/translation/annotations/forward_auth.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/forward_auth.go
@@ -12,25 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _forwardAuthURI = AnnotationsPrefix + "auth-uri"
- _forwardAuthSSLVerify = AnnotationsPrefix + "auth-ssl-verify"
- _forwardAuthRequestHeaders = AnnotationsPrefix + "auth-request-headers"
- _forwardAuthUpstreamHeaders = AnnotationsPrefix + "auth-upstream-headers"
- _forwardAuthClientHeaders = AnnotationsPrefix + "auth-client-headers"
-)
-
type forwardAuth struct{}
// NewForwardAuthHandler creates a handler to convert
// annotations about forward authentication to APISIX forward-auth plugin.
-func NewForwardAuthHandler() Handler {
+func NewForwardAuthHandler() PluginAnnotationsHandler {
return &forwardAuth{}
}
@@ -38,19 +31,19 @@ func (i *forwardAuth) PluginName() string {
return "forward-auth"
}
-func (i *forwardAuth) Handle(e Extractor) (interface{}, error) {
- uri := e.GetStringAnnotation(_forwardAuthURI)
+func (i *forwardAuth) Handle(e annotations.Extractor) (interface{}, error) {
+ uri := e.GetStringAnnotation(annotations.AnnotationsForwardAuthURI)
sslVerify := true
- if e.GetStringAnnotation(_forwardAuthSSLVerify) == "false" {
+ if e.GetStringAnnotation(annotations.AnnotationsForwardAuthSSLVerify) == "false" {
sslVerify = false
}
if len(uri) > 0 {
return &apisixv1.ForwardAuthConfig{
URI: uri,
SSLVerify: sslVerify,
- RequestHeaders: e.GetStringsAnnotation(_forwardAuthRequestHeaders),
- UpstreamHeaders: e.GetStringsAnnotation(_forwardAuthUpstreamHeaders),
- ClientHeaders: e.GetStringsAnnotation(_forwardAuthClientHeaders),
+ RequestHeaders: e.GetStringsAnnotation(annotations.AnnotationsForwardAuthRequestHeaders),
+ UpstreamHeaders: e.GetStringsAnnotation(annotations.AnnotationsForwardAuthUpstreamHeaders),
+ ClientHeaders: e.GetStringsAnnotation(annotations.AnnotationsForwardAuthClientHeaders),
}, nil
}
diff --git a/pkg/providers/ingress/translation/annotations/forward_auth_test.go b/pkg/providers/ingress/translation/annotations/plugins/forward_auth_test.go
similarity index 70%
rename from pkg/providers/ingress/translation/annotations/forward_auth_test.go
rename to pkg/providers/ingress/translation/annotations/plugins/forward_auth_test.go
index 06c6c744..3ee6b0cf 100644
--- a/pkg/providers/ingress/translation/annotations/forward_auth_test.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/forward_auth_test.go
@@ -12,25 +12,26 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
func TestForwardAuthHandler(t *testing.T) {
- annotations := map[string]string{
- _forwardAuthURI: "http://127.0.0.1:9080",
- _forwardAuthRequestHeaders: "Authorization",
- _forwardAuthClientHeaders: "Location",
- _forwardAuthUpstreamHeaders: "X-User-ID",
+ anno := map[string]string{
+ annotations.AnnotationsForwardAuthURI: "http://127.0.0.1:9080",
+ annotations.AnnotationsForwardAuthRequestHeaders: "Authorization",
+ annotations.AnnotationsForwardAuthClientHeaders: "Location",
+ annotations.AnnotationsForwardAuthUpstreamHeaders: "X-User-ID",
}
p := NewForwardAuthHandler()
- out, err := p.Handle(NewExtractor(annotations))
+ out, err := p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
config := out.(*apisixv1.ForwardAuthConfig)
assert.Equal(t, "http://127.0.0.1:9080", config.URI)
@@ -40,14 +41,14 @@ func TestForwardAuthHandler(t *testing.T) {
assert.Equal(t, true, config.SSLVerify)
assert.Equal(t, "forward-auth", p.PluginName())
- annotations[_forwardAuthSSLVerify] = "false"
- out, err = p.Handle(NewExtractor(annotations))
+ anno[annotations.AnnotationsForwardAuthSSLVerify] = "false"
+ out, err = p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
config = out.(*apisixv1.ForwardAuthConfig)
assert.Equal(t, false, config.SSLVerify)
- annotations[_forwardAuthURI] = ""
- out, err = p.Handle(NewExtractor(annotations))
+ anno[annotations.AnnotationsForwardAuthURI] = ""
+ out, err = p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
assert.Nil(t, out, "checking given output")
}
diff --git a/pkg/providers/ingress/translation/annotations/iprestriction.go b/pkg/providers/ingress/translation/annotations/plugins/iprestriction.go
similarity index 76%
rename from pkg/providers/ingress/translation/annotations/iprestriction.go
rename to pkg/providers/ingress/translation/annotations/plugins/iprestriction.go
index 1d17957b..f3a3bd6f 100644
--- a/pkg/providers/ingress/translation/annotations/iprestriction.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/iprestriction.go
@@ -12,22 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _allowlistSourceRange = AnnotationsPrefix + "allowlist-source-range"
- _blocklistSourceRange = AnnotationsPrefix + "blocklist-source-range"
-)
-
type ipRestriction struct{}
// NewIPRestrictionHandler creates a handler to convert
// annotations about client ips control to APISIX ip-restrict plugin.
-func NewIPRestrictionHandler() Handler {
+func NewIPRestrictionHandler() PluginAnnotationsHandler {
return &ipRestriction{}
}
@@ -35,10 +31,10 @@ func (i *ipRestriction) PluginName() string {
return "ip-restriction"
}
-func (i *ipRestriction) Handle(e Extractor) (interface{}, error) {
+func (i *ipRestriction) Handle(e annotations.Extractor) (interface{}, error) {
var plugin apisixv1.IPRestrictConfig
- allowlist := e.GetStringsAnnotation(_allowlistSourceRange)
- blocklist := e.GetStringsAnnotation(_blocklistSourceRange)
+ allowlist := e.GetStringsAnnotation(annotations.AnnotationsAllowlistSourceRange)
+ blocklist := e.GetStringsAnnotation(annotations.AnnotationsBlocklistSourceRange)
if allowlist != nil || blocklist != nil {
plugin.Allowlist = allowlist
plugin.Blocklist = blocklist
diff --git a/pkg/providers/ingress/translation/annotations/iprestriction_test.go b/pkg/providers/ingress/translation/annotations/plugins/iprestriction_test.go
similarity index 76%
rename from pkg/providers/ingress/translation/annotations/iprestriction_test.go
rename to pkg/providers/ingress/translation/annotations/plugins/iprestriction_test.go
index cfc3fca7..56a0dff7 100644
--- a/pkg/providers/ingress/translation/annotations/iprestriction_test.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/iprestriction_test.go
@@ -12,22 +12,23 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
func TestIPRestrictionHandler(t *testing.T) {
- annotations := map[string]string{
- _allowlistSourceRange: "10.2.2.2,192.168.0.0/16",
+ anno := map[string]string{
+ annotations.AnnotationsAllowlistSourceRange: "10.2.2.2,192.168.0.0/16",
}
p := NewIPRestrictionHandler()
- out, err := p.Handle(NewExtractor(annotations))
+ out, err := p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
config := out.(*apisixv1.IPRestrictConfig)
assert.Len(t, config.Allowlist, 2, "checking size of white list")
@@ -35,8 +36,8 @@ func TestIPRestrictionHandler(t *testing.T) {
assert.Equal(t, "192.168.0.0/16", config.Allowlist[1])
assert.Equal(t, "ip-restriction", p.PluginName())
- annotations[_blocklistSourceRange] = "172.17.0.0/16,127.0.0.1"
- out, err = p.Handle(NewExtractor(annotations))
+ anno[annotations.AnnotationsBlocklistSourceRange] = "172.17.0.0/16,127.0.0.1"
+ out, err = p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
config = out.(*apisixv1.IPRestrictConfig)
assert.Len(t, config.Allowlist, 2, "checking size of white list")
@@ -46,9 +47,9 @@ func TestIPRestrictionHandler(t *testing.T) {
assert.Equal(t, "172.17.0.0/16", config.Blocklist[0])
assert.Equal(t, "127.0.0.1", config.Blocklist[1])
- delete(annotations, _allowlistSourceRange)
- delete(annotations, _blocklistSourceRange)
- out, err = p.Handle(NewExtractor(annotations))
+ delete(anno, annotations.AnnotationsAllowlistSourceRange)
+ delete(anno, annotations.AnnotationsBlocklistSourceRange)
+ out, err = p.Handle(annotations.NewExtractor(anno))
assert.Nil(t, err, "checking given error")
assert.Nil(t, out, "checking the given ip-restrction plugin config")
}
diff --git a/pkg/providers/ingress/translation/annotations.go b/pkg/providers/ingress/translation/annotations/plugins/plugins.go
similarity index 55%
copy from pkg/providers/ingress/translation/annotations.go
copy to pkg/providers/ingress/translation/annotations/plugins/plugins.go
index 6b9d3d81..b4a4fd11 100644
--- a/pkg/providers/ingress/translation/annotations.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/plugins.go
@@ -12,7 +12,7 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package translation
+package plugins
import (
"go.uber.org/zap"
@@ -22,24 +22,40 @@ import (
apisix "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
+// Handler abstracts the behavior so that the apisix-ingress-controller knows
+// how to parse some annotations and convert them to APISIX plugins.
+type PluginAnnotationsHandler interface {
+ // Handle parses the target annotation and converts it to the type-agnostic structure.
+ // The return value might be nil since some features have an explicit switch, users should
+ // judge whether Handle is failed by the second error value.
+ Handle(annotations.Extractor) (interface{}, error)
+ // PluginName returns a string which indicates the target plugin name in APISIX.
+ PluginName() string
+}
+
var (
- _handlers = []annotations.Handler{
- annotations.NewCorsHandler(),
- annotations.NewIPRestrictionHandler(),
- annotations.NewRewriteHandler(),
- annotations.NewRedirectHandler(),
- annotations.NewForwardAuthHandler(),
- annotations.NewBasicAuthHandler(),
- annotations.NewKeyAuthHandler(),
- annotations.NewCSRFHandler(),
+ _handlers = []PluginAnnotationsHandler{
+ NewCorsHandler(),
+ NewIPRestrictionHandler(),
+ NewRewriteHandler(),
+ NewRedirectHandler(),
+ NewForwardAuthHandler(),
+ NewBasicAuthHandler(),
+ NewKeyAuthHandler(),
+ NewCSRFHandler(),
}
)
-func (t *translator) TranslateAnnotations(anno map[string]string) apisix.Plugins {
- extractor := annotations.NewExtractor(anno)
+type plugins struct{}
+
+func NewParser() annotations.IngressAnnotationsParser {
+ return &plugins{}
+}
+
+func (p *plugins) Parse(e annotations.Extractor) (interface{}, error) {
plugins := make(apisix.Plugins)
for _, handler := range _handlers {
- out, err := handler.Handle(extractor)
+ out, err := handler.Handle(e)
if err != nil {
log.Warnw("failed to handle annotations",
zap.Error(err),
@@ -50,5 +66,5 @@ func (t *translator) TranslateAnnotations(anno map[string]string) apisix.Plugins
plugins[handler.PluginName()] = out
}
}
- return plugins
+ return plugins, nil
}
diff --git a/pkg/providers/ingress/translation/annotations/redirect.go b/pkg/providers/ingress/translation/annotations/plugins/redirect.go
similarity index 77%
rename from pkg/providers/ingress/translation/annotations/redirect.go
rename to pkg/providers/ingress/translation/annotations/plugins/redirect.go
index 6f2ca9af..1f073e85 100644
--- a/pkg/providers/ingress/translation/annotations/redirect.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/redirect.go
@@ -12,26 +12,21 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
"net/http"
"strconv"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _httpToHttps = AnnotationsPrefix + "http-to-https"
- _httpRedirect = AnnotationsPrefix + "http-redirect"
- _httpRedirectCode = AnnotationsPrefix + "http-redirect-code"
-)
-
type redirect struct{}
// NewRedirectHandler creates a handler to convert
// annotations about redirect control to APISIX redirect plugin.
-func NewRedirectHandler() Handler {
+func NewRedirectHandler() PluginAnnotationsHandler {
return &redirect{}
}
@@ -39,12 +34,12 @@ func (r *redirect) PluginName() string {
return "redirect"
}
-func (r *redirect) Handle(e Extractor) (interface{}, error) {
+func (r *redirect) Handle(e annotations.Extractor) (interface{}, error) {
var plugin apisixv1.RedirectConfig
- plugin.HttpToHttps = e.GetBoolAnnotation(_httpToHttps)
- plugin.URI = e.GetStringAnnotation(_httpRedirect)
+ plugin.HttpToHttps = e.GetBoolAnnotation(annotations.AnnotationsHttpToHttps)
+ plugin.URI = e.GetStringAnnotation(annotations.AnnotationsHttpRedirect)
// Transformation fail defaults to 0.
- plugin.RetCode, _ = strconv.Atoi(e.GetStringAnnotation(_httpRedirectCode))
+ plugin.RetCode, _ = strconv.Atoi(e.GetStringAnnotation(annotations.AnnotationsHttpRedirectCode))
// To avoid empty redirect plugin config, adding the check about the redirect.
if plugin.HttpToHttps {
return &plugin, nil
diff --git a/pkg/providers/ingress/translation/annotations/rewrite.go b/pkg/providers/ingress/translation/annotations/plugins/rewrite.go
similarity index 74%
rename from pkg/providers/ingress/translation/annotations/rewrite.go
rename to pkg/providers/ingress/translation/annotations/plugins/rewrite.go
index 35a0f947..b02e97a2 100644
--- a/pkg/providers/ingress/translation/annotations/rewrite.go
+++ b/pkg/providers/ingress/translation/annotations/plugins/rewrite.go
@@ -12,25 +12,20 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package plugins
import (
"regexp"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-const (
- _rewriteTarget = AnnotationsPrefix + "rewrite-target"
- _rewriteTargetRegex = AnnotationsPrefix + "rewrite-target-regex"
- _rewriteTargetRegexTemplate = AnnotationsPrefix + "rewrite-target-regex-template"
-)
-
type rewrite struct{}
// NewRewriteHandler creates a handler to convert
// annotations about request rewrite control to APISIX proxy-rewrite plugin.
-func NewRewriteHandler() Handler {
+func NewRewriteHandler() PluginAnnotationsHandler {
return &rewrite{}
}
@@ -38,11 +33,11 @@ func (i *rewrite) PluginName() string {
return "proxy-rewrite"
}
-func (i *rewrite) Handle(e Extractor) (interface{}, error) {
+func (i *rewrite) Handle(e annotations.Extractor) (interface{}, error) {
var plugin apisixv1.RewriteConfig
- rewriteTarget := e.GetStringAnnotation(_rewriteTarget)
- rewriteTargetRegex := e.GetStringAnnotation(_rewriteTargetRegex)
- rewriteTemplate := e.GetStringAnnotation(_rewriteTargetRegexTemplate)
+ rewriteTarget := e.GetStringAnnotation(annotations.AnnotationsRewriteTarget)
+ rewriteTargetRegex := e.GetStringAnnotation(annotations.AnnotationsRewriteTargetRegex)
+ rewriteTemplate := e.GetStringAnnotation(annotations.AnnotationsRewriteTargetRegexTemplate)
if rewriteTarget != "" || rewriteTargetRegex != "" || rewriteTemplate != "" {
plugin.RewriteTarget = rewriteTarget
if rewriteTargetRegex != "" && rewriteTemplate != "" {
diff --git a/pkg/providers/ingress/translation/annotations/csrf.go b/pkg/providers/ingress/translation/annotations/regex/regex.go
similarity index 54%
copy from pkg/providers/ingress/translation/annotations/csrf.go
copy to pkg/providers/ingress/translation/annotations/regex/regex.go
index d3cc087b..a791cf12 100644
--- a/pkg/providers/ingress/translation/annotations/csrf.go
+++ b/pkg/providers/ingress/translation/annotations/regex/regex.go
@@ -12,37 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package regex
import (
- apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
)
-const (
- _enableCsrf = AnnotationsPrefix + "enable-csrf"
- _csrfKey = AnnotationsPrefix + "csrf-key"
-)
-
-type csrf struct{}
-
-// NewCSRFHandler creates a handler to convert annotations about
-// CSRF to APISIX csrf plugin.
-func NewCSRFHandler() Handler {
- return &csrf{}
-}
+type regex struct{}
-func (c *csrf) PluginName() string {
- return "csrf"
+func NewParser() annotations.IngressAnnotationsParser {
+ return ®ex{}
}
-func (c *csrf) Handle(e Extractor) (interface{}, error) {
- if !e.GetBoolAnnotation(_enableCsrf) {
- return nil, nil
- }
- var plugin apisixv1.CSRFConfig
- plugin.Key = e.GetStringAnnotation(_csrfKey)
- if plugin.Key != "" {
- return &plugin, nil
- }
- return nil, nil
+func (r *regex) Parse(e annotations.Extractor) (interface{}, error) {
+ return e.GetBoolAnnotation(annotations.AnnotationsUseRegex), nil
}
diff --git a/pkg/providers/ingress/translation/annotations/types.go b/pkg/providers/ingress/translation/annotations/types.go
index 4f8f6421..d6c2d80e 100644
--- a/pkg/providers/ingress/translation/annotations/types.go
+++ b/pkg/providers/ingress/translation/annotations/types.go
@@ -21,8 +21,60 @@ import (
const (
// AnnotationsPrefix is the apisix annotation prefix
AnnotationsPrefix = "k8s.apisix.apache.org/"
+
+ // Supported annotations
+ AnnotationsUseRegex = AnnotationsPrefix + "use-regex"
+ AnnotationsEnableWebSocket = AnnotationsPrefix + "enable-websocket"
+ AnnotationsPluginConfigName = AnnotationsPrefix + "plugin-config-name"
+)
+
+const (
+ // Supported the annotations of the APISIX plugins
+
+ // cors plugin
+ AnnotationsEnableCors = AnnotationsPrefix + "enable-cors"
+ AnnotationsCorsAllowOrigin = AnnotationsPrefix + "cors-allow-origin"
+ AnnotationsCorsAllowHeaders = AnnotationsPrefix + "cors-allow-headers"
+ AnnotationsCorsAllowMethods = AnnotationsPrefix + "cors-allow-methods"
+
+ // csrf plugin
+ AnnotationsEnableCsrf = AnnotationsPrefix + "enable-csrf"
+ AnnotationsCsrfKey = AnnotationsPrefix + "csrf-key"
+
+ // redirect plugin
+ AnnotationsHttpToHttps = AnnotationsPrefix + "http-to-https"
+ AnnotationsHttpRedirect = AnnotationsPrefix + "http-redirect"
+ AnnotationsHttpRedirectCode = AnnotationsPrefix + "http-redirect-code"
+
+ // rewrite plugin
+ AnnotationsRewriteTarget = AnnotationsPrefix + "rewrite-target"
+ AnnotationsRewriteTargetRegex = AnnotationsPrefix + "rewrite-target-regex"
+ AnnotationsRewriteTargetRegexTemplate = AnnotationsPrefix + "rewrite-target-regex-template"
+
+ // forward-auth plugin
+ AnnotationsForwardAuthURI = AnnotationsPrefix + "auth-uri"
+ AnnotationsForwardAuthSSLVerify = AnnotationsPrefix + "auth-ssl-verify"
+ AnnotationsForwardAuthRequestHeaders = AnnotationsPrefix + "auth-request-headers"
+ AnnotationsForwardAuthUpstreamHeaders = AnnotationsPrefix + "auth-upstream-headers"
+ AnnotationsForwardAuthClientHeaders = AnnotationsPrefix + "auth-client-headers"
+
+ // ip-restriction plugin
+ AnnotationsAllowlistSourceRange = AnnotationsPrefix + "allowlist-source-range"
+ AnnotationsBlocklistSourceRange = AnnotationsPrefix + "blocklist-source-range"
+
+ // key-auth plugin and basic-auth plugin
+ // auth-type: keyAuth | basicAuth
+ AnnotationsAuthType = AnnotationsPrefix + "auth-type"
)
+// Handler abstracts the behavior so that the apisix-ingress-controller knows
+type IngressAnnotationsParser interface {
+ // Handle parses the target annotation and converts it to the type-agnostic structure.
+ // The return value might be nil since some features have an explicit switch, users should
+ // judge whether Handle is failed by the second error value.
+ Parse(Extractor) (interface{}, error)
+}
+
// Extractor encapsulates some auxiliary methods to extract annotations.
type Extractor interface {
// GetStringAnnotation returns the string value of the target annotation.
@@ -38,17 +90,6 @@ type Extractor interface {
GetBoolAnnotation(string) bool
}
-// Handler abstracts the behavior so that the apisix-ingress-controller knows
-// how to parse some annotations and convert them to APISIX plugins.
-type Handler interface {
- // Handle parses the target annotation and converts it to the type-agnostic structure.
- // The return value might be nil since some features have an explicit switch, users should
- // judge whether Handle is failed by the second error value.
- Handle(Extractor) (interface{}, error)
- // PluginName returns a string which indicates the target plugin name in APISIX.
- PluginName() string
-}
-
type extractor struct {
annotations map[string]string
}
diff --git a/pkg/providers/ingress/translation/annotations/csrf.go b/pkg/providers/ingress/translation/annotations/websocket/websocket.go
similarity index 54%
rename from pkg/providers/ingress/translation/annotations/csrf.go
rename to pkg/providers/ingress/translation/annotations/websocket/websocket.go
index d3cc087b..ef73329c 100644
--- a/pkg/providers/ingress/translation/annotations/csrf.go
+++ b/pkg/providers/ingress/translation/annotations/websocket/websocket.go
@@ -12,37 +12,18 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
-package annotations
+package websocket
import (
- apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
)
-const (
- _enableCsrf = AnnotationsPrefix + "enable-csrf"
- _csrfKey = AnnotationsPrefix + "csrf-key"
-)
-
-type csrf struct{}
-
-// NewCSRFHandler creates a handler to convert annotations about
-// CSRF to APISIX csrf plugin.
-func NewCSRFHandler() Handler {
- return &csrf{}
-}
+type websocket struct{}
-func (c *csrf) PluginName() string {
- return "csrf"
+func NewParser() annotations.IngressAnnotationsParser {
+ return &websocket{}
}
-func (c *csrf) Handle(e Extractor) (interface{}, error) {
- if !e.GetBoolAnnotation(_enableCsrf) {
- return nil, nil
- }
- var plugin apisixv1.CSRFConfig
- plugin.Key = e.GetStringAnnotation(_csrfKey)
- if plugin.Key != "" {
- return &plugin, nil
- }
- return nil, nil
+func (w *websocket) Parse(e annotations.Extractor) (interface{}, error) {
+ return e.GetBoolAnnotation(annotations.AnnotationsEnableWebSocket), nil
}
diff --git a/pkg/providers/ingress/translation/annotations_test.go b/pkg/providers/ingress/translation/annotations_test.go
new file mode 100644
index 00000000..f82d52fd
--- /dev/null
+++ b/pkg/providers/ingress/translation/annotations_test.go
@@ -0,0 +1,74 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package translation
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
+ apisix "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
+)
+
+func TestAnnotationsPlugins(t *testing.T) {
+ anno := map[string]string{
+ annotations.AnnotationsAuthType: "basicAuth",
+ }
+
+ ingress := (&translator{}).TranslateAnnotations(anno)
+ assert.Len(t, ingress.Plugins, 1)
+ assert.Equal(t, apisix.Plugins{
+ "basic-auth": &apisix.BasicAuthConfig{},
+ }, ingress.Plugins)
+
+ anno[annotations.AnnotationsEnableCsrf] = "true"
+ anno[annotations.AnnotationsCsrfKey] = "csrf-key"
+ ingress = (&translator{}).TranslateAnnotations(anno)
+ assert.Len(t, ingress.Plugins, 2)
+ assert.Equal(t, apisix.Plugins{
+ "basic-auth": &apisix.BasicAuthConfig{},
+ "csrf": &apisix.CSRFConfig{
+ Key: "csrf-key",
+ },
+ }, ingress.Plugins)
+}
+
+func TestAnnotationsPluginConfigName(t *testing.T) {
+ anno := map[string]string{
+ annotations.AnnotationsPluginConfigName: "plugin-config-echo",
+ }
+
+ ingress := (&translator{}).TranslateAnnotations(anno)
+ assert.Equal(t, "plugin-config-echo", ingress.PluginConfigName)
+}
+
+func TestAnnotationsEnableWebSocket(t *testing.T) {
+ anno := map[string]string{
+ annotations.AnnotationsEnableWebSocket: "true",
+ }
+
+ ingress := (&translator{}).TranslateAnnotations(anno)
+ assert.Equal(t, true, ingress.EnableWebSocket)
+}
+
+func TestAnnotationsUseRegex(t *testing.T) {
+ anno := map[string]string{
+ annotations.AnnotationsUseRegex: "true",
+ }
+
+ ingress := (&translator{}).TranslateAnnotations(anno)
+ assert.Equal(t, true, ingress.UseRegex)
+}
diff --git a/pkg/providers/ingress/translation/translator.go b/pkg/providers/ingress/translation/translator.go
index 48b2a87d..5a7712a9 100644
--- a/pkg/providers/ingress/translation/translator.go
+++ b/pkg/providers/ingress/translation/translator.go
@@ -40,7 +40,6 @@ import (
apisixconst "github.com/apache/apisix-ingress-controller/pkg/kube/apisix/const"
"github.com/apache/apisix-ingress-controller/pkg/log"
apisixtranslation "github.com/apache/apisix-ingress-controller/pkg/providers/apisix/translation"
- "github.com/apache/apisix-ingress-controller/pkg/providers/ingress/translation/annotations"
"github.com/apache/apisix-ingress-controller/pkg/providers/translation"
apisixv1 "github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
@@ -102,11 +101,7 @@ const (
func (t *translator) translateIngressV1(ing *networkingv1.Ingress, skipVerify bool) (*translation.TranslateContext, error) {
ctx := translation.DefaultEmptyTranslateContext()
- plugins := t.TranslateAnnotations(ing.Annotations)
- annoExtractor := annotations.NewExtractor(ing.Annotations)
- useRegex := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "use-regex")
- enableWebsocket := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "enable-websocket")
- pluginConfigName := annoExtractor.GetStringAnnotation(annotations.AnnotationsPrefix + "plugin-config-name")
+ ingress := t.TranslateAnnotations(ing.Annotations)
// add https
for _, tls := range ing.Spec.TLS {
@@ -179,7 +174,7 @@ func (t *translator) translateIngressV1(ing *networkingv1.Ingress, skipVerify bo
prefix += "/*"
}
uris = append(uris, prefix)
- } else if *pathRule.PathType == networkingv1.PathTypeImplementationSpecific && useRegex {
+ } else if *pathRule.PathType == networkingv1.PathTypeImplementationSpecific && ingress.UseRegex {
nginxVars = append(nginxVars, kubev2.ApisixRouteHTTPMatchExpr{
Subject: kubev2.ApisixRouteHTTPMatchExprSubject{
Scope: apisixconst.ScopePath,
@@ -195,7 +190,7 @@ func (t *translator) translateIngressV1(ing *networkingv1.Ingress, skipVerify bo
route.ID = id.GenID(route.Name)
route.Host = rule.Host
route.Uris = uris
- route.EnableWebsocket = enableWebsocket
+ route.EnableWebsocket = ingress.EnableWebSocket
if len(nginxVars) > 0 {
routeVars, err := t.ApisixTranslator.TranslateRouteMatchExprs(nginxVars)
if err != nil {
@@ -204,12 +199,12 @@ func (t *translator) translateIngressV1(ing *networkingv1.Ingress, skipVerify bo
route.Vars = routeVars
route.Priority = _regexPriority
}
- if len(plugins) > 0 {
- route.Plugins = *(plugins.DeepCopy())
+ if len(ingress.Plugins) > 0 {
+ route.Plugins = *(ingress.Plugins.DeepCopy())
}
- if pluginConfigName != "" {
- route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, pluginConfigName))
+ if ingress.PluginConfigName != "" {
+ route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, ingress.PluginConfigName))
}
if ups != nil {
route.UpstreamId = ups.ID
@@ -222,11 +217,7 @@ func (t *translator) translateIngressV1(ing *networkingv1.Ingress, skipVerify bo
func (t *translator) translateIngressV1beta1(ing *networkingv1beta1.Ingress, skipVerify bool) (*translation.TranslateContext, error) {
ctx := translation.DefaultEmptyTranslateContext()
- plugins := t.TranslateAnnotations(ing.Annotations)
- annoExtractor := annotations.NewExtractor(ing.Annotations)
- useRegex := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "use-regex")
- enableWebsocket := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "enable-websocket")
- pluginConfigName := annoExtractor.GetStringAnnotation(annotations.AnnotationsPrefix + "plugin-config-name")
+ ingress := t.TranslateAnnotations(ing.Annotations)
// add https
for _, tls := range ing.Spec.TLS {
@@ -299,7 +290,7 @@ func (t *translator) translateIngressV1beta1(ing *networkingv1beta1.Ingress, ski
prefix += "/*"
}
uris = append(uris, prefix)
- } else if *pathRule.PathType == networkingv1beta1.PathTypeImplementationSpecific && useRegex {
+ } else if *pathRule.PathType == networkingv1beta1.PathTypeImplementationSpecific && ingress.UseRegex {
nginxVars = append(nginxVars, kubev2.ApisixRouteHTTPMatchExpr{
Subject: kubev2.ApisixRouteHTTPMatchExprSubject{
Scope: apisixconst.ScopePath,
@@ -315,7 +306,7 @@ func (t *translator) translateIngressV1beta1(ing *networkingv1beta1.Ingress, ski
route.ID = id.GenID(route.Name)
route.Host = rule.Host
route.Uris = uris
- route.EnableWebsocket = enableWebsocket
+ route.EnableWebsocket = ingress.EnableWebSocket
if len(nginxVars) > 0 {
routeVars, err := t.ApisixTranslator.TranslateRouteMatchExprs(nginxVars)
if err != nil {
@@ -324,12 +315,12 @@ func (t *translator) translateIngressV1beta1(ing *networkingv1beta1.Ingress, ski
route.Vars = routeVars
route.Priority = _regexPriority
}
- if len(plugins) > 0 {
- route.Plugins = *(plugins.DeepCopy())
+ if len(ingress.Plugins) > 0 {
+ route.Plugins = *(ingress.Plugins.DeepCopy())
}
- if pluginConfigName != "" {
- route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, pluginConfigName))
+ if ingress.PluginConfigName != "" {
+ route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, ingress.PluginConfigName))
}
if ups != nil {
route.UpstreamId = ups.ID
@@ -396,11 +387,7 @@ func (t *translator) translateUpstreamFromIngressV1(namespace string, backend *n
func (t *translator) translateIngressExtensionsV1beta1(ing *extensionsv1beta1.Ingress, skipVerify bool) (*translation.TranslateContext, error) {
ctx := translation.DefaultEmptyTranslateContext()
- plugins := t.TranslateAnnotations(ing.Annotations)
- annoExtractor := annotations.NewExtractor(ing.Annotations)
- useRegex := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "use-regex")
- enableWebsocket := annoExtractor.GetBoolAnnotation(annotations.AnnotationsPrefix + "enable-websocket")
- pluginConfigName := annoExtractor.GetStringAnnotation(annotations.AnnotationsPrefix + "plugin-config-name")
+ ingress := t.TranslateAnnotations(ing.Annotations)
for _, rule := range ing.Spec.Rules {
for _, pathRule := range rule.HTTP.Paths {
@@ -444,7 +431,7 @@ func (t *translator) translateIngressExtensionsV1beta1(ing *extensionsv1beta1.In
prefix += "/*"
}
uris = append(uris, prefix)
- } else if *pathRule.PathType == extensionsv1beta1.PathTypeImplementationSpecific && useRegex {
+ } else if *pathRule.PathType == extensionsv1beta1.PathTypeImplementationSpecific && ingress.UseRegex {
nginxVars = append(nginxVars, kubev2.ApisixRouteHTTPMatchExpr{
Subject: kubev2.ApisixRouteHTTPMatchExprSubject{
Scope: apisixconst.ScopePath,
@@ -460,7 +447,7 @@ func (t *translator) translateIngressExtensionsV1beta1(ing *extensionsv1beta1.In
route.ID = id.GenID(route.Name)
route.Host = rule.Host
route.Uris = uris
- route.EnableWebsocket = enableWebsocket
+ route.EnableWebsocket = ingress.EnableWebSocket
if len(nginxVars) > 0 {
routeVars, err := t.ApisixTranslator.TranslateRouteMatchExprs(nginxVars)
if err != nil {
@@ -469,12 +456,12 @@ func (t *translator) translateIngressExtensionsV1beta1(ing *extensionsv1beta1.In
route.Vars = routeVars
route.Priority = _regexPriority
}
- if len(plugins) > 0 {
- route.Plugins = *(plugins.DeepCopy())
+ if len(ingress.Plugins) > 0 {
+ route.Plugins = *(ingress.Plugins.DeepCopy())
}
- if pluginConfigName != "" {
- route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, pluginConfigName))
+ if ingress.PluginConfigName != "" {
+ route.PluginConfigId = id.GenID(apisixv1.ComposePluginConfigName(ing.Namespace, ingress.PluginConfigName))
}
if ups != nil {