feat(common): restructure traefik/ingress middlewares (#31171)

**Description**

moves the middlewares around and adds unit tests

**⚙️ Type of change**

- [x] ⚙️ Feature/App addition
- [ ] 🪛 Bugfix
- [x] ⚠️ Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [x] 🔃 Refactor of current code

**🧪 How Has This Been Tested?**
<!--
Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration
-->

**📃 Notes:**
<!-- Please enter any other relevant information here -->

**✔️ Checklist:**

- [ ] ⚖️ My code follows the style guidelines of this project
- [ ] 👀 I have performed a self-review of my own code
- [ ] #️⃣ I have commented my code, particularly in hard-to-understand
areas
- [ ] 📄 I have made corresponding changes to the documentation
- [ ] ⚠️ My changes generate no new warnings
- [ ] 🧪 I have added tests to this description that prove my fix is
effective or that my feature works
- [ ] ⬆️ I increased versions for any altered app according to semantic
versioning
- [ ] I made sure the title starts with `feat(chart-name):`,
`fix(chart-name):` or `chore(chart-name):`

** App addition**

If this PR is an app addition please make sure you have done the
following.

- [ ] 🖼️ I have added an icon in the Chart's root directory called
`icon.png`

---

_Please don't blindly check all the boxes. Read them and only check
those that apply.
Those checkboxes are there for the reviewer to see what is this all
about and
the status of this PR with a quick glance._

---------

Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
Signed-off-by: Kjeld Schouten <info@kjeldschouten.nl>
Co-authored-by: Stavros Kois <s.kois@outlook.com>
Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
This commit is contained in:
Kjeld Schouten
2025-02-01 21:49:53 +01:00
committed by GitHub
co-authored by Stavros Kois Stavros Kois
parent 1d24bd1c0a
commit a27d735b9d
76 changed files with 5339 additions and 4992 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ apiVersion: v2
appVersion: unknown
dependencies:
- name: common
version: ~25.4.0
version: ~25.5.0
repository: file://../common/
condition: ""
alias: ""
@@ -20,18 +20,19 @@ tests:
annotations:
g_annotation1: global_annotation1
g_annotation2: "{{ .Values.annotation2 }}"
middlewares:
my-middleware1:
enabled: true
type: buffering
labels:
label1: "{{ .Values.label1 }}"
label2: label2
annotations:
annotation1: "{{ .Values.annotation1 }}"
annotation2: annotation2
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
labels:
label1: "{{ .Values.label1 }}"
label2: label2
annotations:
annotation1: "{{ .Values.annotation1 }}"
annotation2: annotation2
data:
foo: bar
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -67,13 +68,14 @@ tests:
- it: should pass with middlewares created with namespace
set:
middlewares:
my-middleware1:
enabled: true
type: buffering
namespace: some-namespace
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
namespace: some-namespace
data:
foo: bar
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -83,13 +85,14 @@ tests:
- it: should pass with middlewares created with object namespace from tpl
set:
key: some-namespace
middlewares:
my-middleware1:
enabled: true
type: buffering
namespace: "{{ .Values.key }}"
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
namespace: "{{ .Values.key }}"
data:
foo: bar
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -101,12 +104,13 @@ tests:
key: global-namespace
global:
namespace: "{{ .Values.key }}"
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -119,12 +123,13 @@ tests:
namespace: "{{ .Values.key }}"
global:
namespace: global-namespace
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -7,12 +7,13 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: add-prefix
data:
prefix: some-prefix
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: add-prefix
data:
prefix: some-prefix
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -26,12 +27,13 @@ tests:
- it: should fail with missing prefix
set:
middlewares:
my-middleware1:
enabled: true
type: add-prefix
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: add-prefix
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (add-prefix) - Expected [prefix] to be set
@@ -7,21 +7,22 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: basic-auth
data:
secret: some-secret
my-middleware2:
enabled: true
type: basic-auth
data:
users:
- username: some-username
password: some-password
- username: some-other-username
password: some-other-password
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: basic-auth
data:
secret: some-secret
my-middleware2:
enabled: true
type: basic-auth
data:
users:
- username: some-username
password: some-password
- username: some-other-username
password: some-other-password
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -55,27 +56,29 @@ tests:
- it: should fail with missing both users and secret
set:
middlewares:
my-middleware1:
enabled: true
type: basic-auth
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: basic-auth
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (basic-auth) - Expected at least one of [users] or [secret] to be set
- it: should fail with both secret and users set
set:
middlewares:
my-middleware1:
enabled: true
type: basic-auth
data:
secret: some-secret
users:
- username: some-username
password: some-password
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: basic-auth
data:
secret: some-secret
users:
- username: some-username
password: some-password
asserts:
- failedTemplate:
errorMessage: Middleware (basic-auth) - Expected either [users] or [secret] to be set, but not both
@@ -7,16 +7,17 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 1024
memRequestBodyBytes: 1024
maxResponseBodyBytes: 1024
memResponseBodyBytes: 1024
retryExpression: some-expression
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 1024
memRequestBodyBytes: 1024
maxResponseBodyBytes: 1024
memResponseBodyBytes: 1024
retryExpression: some-expression
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -34,12 +35,13 @@ tests:
- it: should pass with only maxRequestBodyBytes set
set:
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 1024
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 1024
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -50,16 +52,17 @@ tests:
- it: should render 0 and non-null values
set:
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 0
memRequestBodyBytes: null
maxResponseBodyBytes: 1024
memResponseBodyBytes: 1024
retryExpression: ""
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
maxRequestBodyBytes: 0
memRequestBodyBytes: null
maxResponseBodyBytes: 1024
memResponseBodyBytes: 1024
retryExpression: ""
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -7,15 +7,16 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: chain
data:
middlewares:
- name: some-name
expandObjectName: false
- name: some-other-name
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: chain
data:
middlewares:
- name: some-name
expandObjectName: false
- name: some-other-name
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -31,12 +32,13 @@ tests:
- it: should fail with missing middlewares
set:
middlewares:
my-middleware1:
enabled: true
type: chain
data:
middlewares: []
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: chain
data:
middlewares: []
asserts:
- failedTemplate:
errorMessage: Middleware (chain) - Expected [middlewares] to be set
@@ -7,10 +7,11 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: compress
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: compress
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -7,10 +7,11 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: content-type
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: content-type
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -7,20 +7,21 @@ release:
tests:
- it: should pass with values
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authResponseHeadersRegex: some-regex
trustForwardHeader: true
authResponseHeaders:
- some-header
authRequestHeaders:
- some-header
tls:
insecureSkipVerify: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authResponseHeadersRegex: some-regex
trustForwardHeader: true
authResponseHeaders:
- some-header
authRequestHeaders:
- some-header
tls:
insecureSkipVerify: true
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -42,65 +43,70 @@ tests:
- it: should fail with missing address
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
authResponseHeadersRegex: some-regex
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
authResponseHeadersRegex: some-regex
asserts:
- failedTemplate:
errorMessage: Middleware (forward-auth) - Expected [address] to be set
- it: should fail with invalid authResponseHeaders
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authResponseHeaders: some-header
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authResponseHeaders: some-header
asserts:
- failedTemplate:
errorMessage: Middleware (forward-auth) - Expected [authResponseHeaders] to be a list, but got [string]
- it: should fail with invalid authRequestHeaders
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authRequestHeaders: some-header
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
authRequestHeaders: some-header
asserts:
- failedTemplate:
errorMessage: Middleware (forward-auth) - Expected [authRequestHeaders] to be a list, but got [string]
- it: should fail with invalid tls.insecureSkipVerify
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
tls:
insecureSkipVerify: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
tls:
insecureSkipVerify: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (forward-auth) - Expected [tls.insecureSkipVerify] to be a boolean, but got [string]
- it: should fail with invalid trustForwardHeader
set:
middlewares:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
trustForwardHeader: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: forward-auth
data:
address: some-address
trustForwardHeader: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (forward-auth) - Expected [trustForwardHeader] to be a boolean, but got [string]
@@ -7,59 +7,60 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: headers
data:
customRequestHeaders:
some-name: some-value
some-other-name: some-other-value
customResponseHeaders:
some-name: some-value
some-other-name: some-other-value
accessControlAllowCredentials: true
accessControlAllowHeaders:
- some-header
- some-other-header
accessControlAllowMethods:
- GET
- DELETE
accessControlAllowOriginList:
- some-origin
- some-other-origin
accessControlAllowOriginListRegex:
- some-origin-regex
- some-other-origin-regex
accessControlExposeHeaders:
- some-header
- some-other-header
accessControlMaxAge: 1000
addVaryHeader: true
allowedHosts:
- some-host
- some-other-host
hostsProxyHeaders:
- some-header
- some-other-header
sslProxyHeaders:
some-header: some-value
some-other-header: some-other-value
stsSeconds: 1000
stsIncludeSubdomains: true
stsPreload: true
forceSTSHeader: true
frameDeny: true
customFrameOptionsValue: some-value
contentTypeNosniff: true
browserXssFilter: true
customBrowserXSSValue: some-value
contentSecurityPolicy: some-value
contentSecurityPolicyReportOnly: true
publicKey: some-public-key
referrerPolicy: some-referrer-policy
permissionsPolicy: some-permissions-policy
isDevelopment: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: headers
data:
customRequestHeaders:
some-name: some-value
some-other-name: some-other-value
customResponseHeaders:
some-name: some-value
some-other-name: some-other-value
accessControlAllowCredentials: true
accessControlAllowHeaders:
- some-header
- some-other-header
accessControlAllowMethods:
- GET
- DELETE
accessControlAllowOriginList:
- some-origin
- some-other-origin
accessControlAllowOriginListRegex:
- some-origin-regex
- some-other-origin-regex
accessControlExposeHeaders:
- some-header
- some-other-header
accessControlMaxAge: 1000
addVaryHeader: true
allowedHosts:
- some-host
- some-other-host
hostsProxyHeaders:
- some-header
- some-other-header
sslProxyHeaders:
some-header: some-value
some-other-header: some-other-value
stsSeconds: 1000
stsIncludeSubdomains: true
stsPreload: true
forceSTSHeader: true
frameDeny: true
customFrameOptionsValue: some-value
contentTypeNosniff: true
browserXssFilter: true
customBrowserXSSValue: some-value
contentSecurityPolicy: some-value
contentSecurityPolicyReportOnly: true
publicKey: some-public-key
referrerPolicy: some-referrer-policy
permissionsPolicy: some-permissions-policy
isDevelopment: true
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -7,17 +7,18 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange:
- some-source-range
ipStrategy:
depth: 1
excludedIPs:
- some-excluded-ip
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange:
- some-source-range
ipStrategy:
depth: 1
excludedIPs:
- some-excluded-ip
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -36,27 +37,29 @@ tests:
- it: should fail with invalid sourceRange
set:
middlewares:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange: some-source-range
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange: some-source-range
asserts:
- failedTemplate:
errorMessage: Middleware (ip-allow-list) - Expected [sourceRange] to be a list, but got [string]
- it: should fail with invalid ipStrategy.excludedIPs
set:
middlewares:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange:
- some-source-range
ipStrategy:
excludedIPs: some-excluded-ip
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: ip-allow-list
data:
sourceRange:
- some-source-range
ipStrategy:
excludedIPs: some-excluded-ip
asserts:
- failedTemplate:
errorMessage: Middleware (ip-allow-list) - Expected [ipStrategy.excludedIPs] to be a list, but got [string]
@@ -7,68 +7,69 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
logLevel: DEBUG
updateIntervalSeconds: 60
updateMaxFailure: 0
defaultDecisionSeconds: 60
httpTimeoutSeconds: 10
crowdsecMode: live
crowdsecAppsecEnabled: false
crowdsecAppsecHost: crowdsec:7422
crowdsecAppsecFailureBlock: true
crowdsecAppsecUnreachableBlock: true
crowdsecLapiKey: privateKey-foo
crowdsecLapiHost: crowdsec:8080
crowdsecLapiScheme: http
crowdsecLapiTLSInsecureVerify: false
crowdsecCapiMachineId: login
crowdsecCapiPassword: password
crowdsecCapiScenarios:
- crowdsecurity/http-path-traversal-probing
- crowdsecurity/http-xss-probing
- crowdsecurity/http-generic-bf
forwardedHeadersTrustedIPs:
- 10.0.10.23/32
- 10.0.20.0/24
clientTrustedIPs:
- 192.168.1.0/24
forwardedHeadersCustomName: X-Custom-Header
remediationHeadersCustomName: cs-remediation
redisCacheEnabled: false
redisCacheHost: "redis:6379"
redisCachePassword: password
redisCacheDatabase: "5"
crowdsecLapiTLSCertificateAuthority: |-
-----BEGIN TOTALY NOT A CERT-----
MIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
...
Q0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT
-----END TOTALY NOT A CERT-----
crowdsecLapiTLSCertificateBouncer: |-
-----BEGIN TOTALY NOT A CERT-----
MIIEHjCCAwagAwIBAgIUOBTs1eqkaAUcPplztUr2xRapvNAwDQYJKoZIhvcNAQEL
...
RaXAnYYUVRblS1jmePemh388hFxbmrpG2pITx8B5FMULqHoj11o2Rl0gSV6tHIHz
N2U=
-----END TOTALY NOT A CERT-----
crowdsecLapiTLSCertificateBouncerKey: |-
-----BEGIN TOTALY NOT A SECRET-----
MIIEogIBAAKCAQEAtYQnbJqifH+ZymePylDxGGLIuxzcAUU4/ajNj+qRAdI/Ux3d
...
ic5cDRo6/VD3CS3MYzyBcibaGaV34nr0G/pI+KEqkYChzk/PZRA=
-----END TOTALY NOT A SECRET-----
captchaProvider: hcaptcha
captchaSiteKey: FIXME
captchaSecretKey: FIXME
captchaGracePeriodSeconds: 1800
captchaHTMLFilePath: /captcha.html
banHTMLFilePath: /ban.html
type: plugin-bouncer
data:
enabled: true
logLevel: DEBUG
updateIntervalSeconds: 60
updateMaxFailure: 0
defaultDecisionSeconds: 60
httpTimeoutSeconds: 10
crowdsecMode: live
crowdsecAppsecEnabled: false
crowdsecAppsecHost: crowdsec:7422
crowdsecAppsecFailureBlock: true
crowdsecAppsecUnreachableBlock: true
crowdsecLapiKey: privateKey-foo
crowdsecLapiHost: crowdsec:8080
crowdsecLapiScheme: http
crowdsecLapiTLSInsecureVerify: false
crowdsecCapiMachineId: login
crowdsecCapiPassword: password
crowdsecCapiScenarios:
- crowdsecurity/http-path-traversal-probing
- crowdsecurity/http-xss-probing
- crowdsecurity/http-generic-bf
forwardedHeadersTrustedIPs:
- 10.0.10.23/32
- 10.0.20.0/24
clientTrustedIPs:
- 192.168.1.0/24
forwardedHeadersCustomName: X-Custom-Header
remediationHeadersCustomName: cs-remediation
redisCacheEnabled: false
redisCacheHost: "redis:6379"
redisCachePassword: password
redisCacheDatabase: "5"
crowdsecLapiTLSCertificateAuthority: |-
-----BEGIN TOTALY NOT A CERT-----
MIIEBzCCAu+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
...
Q0veeNzBQXg1f/JxfeA39IDIX1kiCf71tGlT
-----END TOTALY NOT A CERT-----
crowdsecLapiTLSCertificateBouncer: |-
-----BEGIN TOTALY NOT A CERT-----
MIIEHjCCAwagAwIBAgIUOBTs1eqkaAUcPplztUr2xRapvNAwDQYJKoZIhvcNAQEL
...
RaXAnYYUVRblS1jmePemh388hFxbmrpG2pITx8B5FMULqHoj11o2Rl0gSV6tHIHz
N2U=
-----END TOTALY NOT A CERT-----
crowdsecLapiTLSCertificateBouncerKey: |-
-----BEGIN TOTALY NOT A SECRET-----
MIIEogIBAAKCAQEAtYQnbJqifH+ZymePylDxGGLIuxzcAUU4/ajNj+qRAdI/Ux3d
...
ic5cDRo6/VD3CS3MYzyBcibaGaV34nr0G/pI+KEqkYChzk/PZRA=
-----END TOTALY NOT A SECRET-----
captchaProvider: hcaptcha
captchaSiteKey: FIXME
captchaSecretKey: FIXME
captchaGracePeriodSeconds: 1800
captchaHTMLFilePath: /captcha.html
banHTMLFilePath: /ban.html
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -136,13 +137,14 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
pluginName: traefik-bouncer-test
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
pluginName: traefik-bouncer-test
enabled: true
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -154,24 +156,26 @@ tests:
- it: should fail with missing enabled
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (plugin-bouncer) - Expected [enabled] to be set
- it: should fail with invalid enabled
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
enabled: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-bouncer
data:
enabled: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (plugin-bouncer) - Expected [enabled] to be a boolean, but got [string]
@@ -7,27 +7,28 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
api: https://api.geoblock.org/v2/geoblock
allowLocalRequests: true
logLocalRequests: true
logAllowedRequests: true
logApiRequests: true
apiTimeoutMs: 1000
cacheSize: 1000
forceMonthlyUpdate: true
allowUnknownCountries: true
unknownCountryApiResponse: some-value
blackListMode: true
silentStartUp: true
addCountryHeader: true
countries:
- some-country
- some-other-country
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
api: https://api.geoblock.org/v2/geoblock
allowLocalRequests: true
logLocalRequests: true
logAllowedRequests: true
logApiRequests: true
apiTimeoutMs: 1000
cacheSize: 1000
forceMonthlyUpdate: true
allowUnknownCountries: true
unknownCountryApiResponse: some-value
blackListMode: true
silentStartUp: true
addCountryHeader: true
countries:
- some-country
- some-other-country
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -54,16 +55,17 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
pluginName: traefik-geoblock-test
api: https://api.geoblock.org/v2/geoblock
countries:
- some-country
- some-other-country
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
pluginName: traefik-geoblock-test
api: https://api.geoblock.org/v2/geoblock
countries:
- some-country
- some-other-country
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -78,24 +80,26 @@ tests:
- it: should fail with missing api
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (plugin-geoblock) - Expected [api] to be set
- it: should fail with missing countries
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
api: https://api.geoblock.org/v2/geoblock
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-geoblock
data:
api: https://api.geoblock.org/v2/geoblock
asserts:
- failedTemplate:
errorMessage: Middleware (plugin-geoblock) - Expected [countries] to be set
@@ -7,14 +7,15 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
modSecurityUrl: some-url
timeoutMillis: 1000
maxBodySize: 1024
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
modSecurityUrl: some-url
timeoutMillis: 1000
maxBodySize: 1024
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -28,13 +29,14 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
pluginName: traefik-mod-security-test
modSecurityUrl: some-url
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
pluginName: traefik-mod-security-test
modSecurityUrl: some-url
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -46,12 +48,13 @@ tests:
- it: should fail with missing modSecurityUrl
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-mod-security
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (modsecurity) - Expected [modSecurityUrl] to be set
@@ -7,14 +7,15 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
excludednets:
- some-excluded-net
- some-other-excluded-net
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
excludednets:
- some-excluded-net
- some-other-excluded-net
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -28,15 +29,16 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
pluginName: traefik-real-ip-test
excludednets:
- some-excluded-net
- some-other-excluded-net
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
pluginName: traefik-real-ip-test
excludednets:
- some-excluded-net
- some-other-excluded-net
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -50,12 +52,13 @@ tests:
- it: should fail with missing excludednets
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-real-ip
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (real-ip) - Expected [excludednets] to be set
@@ -7,18 +7,19 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
regex: some-regex
replacement: some-replacement
- header: some-other-header
regex: some-other-regex
replacement: some-other-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
regex: some-regex
replacement: some-replacement
- header: some-other-header
regex: some-other-regex
replacement: some-other-replacement
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -36,16 +37,17 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
pluginName: traefik-rewrite-response-headers-test
rewrites:
- header: some-header
regex: some-regex
replacement: some-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
pluginName: traefik-rewrite-response-headers-test
rewrites:
- header: some-header
regex: some-regex
replacement: some-replacement
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -60,66 +62,71 @@ tests:
- it: should fail with missing header
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- regex: some-regex
replacement: some-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- regex: some-regex
replacement: some-replacement
asserts:
- failedTemplate:
errorMessage: Middleware (rewrite-response-headers) - Expected [header] to be set for rewrite [0]
- it: should fail with missing regex
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
replacement: some-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
replacement: some-replacement
asserts:
- failedTemplate:
errorMessage: Middleware (rewrite-response-headers) - Expected [regex] to be set for rewrite [0]
- it: should fail with missing replacement
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
regex: some-regex
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites:
- header: some-header
regex: some-regex
asserts:
- failedTemplate:
errorMessage: Middleware (rewrite-response-headers) - Expected [replacement] to be set for rewrite [0]
- it: should fail with missing rewrites
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (rewrite-response-headers) - Expected [rewrites] to be set
- it: should fail with invalid rewrites
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-rewrite-response-headers
data:
rewrites: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (rewrite-response-headers) - Expected [rewrites] to be a list, but got [string]
@@ -7,17 +7,18 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
theme: dark
baseUrl: https://example.com
addons:
- some-addon
- some-other-addon
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
theme: dark
baseUrl: https://example.com
addons:
- some-addon
- some-other-addon
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -34,14 +35,15 @@ tests:
- it: should pass with pluginName set
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
theme: dark
pluginName: traefik-themepark-test
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
theme: dark
pluginName: traefik-themepark-test
asserts:
- documentIndex: *middlewareDoc
equal:
@@ -54,24 +56,26 @@ tests:
- it: should fail with missing app
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
theme: dark
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
theme: dark
asserts:
- failedTemplate:
errorMessage: Middleware (themepark) - Expected [app] to be set
- it: should fail with missing theme
set:
middlewares:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: plugin-theme-park
data:
app: sonarr
asserts:
- failedTemplate:
errorMessage: Middleware (themepark) - Expected [theme] to be set
@@ -7,13 +7,14 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: rate-limit
data:
average: 1000
burst: 2000
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: rate-limit
data:
average: 1000
burst: 2000
asserts:
- documentIndex: &middlewareDoc 0
equal:
@@ -24,12 +25,13 @@ tests:
burst: 2000
- it: should fail with missing average and burst
set:
middlewares:
my-middleware1:
enabled: true
type: rate-limit
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: rate-limit
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (rate-limit) - Expected either [average] or [burst] to be set
@@ -7,14 +7,15 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
replacement: some-replacement
permanent: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
replacement: some-replacement
permanent: true
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -30,40 +31,43 @@ tests:
- it: should fail with missing regex
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-regex
data:
replacement: some-replacement
permanent: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-regex
data:
replacement: some-replacement
permanent: true
asserts:
- failedTemplate:
errorMessage: Middleware (redirect-regex) - Expected [regex] to be set
- it: should fail with missing replacement
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
permanent: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
permanent: true
asserts:
- failedTemplate:
errorMessage: Middleware (redirect-regex) - Expected [replacement] to be set
- it: should fail with invalid permanent
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
replacement: some-replacement
permanent: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-regex
data:
regex: some-regex
replacement: some-replacement
permanent: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (redirect-regex) - Expected [permanent] to be a boolean, but got [string]
@@ -7,13 +7,14 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-scheme
data:
scheme: https
permanent: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-scheme
data:
scheme: https
permanent: true
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -28,25 +29,27 @@ tests:
- it: should fail with missing scheme
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-scheme
data:
permanent: true
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-scheme
data:
permanent: true
asserts:
- failedTemplate:
errorMessage: Middleware (redirect-scheme) - Expected [scheme] to be set
- it: should fail with invalid permanent
set:
middlewares:
my-middleware1:
enabled: true
type: redirect-scheme
data:
scheme: https
permanent: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: redirect-scheme
data:
scheme: https
permanent: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (redirect-scheme) - Expected [permanent] to be a boolean, but got [string]
@@ -7,13 +7,14 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: replace-path-regex
data:
regex: /some-path
replacement: /some-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: replace-path-regex
data:
regex: /some-path
replacement: /some-replacement
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -28,24 +29,26 @@ tests:
- it: should fail with missing regex
set:
middlewares:
my-middleware1:
enabled: true
type: replace-path-regex
data:
replacement: /some-replacement
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: replace-path-regex
data:
replacement: /some-replacement
asserts:
- failedTemplate:
errorMessage: Middleware (replace-path-regex) - Expected [regex] to be set
- it: should fail with missing replacement
set:
middlewares:
my-middleware1:
enabled: true
type: replace-path-regex
data:
regex: /some-path
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: replace-path-regex
data:
regex: /some-path
asserts:
- failedTemplate:
errorMessage: Middleware (replace-path-regex) - Expected [replacement] to be set
@@ -7,12 +7,13 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: replace-path
data:
path: /some-path
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: replace-path
data:
path: /some-path
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -26,12 +27,13 @@ tests:
- it: should fail with missing path
set:
middlewares:
my-middleware1:
enabled: true
type: replace-path
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: replace-path
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (replace-path) - Expected [path] to be set
@@ -7,13 +7,14 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: retry
data:
attempts: 3
initialInterval: 1000
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: retry
data:
attempts: 3
initialInterval: 1000
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -28,12 +29,13 @@ tests:
- it: should fail with missing attempts
set:
middlewares:
my-middleware1:
enabled: true
type: retry
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: retry
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware (retry) - Expected [attempts] to be set
@@ -7,15 +7,16 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: strip-prefix
data:
forceSlash: true
prefix:
- /some-prefix
- /some-other-prefix
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: strip-prefix
data:
forceSlash: true
prefix:
- /some-prefix
- /some-other-prefix
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -32,26 +33,28 @@ tests:
- it: should fail with missing prefix
set:
middlewares:
my-middleware1:
enabled: true
type: strip-prefix
data:
prefix: []
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: strip-prefix
data:
prefix: []
asserts:
- failedTemplate:
errorMessage: Middleware (strip-prefix) - Expected [prefix] to be set
- it: should fail with invalid forceSlash
set:
middlewares:
my-middleware1:
enabled: true
type: strip-prefix
data:
prefix:
- /some-prefix
forceSlash: some-value
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: strip-prefix
data:
prefix:
- /some-prefix
forceSlash: some-value
asserts:
- failedTemplate:
errorMessage: Middleware (strip-prefix) - Expected [forceSlash] to be a boolean, but got [string]
@@ -7,14 +7,15 @@ release:
tests:
- it: should pass with all set
set:
middlewares:
my-middleware1:
enabled: true
type: strip-prefix-regex
data:
regex:
- some-regex
- some-other-regex
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: strip-prefix-regex
data:
regex:
- some-regex
- some-other-regex
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -30,12 +31,13 @@ tests:
- it: should fail with missing regex
set:
middlewares:
my-middleware1:
enabled: true
type: strip-prefix-regex
data:
regex: []
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: strip-prefix-regex
data:
regex: []
asserts:
- failedTemplate:
errorMessage: Middleware (strip-prefix-regex) - Expected [regex] to be set
@@ -7,23 +7,24 @@ release:
tests:
- it: should generate correct name
set:
middlewares:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
my-middleware2:
enabled: true
type: buffering
data:
foo: bar
my-middleware3:
enabled: true
type: buffering
expandObjectName: false
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware1:
enabled: true
type: buffering
data:
foo: bar
my-middleware2:
enabled: true
type: buffering
data:
foo: bar
my-middleware3:
enabled: true
type: buffering
expandObjectName: false
data:
foo: bar
asserts:
- documentIndex: &middlewareDoc 0
isKind:
@@ -7,97 +7,105 @@ release:
tests:
- it: should fail with name longer than 253 characters
set:
middlewares:
? my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-long-long-long-long-long-long-long-name
: enabled: true
type: buffering
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-long-long-long-long-long-long-long-name:
enabled: true
type: buffering
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Name [test-release-name-common-test-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-name-that-is-longer-than-253-characters-my-middleware-super-long-long-long-long-long-long-long-long-name] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 253 characters.
- it: should fail with name starting with underscore
set:
middlewares:
_my-middleware:
enabled: true
type: buffering
data:
foo: bar
ingressMiddlewares:
traefik:
_my-middleware:
enabled: true
type: buffering
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Name [test-release-name-common-test-_my-middleware] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 253 characters.
- it: should fail with namespace longer than 63 characters
set:
middlewares:
my-middleware:
enabled: true
type: buffering
namespace: my-extra-super-duper-long-name-that-is-longer-than-63-characters
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware:
enabled: true
type: buffering
namespace: my-extra-super-duper-long-name-that-is-longer-than-63-characters
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware - Namespace [my-extra-super-duper-long-name-that-is-longer-than-63-characters] is not valid. Must start and end with an alphanumeric lowercase character. It can contain '-'. And must be at most 63 characters.
- it: should fail with labels not a dict
set:
middlewares:
my-middleware:
enabled: true
type: buffering
labels: "not a dict"
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware:
enabled: true
type: buffering
labels: "not a dict"
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware - Expected [labels] to be a dictionary, but got [string]
- it: should fail with annotations not a dict
set:
middlewares:
my-middleware:
enabled: true
type: buffering
annotations: "not a dict"
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware:
enabled: true
type: buffering
annotations: "not a dict"
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware - Expected [annotations] to be a dictionary, but got [string]
- it: should fail with data not a dict
set:
middlewares:
my-middleware:
enabled: true
type: buffering
data: "not a dict"
ingressMiddlewares:
traefik:
my-middleware:
enabled: true
type: buffering
data: "not a dict"
asserts:
- failedTemplate:
errorMessage: Middleware - Expected [data] to be a dictionary, but got [string]
- it: should fail with empty enabled
set:
middlewares:
my-middleware:
enabled:
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware:
enabled:
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware - Expected the defined key [enabled] in [middlewares.my-middleware] to not be empty
- it: should fail with empty type
set:
middlewares:
my-middleware:
enabled: true
type:
data:
foo: bar
ingressMiddlewares:
traefik:
my-middleware:
enabled: true
type:
data:
foo: bar
asserts:
- failedTemplate:
errorMessage: Middleware - Expected [type] to be set