From 68be51d6dddf0036118674c724a31a47a39adb78 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Sun, 7 Nov 2021 17:46:15 +0000 Subject: [PATCH] Commit new App releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/traefik/10.0.6/CHANGELOG.md | 99 + stable/traefik/10.0.6/CONFIG.md | 8 + stable/traefik/10.0.6/Chart.lock | 6 + stable/traefik/10.0.6/Chart.yaml | 30 + stable/traefik/10.0.6/README.md | 39 + stable/traefik/10.0.6/app-readme.md | 3 + stable/traefik/10.0.6/charts/common-8.5.2.tgz | Bin 0 -> 33609 bytes stable/traefik/10.0.6/crds/ingressroute.yaml | 198 ++ .../traefik/10.0.6/crds/ingressroutetcp.yaml | 160 ++ .../traefik/10.0.6/crds/ingressrouteudp.yaml | 84 + stable/traefik/10.0.6/crds/middlewares.yaml | 563 ++++++ .../traefik/10.0.6/crds/middlewarestcp.yaml | 59 + .../10.0.6/crds/serverstransports.yaml | 101 + stable/traefik/10.0.6/crds/tlsoptions.yaml | 87 + stable/traefik/10.0.6/crds/tlsstores.yaml | 64 + .../traefik/10.0.6/crds/traefikservices.yaml | 270 +++ stable/traefik/10.0.6/helm-values.md | 48 + stable/traefik/10.0.6/ix_values.yaml | 314 +++ stable/traefik/10.0.6/questions.yaml | 1684 +++++++++++++++++ stable/traefik/10.0.6/templates/_args.tpl | 141 ++ stable/traefik/10.0.6/templates/_helpers.tpl | 22 + .../10.0.6/templates/_ingressclass.tpl | 24 + .../10.0.6/templates/_ingressroute.tpl | 25 + .../traefik/10.0.6/templates/_portalhook.tpl | 26 + .../traefik/10.0.6/templates/_tlsoptions.tpl | 12 + stable/traefik/10.0.6/templates/common.yaml | 24 + .../middlewares/basic-middleware.yaml | 65 + .../templates/middlewares/basicauth.yaml | 34 + .../10.0.6/templates/middlewares/chain.yaml | 21 + .../templates/middlewares/forwardauth.yaml | 30 + .../templates/middlewares/ipwhitelist.yaml | 33 + .../templates/middlewares/ratelimit.yaml | 19 + .../templates/middlewares/redirectScheme.yaml | 19 + .../templates/middlewares/redirectregex.yaml | 20 + .../templates/middlewares/tc-nextcloud.yaml | 25 + stable/traefik/10.0.6/values.yaml | 0 36 files changed, 4357 insertions(+) create mode 100644 stable/traefik/10.0.6/CHANGELOG.md create mode 100644 stable/traefik/10.0.6/CONFIG.md create mode 100644 stable/traefik/10.0.6/Chart.lock create mode 100644 stable/traefik/10.0.6/Chart.yaml create mode 100644 stable/traefik/10.0.6/README.md create mode 100644 stable/traefik/10.0.6/app-readme.md create mode 100644 stable/traefik/10.0.6/charts/common-8.5.2.tgz create mode 100644 stable/traefik/10.0.6/crds/ingressroute.yaml create mode 100644 stable/traefik/10.0.6/crds/ingressroutetcp.yaml create mode 100644 stable/traefik/10.0.6/crds/ingressrouteudp.yaml create mode 100644 stable/traefik/10.0.6/crds/middlewares.yaml create mode 100644 stable/traefik/10.0.6/crds/middlewarestcp.yaml create mode 100644 stable/traefik/10.0.6/crds/serverstransports.yaml create mode 100644 stable/traefik/10.0.6/crds/tlsoptions.yaml create mode 100644 stable/traefik/10.0.6/crds/tlsstores.yaml create mode 100644 stable/traefik/10.0.6/crds/traefikservices.yaml create mode 100644 stable/traefik/10.0.6/helm-values.md create mode 100644 stable/traefik/10.0.6/ix_values.yaml create mode 100644 stable/traefik/10.0.6/questions.yaml create mode 100644 stable/traefik/10.0.6/templates/_args.tpl create mode 100644 stable/traefik/10.0.6/templates/_helpers.tpl create mode 100644 stable/traefik/10.0.6/templates/_ingressclass.tpl create mode 100644 stable/traefik/10.0.6/templates/_ingressroute.tpl create mode 100644 stable/traefik/10.0.6/templates/_portalhook.tpl create mode 100644 stable/traefik/10.0.6/templates/_tlsoptions.tpl create mode 100644 stable/traefik/10.0.6/templates/common.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/basic-middleware.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/basicauth.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/chain.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/forwardauth.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/ipwhitelist.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/ratelimit.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/redirectScheme.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/redirectregex.yaml create mode 100644 stable/traefik/10.0.6/templates/middlewares/tc-nextcloud.yaml create mode 100644 stable/traefik/10.0.6/values.yaml diff --git a/stable/traefik/10.0.6/CHANGELOG.md b/stable/traefik/10.0.6/CHANGELOG.md new file mode 100644 index 00000000000..c6a68dcf05f --- /dev/null +++ b/stable/traefik/10.0.6/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog
+ + + +### [traefik-10.0.6](https://github.com/truecharts/apps/compare/traefik-10.0.5...traefik-10.0.6) (2021-11-07) + +#### Fix + +* Don't try to run udp services under SCALE (we don't actively test it anyway) + + + + +### [traefik-10.0.5](https://github.com/truecharts/apps/compare/traefik-10.0.4...traefik-10.0.5) (2021-11-07) + +#### Chore + +* update non-major deps helm releases ([#1291](https://github.com/truecharts/apps/issues/1291)) + +#### Chore + +* Simplify GUI for deployment, persistence and securityContext ([#1289](https://github.com/truecharts/apps/issues/1289)) + +#### Feat + +* Simplify the Services GUI ([#1290](https://github.com/truecharts/apps/issues/1290)) + +#### Fix + +* prevent duplicate port use and fix some questions.yaml mistakes + + + + +### [traefik-10.0.4](https://github.com/truecharts/apps/compare/traefik-10.0.3...traefik-10.0.4) (2021-11-02) + +#### Chore + +* update non-major deps helm releases ([#1267](https://github.com/truecharts/apps/issues/1267)) + + + + +### [traefik-10.0.3](https://github.com/truecharts/apps/compare/traefik-10.0.2...traefik-10.0.3) (2021-11-01) + +#### Chore + +* update non-major deps helm releases ([#1264](https://github.com/truecharts/apps/issues/1264)) + + + + +### [traefik-10.0.2](https://github.com/truecharts/apps/compare/traefik-10.0.1...traefik-10.0.2) (2021-10-26) + +#### Chore + +* update non-major deps helm releases ([#1245](https://github.com/truecharts/apps/issues/1245)) + + + + +### [traefik-10.0.1](https://github.com/truecharts/apps/compare/traefik-10.0.0...traefik-10.0.1) (2021-10-26) + +#### Chore + +* update helm chart common to v8.3.15 ([#1240](https://github.com/truecharts/apps/issues/1240)) + + + + +### [traefik-10.0.0](https://github.com/truecharts/apps/compare/traefik-9.0.19...traefik-10.0.0) (2021-10-25) + +#### Chore + +* Adapt for TrueNAS SCALE RC1 + + + + +### [traefik-9.0.19](https://github.com/truecharts/apps/compare/traefik-9.0.16...traefik-9.0.19) (2021-10-20) + +#### Chore + +* bump apps, remove duplicates and move incubator to stable for RC1 +* update non-major deps helm releases ([#1213](https://github.com/truecharts/apps/issues/1213)) + +#### Fix + +* reenable postgresql migration scripting and bump all to force update +* use correct PVC storageClass when using postgresql as a dependency on SCALE ([#1212](https://github.com/truecharts/apps/issues/1212)) + + + + +### [traefik-9.0.16](https://github.com/truecharts/apps/compare/traefik-9.0.15...traefik-9.0.16) (2021-10-20) + +#### Chore + +* bump versions to rerelease and fix icons diff --git a/stable/traefik/10.0.6/CONFIG.md b/stable/traefik/10.0.6/CONFIG.md new file mode 100644 index 00000000000..fc9b2fa2d5f --- /dev/null +++ b/stable/traefik/10.0.6/CONFIG.md @@ -0,0 +1,8 @@ +# Configuration Options + +##### Connecting to other apps +If you need to connect this App to other Apps on TrueNAS SCALE, please refer to our "Linking Apps Internally" quick-start guide: +https://truecharts.org/manual/Quick-Start%20Guides/14-linking-apps/ + +##### Available config options +In the future this page is going to contain an automated list of options available in the installation/edit UI. diff --git a/stable/traefik/10.0.6/Chart.lock b/stable/traefik/10.0.6/Chart.lock new file mode 100644 index 00000000000..35b7a5756f6 --- /dev/null +++ b/stable/traefik/10.0.6/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://truecharts.org + version: 8.5.2 +digest: sha256:2f56cb4ac04bbf6e111a7a42e1739125a2021507bcd69e65389d9a90f18e77d1 +generated: "2021-11-07T17:42:26.370935394Z" diff --git a/stable/traefik/10.0.6/Chart.yaml b/stable/traefik/10.0.6/Chart.yaml new file mode 100644 index 00000000000..26d68e4964d --- /dev/null +++ b/stable/traefik/10.0.6/Chart.yaml @@ -0,0 +1,30 @@ +apiVersion: v2 +appVersion: "2.5.3" +dependencies: +- name: common + repository: https://truecharts.org + version: 8.5.2 +deprecated: false +description: Test App for Traefik +home: https://github.com/truecharts/apps/tree/master/charts/stable/traefik +icon: https://raw.githubusercontent.com/traefik/traefik/v2.3/docs/content/assets/img/traefik.logo.png +keywords: +- traefik +- ingress +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: truecharts.org +name: traefik +sources: +- https://github.com/traefik/traefik +- https://github.com/traefik/traefik-helm-chart +- https://traefik.io/ +type: application +version: 10.0.6 +annotations: + truecharts.org/catagories: | + - network + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/traefik/10.0.6/README.md b/stable/traefik/10.0.6/README.md new file mode 100644 index 00000000000..ce9cbaa8e9e --- /dev/null +++ b/stable/traefik/10.0.6/README.md @@ -0,0 +1,39 @@ +# Introduction + +Test App for Traefik + +TrueCharts are designed to be installed as TrueNAS SCALE app only. We can not guarantee this charts works as a stand-alone helm installation. +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/apps/issues/new/choose)** + +## Source Code + +* +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://truecharts.org | common | 8.5.2 | + +## Installing the Chart + +To install this App on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/03-Installing-an-App/). + +## Uninstalling the Chart + +To remove this App from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/07-Deleting-an-App/). + +## Support + +- Please check our [quick-start guides](https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/) first. +- See the [Wiki](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) +--- +All Rights Reserved - The TrueCharts Project diff --git a/stable/traefik/10.0.6/app-readme.md b/stable/traefik/10.0.6/app-readme.md new file mode 100644 index 00000000000..823c75135e0 --- /dev/null +++ b/stable/traefik/10.0.6/app-readme.md @@ -0,0 +1,3 @@ +Test App for Traefik + +This App is supplied by TrueCharts, for more information please visit https://truecharts.org diff --git a/stable/traefik/10.0.6/charts/common-8.5.2.tgz b/stable/traefik/10.0.6/charts/common-8.5.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4da9201629e1b7617b81591c52583f59c3b65afd GIT binary patch literal 33609 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/ to match the name of the +service generated. +Users can provide an override for an explicit service they want bound via `.Values.providers.kubernetesIngress.publishedService.pathOverride` +*/}} +{{- define "providers.kubernetesIngress.publishedServicePath" -}} +{{- $fullName := include "common.names.fullname" . -}} +{{- $defServiceName := printf "%s/%s-tcp" .Release.Namespace $fullName -}} +{{- $servicePath := default $defServiceName .Values.providers.kubernetesIngress.publishedService.pathOverride }} +{{- print $servicePath | trimSuffix "-" -}} +{{- end -}} + +{{/* +Construct a comma-separated list of whitelisted namespaces +*/}} +{{- define "providers.kubernetesIngress.namespaces" -}} +{{- default .Release.Namespace (join "," .Values.providers.kubernetesIngress.namespaces) }} +{{- end -}} +{{- define "providers.kubernetesCRD.namespaces" -}} +{{- default .Release.Namespace (join "," .Values.providers.kubernetesCRD.namespaces) }} +{{- end -}} diff --git a/stable/traefik/10.0.6/templates/_ingressclass.tpl b/stable/traefik/10.0.6/templates/_ingressclass.tpl new file mode 100644 index 00000000000..27f8467fc9e --- /dev/null +++ b/stable/traefik/10.0.6/templates/_ingressclass.tpl @@ -0,0 +1,24 @@ +{{/* Define the ingressClass */}} +{{- define "traefik.ingressClass" -}} +{{- if .Values.ingressClass.enabled }} + {{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1/IngressClass" }} +apiVersion: networking.k8s.io/v1 + {{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/IngressClass" }} +apiVersion: networking.k8s.io/v1beta1 + {{- else if or (eq .Values.ingressClass.fallbackApiVersion "v1beta1") (eq .Values.ingressClass.fallbackApiVersion "v1") }} +apiVersion: {{ printf "networking.k8s.io/%s" .Values.ingressClass.fallbackApiVersion }} + {{- else }} + {{- fail "\n\n ERROR: You must have at least networking.k8s.io/v1beta1 to use ingressClass" }} + {{- end }} +--- +kind: IngressClass +metadata: + annotations: + ingressclass.kubernetes.io/is-default-class: {{ .Values.ingressClass.isDefaultClass | quote }} + labels: + {{- include "common.labels" . | nindent 4 }} + name: {{ .Release.Name }} +spec: + controller: traefik.io/ingress-controller +{{- end }} +{{- end }} diff --git a/stable/traefik/10.0.6/templates/_ingressroute.tpl b/stable/traefik/10.0.6/templates/_ingressroute.tpl new file mode 100644 index 00000000000..f848bc108fc --- /dev/null +++ b/stable/traefik/10.0.6/templates/_ingressroute.tpl @@ -0,0 +1,25 @@ +{{/* Define the ingressRoute */}} +{{- define "traefik.ingressRoute" -}} +{{- if .Values.ingressRoute.dashboard.enabled }} +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: IngressRoute +metadata: + name: {{ include "common.names.fullname" . }}-dashboard + annotations: + {{- with .Values.ingressRoute.dashboard.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + {{- include "common.labels" . | nindent 4 }} +spec: + entryPoints: + - main + routes: + - match: PathPrefix(`/dashboard`) || PathPrefix(`/api`) + kind: Rule + services: + - name: api@internal + kind: TraefikService +{{- end -}} +{{- end -}} diff --git a/stable/traefik/10.0.6/templates/_portalhook.tpl b/stable/traefik/10.0.6/templates/_portalhook.tpl new file mode 100644 index 00000000000..e3586c5d4e9 --- /dev/null +++ b/stable/traefik/10.0.6/templates/_portalhook.tpl @@ -0,0 +1,26 @@ +{{/* Define the portalHook */}} +{{- define "traefik.portalhook" -}} +{{- if .Values.portalhook.enabled }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: portalhook + namespace: {{ $namespace }} +data: + {{- $ports := dict }} + {{- range $.Values.service }} + {{- range $name, $value := .ports }} + {{- $_ := set $ports $name $value }} + {{- end }} + {{- end }} + {{- range $name, $value := $ports }} + {{ $name }}: {{ $value.port | quote }} + {{- end }} +{{- end }} +{{- end -}} diff --git a/stable/traefik/10.0.6/templates/_tlsoptions.tpl b/stable/traefik/10.0.6/templates/_tlsoptions.tpl new file mode 100644 index 00000000000..3e5aad3bee9 --- /dev/null +++ b/stable/traefik/10.0.6/templates/_tlsoptions.tpl @@ -0,0 +1,12 @@ +{{/* Define the tlsOptions */}} +{{- define "traefik.tlsOptions" -}} +{{- range $name, $config := .Values.tlsOptions }} +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: TLSOption +metadata: + name: {{ $name }} +spec: + {{- toYaml $config | nindent 2 }} +{{- end }} +{{- end -}} diff --git a/stable/traefik/10.0.6/templates/common.yaml b/stable/traefik/10.0.6/templates/common.yaml new file mode 100644 index 00000000000..72c57659973 --- /dev/null +++ b/stable/traefik/10.0.6/templates/common.yaml @@ -0,0 +1,24 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.setup" . }} + +{{- if .Values.metrics }} +{{- if .Values.metrics.prometheus }} +{{- $_ := set .Values.podAnnotations "prometheus.io/scrape" "true" -}} +{{- $_ := set .Values.podAnnotations "prometheus.io/path" "/metrics" -}} +{{- $_ := set .Values.podAnnotations "prometheus.io/scrape" "9100" -}} +{{- end }} +{{- end }} + +{{- $newArgs := (include "traefik.args" . | fromYaml) }} +{{- $_ := set .Values "newArgs" $newArgs -}} +{{- $mergedargs := concat .Values.args .Values.newArgs.args }} +{{- $_ := set .Values "args" $mergedargs -}} + +{{- include "traefik.portalhook" . }} +{{- include "traefik.tlsOptions" . }} +{{- include "traefik.ingressRoute" . }} +{{- include "traefik.ingressClass" . }} + + +{{/* Render the templates */}} +{{ include "common.postSetup" . }} diff --git a/stable/traefik/10.0.6/templates/middlewares/basic-middleware.yaml b/stable/traefik/10.0.6/templates/middlewares/basic-middleware.yaml new file mode 100644 index 00000000000..fca94384953 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/basic-middleware.yaml @@ -0,0 +1,65 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: compress + namespace: {{ $namespace }} +spec: + compress: {} +--- +# Here, an average of 300 requests per second is allowed. +# In addition, a burst of 200 requests is allowed. +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: basic-ratelimit + namespace: {{ $namespace }} +spec: + rateLimit: + average: 300 + burst: 200 +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: basic-secure-headers + namespace: {{ $namespace }} +spec: + headers: + accessControlAllowMethods: + - GET + - OPTIONS + - HEAD + - PUT + accessControlMaxAge: 100 + sslRedirect: true + stsSeconds: 63072000 + # stsIncludeSubdomains: false + # stsPreload: false + forceSTSHeader: true + contentTypeNosniff: true + browserXssFilter: true + sslForceHost: true + referrerPolicy: same-origin + customRequestHeaders: + X-Forwarded-Proto: "https" + customResponseHeaders: + X-Robots-Tag: 'none' + server: '' +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: chain-basic + namespace: {{ $namespace }} +spec: + chain: + middlewares: + - name: basic-ratelimit + - name: basic-secure-headers + - name: compress diff --git a/stable/traefik/10.0.6/templates/middlewares/basicauth.yaml b/stable/traefik/10.0.6/templates/middlewares/basicauth.yaml new file mode 100644 index 00000000000..ccb541742f0 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/basicauth.yaml @@ -0,0 +1,34 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.basicAuth }} +--- +{{- $users := list }} +{{ range $index, $userdata := $middlewareData.users }} + {{ $users = append $users ( htpasswd $userdata.username $userdata.password ) }} +{{ end }} + +apiVersion: v1 +kind: Secret +metadata: + name: {{printf "%v-%v" $middlewareData.name "secret" }} + namespace: {{ $namespace }} +type: Opaque +stringData: + users: | + {{- range $index, $user := $users }} + {{ printf "%s" $user }} + {{- end }} +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + basicAuth: + secret: {{printf "%v-%v" $middlewareData.name "secret" }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/chain.yaml b/stable/traefik/10.0.6/templates/middlewares/chain.yaml new file mode 100644 index 00000000000..e22eb312207 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/chain.yaml @@ -0,0 +1,21 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.chain }} + +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + chain: + middlewares: + {{ range $index, $chainData := . }} + - name: {{ printf "%v-%v@%v" $namespace $chainData.name "kubernetescrd" }} + {{ end }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/forwardauth.yaml b/stable/traefik/10.0.6/templates/middlewares/forwardauth.yaml new file mode 100644 index 00000000000..7a3e32fdbf7 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/forwardauth.yaml @@ -0,0 +1,30 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.forwardAuth }} +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + forwardAuth: + address: {{ $middlewareData.address }} + {{- with $middlewareData.authResponseHeaders }} + authResponseHeaders: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with $middlewareData.authRequestHeaders }} + authRequestHeaders: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- if $middlewareData.authResponseHeadersRegex }} + authResponseHeadersRegex: {{ $middlewareData.authResponseHeadersRegex }} + {{- end }} + {{- if $middlewareData.trustForwardHeader }} + trustForwardHeader: true + {{- end }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/ipwhitelist.yaml b/stable/traefik/10.0.6/templates/middlewares/ipwhitelist.yaml new file mode 100644 index 00000000000..82467dea0b9 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/ipwhitelist.yaml @@ -0,0 +1,33 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.ipWhiteList }} + +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + ipWhiteList: + sourceRange: + {{- range $middlewareData.sourceRange }} + - {{ . }} + {{- end }} + {{- if $middlewareData.ipStrategy }} + ipStrategy: + {{- if $middlewareData.ipStrategy.depth }} + depth: {{ $middlewareData.ipStrategy.depth }} + {{- end }} + {{- if $middlewareData.ipStrategy.excludedIPs }} + excludedIPs: + {{- range $middlewareData.ipStrategy.excludedIPs }} + - {{ . }} + {{- end }} + {{- end }} + {{- end }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/ratelimit.yaml b/stable/traefik/10.0.6/templates/middlewares/ratelimit.yaml new file mode 100644 index 00000000000..144b9d8bf38 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/ratelimit.yaml @@ -0,0 +1,19 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.rateLimit }} + +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + rateLimit: + average: {{ $middlewareData.average }} + burst: {{ $middlewareData.burst }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/redirectScheme.yaml b/stable/traefik/10.0.6/templates/middlewares/redirectScheme.yaml new file mode 100644 index 00000000000..f2413f84e19 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/redirectScheme.yaml @@ -0,0 +1,19 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.redirectScheme }} + +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + redirectScheme: + scheme: {{ $middlewareData.scheme }} + permanent: {{ $middlewareData.permanent }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/redirectregex.yaml b/stable/traefik/10.0.6/templates/middlewares/redirectregex.yaml new file mode 100644 index 00000000000..683aec93d72 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/redirectregex.yaml @@ -0,0 +1,20 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +{{ range $index, $middlewareData := .Values.middlewares.redirectRegex }} + +--- +# Declaring the user list +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: {{ $middlewareData.name }} + namespace: {{ $namespace }} +spec: + redirectRegex: + regex: {{ $middlewareData.regex | quote }} + replacement: {{ $middlewareData.replacement | quote }} + permanent: {{ $middlewareData.replacement }} +{{ end }} diff --git a/stable/traefik/10.0.6/templates/middlewares/tc-nextcloud.yaml b/stable/traefik/10.0.6/templates/middlewares/tc-nextcloud.yaml new file mode 100644 index 00000000000..6a3019d56c5 --- /dev/null +++ b/stable/traefik/10.0.6/templates/middlewares/tc-nextcloud.yaml @@ -0,0 +1,25 @@ +{{- $values := .Values }} +{{- $namespace := ( printf "ix-%s" .Release.Name ) }} +{{- if or ( not .Values.ingressClass.enabled ) ( and ( .Values.ingressClass.enabled ) ( .Values.ingressClass.isDefaultClass ) ) }} +{{- $namespace = "default" }} +{{- end }} +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: tc-nextcloud-redirectregex-dav + namespace: {{ $namespace }} +spec: + redirectRegex: + regex: "https://(.*)/.well-known/(card|cal)dav" + replacement: "https://${1}/remote.php/dav/" +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: tc-nextcloud-chain + namespace: {{ $namespace }} +spec: + chain: + middlewares: + - name: tc-nextcloud-redirectregex-dav diff --git a/stable/traefik/10.0.6/values.yaml b/stable/traefik/10.0.6/values.yaml new file mode 100644 index 00000000000..e69de29bb2d