diff --git a/enterprise/traefik/17.0.28/CHANGELOG.md b/enterprise/traefik/17.0.28/CHANGELOG.md
new file mode 100644
index 00000000000..06aaf73bdf3
--- /dev/null
+++ b/enterprise/traefik/17.0.28/CHANGELOG.md
@@ -0,0 +1,99 @@
+**Important:**
+*for the complete changelog, please refer to the website*
+
+
+
+
+## [traefik-17.0.28](https://github.com/truecharts/charts/compare/traefik-17.0.27...traefik-17.0.28) (2023-04-25)
+
+### Chore
+
+- update container image tccr.io/truecharts/traefik to v2.10.0 ([#8148](https://github.com/truecharts/charts/issues/8148))
+
+
+
+
+## [traefik-17.0.27](https://github.com/truecharts/charts/compare/traefik-17.0.26...traefik-17.0.27) (2023-04-24)
+
+### Chore
+
+- update container image tccr.io/truecharts/traefik to v2.9.10 ([#8141](https://github.com/truecharts/charts/issues/8141))
+
+
+
+
+## [traefik-17.0.26](https://github.com/truecharts/charts/compare/traefik-17.0.25...traefik-17.0.26) (2023-04-23)
+
+### Chore
+
+- update container image tccr.io/truecharts/traefik to 2.9.9 ([#8131](https://github.com/truecharts/charts/issues/8131))
+
+
+
+
+## [traefik-17.0.25](https://github.com/truecharts/charts/compare/traefik-17.0.24...traefik-17.0.25) (2023-04-21)
+
+
+
+
+## [traefik-17.0.24](https://github.com/truecharts/charts/compare/traefik-17.0.23...traefik-17.0.24) (2023-04-20)
+
+### Chore
+
+- update helm general non-major ([#8087](https://github.com/truecharts/charts/issues/8087))
+
+
+
+
+## [traefik-17.0.23](https://github.com/truecharts/charts/compare/traefik-17.0.22...traefik-17.0.23) (2023-04-16)
+
+### Chore
+
+- update helm general non-major ([#8071](https://github.com/truecharts/charts/issues/8071))
+
+
+
+
+## [traefik-17.0.22](https://github.com/truecharts/charts/compare/traefik-17.0.21...traefik-17.0.22) (2023-04-16)
+
+### Chore
+
+- update helm general non-major ([#8061](https://github.com/truecharts/charts/issues/8061))
+
+
+
+
+## [traefik-17.0.21](https://github.com/truecharts/charts/compare/traefik-17.0.20...traefik-17.0.21) (2023-04-16)
+
+
+
+
+## [traefik-17.0.20](https://github.com/truecharts/charts/compare/traefik-17.0.19...traefik-17.0.20) (2023-04-15)
+
+### Chore
+
+- update helm general non-major ([#7998](https://github.com/truecharts/charts/issues/7998))
+
+
+
+
+## [traefik-17.0.19](https://github.com/truecharts/charts/compare/traefik-17.0.18...traefik-17.0.19) (2023-04-14)
+
+
+
+
+## [traefik-17.0.18](https://github.com/truecharts/charts/compare/traefik-17.0.17...traefik-17.0.18) (2023-04-13)
+
+### Chore
+
+- update helm general non-major ([#7966](https://github.com/truecharts/charts/issues/7966))
+
+
+
+
+## [traefik-17.0.17](https://github.com/truecharts/charts/compare/traefik-17.0.16...traefik-17.0.17) (2023-04-11)
+
+### Chore
+
+- update helm general non-major ([#7929](https://github.com/truecharts/charts/issues/7929))
+
diff --git a/enterprise/traefik/17.0.28/Chart.yaml b/enterprise/traefik/17.0.28/Chart.yaml
new file mode 100644
index 00000000000..5faa64039f2
--- /dev/null
+++ b/enterprise/traefik/17.0.28/Chart.yaml
@@ -0,0 +1,31 @@
+apiVersion: v2
+appVersion: "2.10.0"
+dependencies:
+ - name: common
+ repository: https://library-charts.truecharts.org
+ version: 12.4.21
+deprecated: false
+description: Traefik is a flexible reverse proxy and Ingress Provider.
+home: https://truecharts.org/charts/enterprise/traefik
+icon: https://truecharts.org/img/hotlink-ok/chart-icons/traefik.png
+keywords:
+ - traefik
+ - ingress
+kubeVersion: ">=1.16.0-0"
+maintainers:
+ - email: info@truecharts.org
+ name: TrueCharts
+ url: https://truecharts.org
+name: traefik
+sources:
+ - https://github.com/truecharts/charts/tree/master/charts/enterprise/traefik
+ - https://github.com/traefik/traefik
+ - https://github.com/traefik/traefik-helm-chart
+ - https://traefik.io/
+type: application
+version: 17.0.28
+annotations:
+ truecharts.org/catagories: |
+ - network
+ truecharts.org/SCALE-support: "true"
+ truecharts.org/grade: U
diff --git a/enterprise/traefik/17.0.28/LICENSE b/enterprise/traefik/17.0.28/LICENSE
new file mode 100644
index 00000000000..4139714f204
--- /dev/null
+++ b/enterprise/traefik/17.0.28/LICENSE
@@ -0,0 +1,106 @@
+Business Source License 1.1
+
+Parameters
+
+Licensor: The TrueCharts Project, it's owner and it's contributors
+Licensed Work: The TrueCharts "Traefik" Helm Chart
+Additional Use Grant: You may use the licensed work in production, as long
+ as it is directly sourced from a TrueCharts provided
+ official repository, catalog or source. You may also make private
+ modification to the directly sourced licenced work,
+ when used in production.
+
+ The following cases are, due to their nature, also
+ defined as 'production use' and explicitly prohibited:
+ - Bundling, including or displaying the licensed work
+ with(in) another work intended for production use,
+ with the apparent intend of facilitating and/or
+ promoting production use by third parties in
+ violation of this license.
+
+Change Date: 2050-01-01
+
+Change License: 3-clause BSD license
+
+For information about alternative licensing arrangements for the Software,
+please contact: legal@truecharts.org
+
+Notice
+
+The Business Source License (this document, or the “License”) is not an Open
+Source license. However, the Licensed Work will eventually be made available
+under an Open Source License, as stated in this License.
+
+License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
+“Business Source License” is a trademark of MariaDB Corporation Ab.
+
+-----------------------------------------------------------------------------
+
+Business Source License 1.1
+
+Terms
+
+The Licensor hereby grants you the right to copy, modify, create derivative
+works, redistribute, and make non-production use of the Licensed Work. The
+Licensor may make an Additional Use Grant, above, permitting limited
+production use.
+
+Effective on the Change Date, or the fourth anniversary of the first publicly
+available distribution of a specific version of the Licensed Work under this
+License, whichever comes first, the Licensor hereby grants you rights under
+the terms of the Change License, and the rights granted in the paragraph
+above terminate.
+
+If your use of the Licensed Work does not comply with the requirements
+currently in effect as described in this License, you must purchase a
+commercial license from the Licensor, its affiliated entities, or authorized
+resellers, or you must refrain from using the Licensed Work.
+
+All copies of the original and modified Licensed Work, and derivative works
+of the Licensed Work, are subject to this License. This License applies
+separately for each version of the Licensed Work and the Change Date may vary
+for each version of the Licensed Work released by Licensor.
+
+You must conspicuously display this License on each original or modified copy
+of the Licensed Work. If you receive the Licensed Work in original or
+modified form from a third party, the terms and conditions set forth in this
+License apply to your use of that work.
+
+Any use of the Licensed Work in violation of this License will automatically
+terminate your rights under this License for the current and all other
+versions of the Licensed Work.
+
+This License does not grant you any right in any trademark or logo of
+Licensor or its affiliates (provided that you may use a trademark or logo of
+Licensor as expressly required by this License).
+
+TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
+AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
+EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
+TITLE.
+
+MariaDB hereby grants you permission to use this License’s text to license
+your works, and to refer to it using the trademark “Business Source License”,
+as long as you comply with the Covenants of Licensor below.
+
+Covenants of Licensor
+
+In consideration of the right to use this License’s text and the “Business
+Source License” name and trademark, Licensor covenants to MariaDB, and to all
+other recipients of the licensed work to be provided by Licensor:
+
+1. To specify as the Change License the GPL Version 2.0 or any later version,
+ or a license that is compatible with GPL Version 2.0 or a later version,
+ where “compatible” means that software provided under the Change License can
+ be included in a program with software provided under GPL Version 2.0 or a
+ later version. Licensor may specify additional Change Licenses without
+ limitation.
+
+2. To either: (a) specify an additional grant of rights to use that does not
+ impose any additional restriction on the right granted in this License, as
+ the Additional Use Grant; or (b) insert the text “None”.
+
+3. To specify a Change Date.
+
+4. Not to modify this License in any other way.
diff --git a/enterprise/traefik/17.0.28/README.md b/enterprise/traefik/17.0.28/README.md
new file mode 100644
index 00000000000..de60b9ed65c
--- /dev/null
+++ b/enterprise/traefik/17.0.28/README.md
@@ -0,0 +1,27 @@
+# README
+
+## General Info
+
+TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE.
+However only installations using the TrueNAS SCALE Apps system are supported.
+
+For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/enterprise/)
+
+**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)**
+
+
+## Support
+
+- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE%20Apps/Important-MUST-READ).
+- See the [Website](https://truecharts.org)
+- Check our [Discord](https://discord.gg/tVsPTHWTtr)
+- Open a [issue](https://github.com/truecharts/charts/issues/new/choose)
+
+---
+
+## Sponsor TrueCharts
+
+TrueCharts can only exist due to the incredible effort of our staff.
+Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can!
+
+*All Rights Reserved - The TrueCharts Project*
diff --git a/enterprise/traefik/17.0.28/app-changelog.md b/enterprise/traefik/17.0.28/app-changelog.md
new file mode 100644
index 00000000000..f147ccafc64
--- /dev/null
+++ b/enterprise/traefik/17.0.28/app-changelog.md
@@ -0,0 +1,9 @@
+
+
+## [traefik-17.0.28](https://github.com/truecharts/charts/compare/traefik-17.0.27...traefik-17.0.28) (2023-04-25)
+
+### Chore
+
+- update container image tccr.io/truecharts/traefik to v2.10.0 ([#8148](https://github.com/truecharts/charts/issues/8148))
+
+
\ No newline at end of file
diff --git a/enterprise/traefik/17.0.28/app-readme.md b/enterprise/traefik/17.0.28/app-readme.md
new file mode 100644
index 00000000000..02206fafcf4
--- /dev/null
+++ b/enterprise/traefik/17.0.28/app-readme.md
@@ -0,0 +1,8 @@
+Traefik is a flexible reverse proxy and Ingress Provider.
+
+This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/enterprise/traefik](https://truecharts.org/charts/enterprise/traefik)
+
+---
+
+TrueCharts can only exist due to the incredible effort of our staff.
+Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can!
diff --git a/enterprise/traefik/17.0.28/charts/common-12.4.21.tgz b/enterprise/traefik/17.0.28/charts/common-12.4.21.tgz
new file mode 100644
index 00000000000..33bfa07f3fa
Binary files /dev/null and b/enterprise/traefik/17.0.28/charts/common-12.4.21.tgz differ
diff --git a/enterprise/traefik/17.0.28/ix_values.yaml b/enterprise/traefik/17.0.28/ix_values.yaml
new file mode 100644
index 00000000000..ae9c14df672
--- /dev/null
+++ b/enterprise/traefik/17.0.28/ix_values.yaml
@@ -0,0 +1,417 @@
+image:
+ repository: tccr.io/truecharts/traefik
+ # defaults to appVersion
+ tag: 2.10.0@sha256:97fbdffa6380783fd7c35e3a3e7cf3eb6d10f3c99341971595ead5872c0dc438
+ pullPolicy: IfNotPresent
+
+workload:
+ main:
+ replicas: 2
+ strategy: RollingUpdate
+ podSpec:
+ containers:
+ main:
+ args: []
+ probes:
+ # -- Liveness probe configuration
+ # @default -- See below
+ liveness:
+ # -- sets the probe type when not using a custom probe
+ # @default -- "TCP"
+ type: tcp
+ # -- If a HTTP probe is used (default for HTTP/HTTPS services) this path is used
+ # @default -- "/"
+ # path: "/ping"
+
+ # -- Redainess probe configuration
+ # @default -- See below
+ readiness:
+ # -- sets the probe type when not using a custom probe
+ # @default -- "TCP"
+ type: tcp
+ # -- If a HTTP probe is used (default for HTTP/HTTPS services) this path is used
+ # @default -- "/"
+ # path: "/ping"
+
+ # -- Startup probe configuration
+ # @default -- See below
+ startup:
+ # -- sets the probe type when not using a custom probe
+ # @default -- "TCP"
+ type: tcp
+ # -- If a HTTP probe is used (default for HTTP/HTTPS services) this path is used
+ # @default -- "/"
+ # path: "/ping"
+
+# -- Options for all pods
+# Can be overruled per pod
+podOptions:
+ automountServiceAccountToken: true
+
+# -- Use ingressClass. Ignored if Traefik version < 2.3 / kubernetes < 1.18.x
+ingressClass:
+ # true is not unit-testable yet, pending https://github.com/rancher/helm-unittest/pull/12
+ enabled: false
+ isDefaultClass: false
+ # Use to force a networking.k8s.io API Version for certain CI/CD applications. E.g. "v1beta1"
+ fallbackApiVersion: ""
+
+# -- Create an IngressRoute for the dashboard
+ingressRoute:
+ dashboard:
+ enabled: true
+ # Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class)
+ annotations: {}
+ # Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels)
+ labels: {}
+#
+# -- Configure providers
+providers:
+ kubernetesCRD:
+ enabled: true
+ namespaces:
+ []
+ # - "default"
+ kubernetesIngress:
+ enabled: true
+ # labelSelector: environment=production,method=traefik
+ namespaces:
+ []
+ # - "default"
+ # IP used for Kubernetes Ingress endpoints
+ publishedService:
+ enabled: true
+ # Published Kubernetes Service to copy status from. Format: namespace/servicename
+ # By default this Traefik service
+ # pathOverride: ""
+
+# -- Logs
+# https://docs.traefik.io/observability/logs/
+logs:
+ # Traefik logs concern everything that happens to Traefik itself (startup, configuration, events, shutdown, and so on).
+ general:
+ # By default, the level is set to ERROR. Alternative logging levels are DEBUG, PANIC, FATAL, ERROR, WARN, and INFO.
+ level: ERROR
+ # -- Set the format of General Logs to be either Common Log Format or JSON. For more information: https://doc.traefik.io/traefik/observability/logs/#format
+ format: common
+ access:
+ # To enable access logs
+ enabled: false
+ # To write the logs in an asynchronous fashion, specify a bufferingSize option.
+ # This option represents the number of log lines Traefik will keep in memory before writing
+ # them to the selected output. In some cases, this option can greatly help performances.
+ # bufferingSize: 100
+ # Filtering https://docs.traefik.io/observability/access-logs/#filtering
+ filters:
+ {}
+ # statuscodes: "200,300-302"
+ # retryattempts: true
+ # minduration: 10ms
+ # Fields
+ # https://docs.traefik.io/observability/access-logs/#limiting-the-fieldsincluding-headers
+ fields:
+ general:
+ defaultmode: keep
+ names:
+ {}
+ # Examples:
+ # ClientUsername: drop
+ headers:
+ defaultmode: drop
+ names:
+ {}
+ # Examples:
+ # User-Agent: redact
+ # Authorization: drop
+ # Content-Type: keep
+ # -- Set the format of Access Logs to be either Common Log Format or JSON. For more information: https://doc.traefik.io/traefik/observability/access-logs/#format
+ format: common
+
+metrics:
+ main:
+ enabled: true
+ type: servicemonitor
+ endpoints:
+ - port: metrics
+ path: /metrics
+ targetSelector: metrics
+
+globalArguments:
+ - "--global.checknewversion"
+
+##
+# -- Additional arguments to be passed at Traefik's binary
+# All available options available on https://docs.traefik.io/reference/static-configuration/cli/
+## Use curly braces to pass values: `helm install --set="additionalArguments={--providers.kubernetesingress.ingressclass=traefik-internal,--log.level=DEBUG}"`
+additionalArguments:
+ - "--serverstransport.insecureskipverify=true"
+ - "--providers.kubernetesingress.allowexternalnameservices=true"
+
+# -- TLS Options to be created as TLSOption CRDs
+# https://doc.traefik.io/tccr.io/truecharts/https/tls/#tls-options
+# Example:
+tlsOptions:
+ default:
+ sniStrict: false
+ minVersion: VersionTLS12
+ curvePreferences:
+ - CurveP521
+ - CurveP384
+ cipherSuites:
+ - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+ - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
+ - TLS_AES_128_GCM_SHA256
+ - TLS_AES_256_GCM_SHA384
+ - TLS_CHACHA20_POLY1305_SHA256
+
+# -- Options for the main traefik service, where the entrypoints traffic comes from
+# from.
+service:
+ main:
+ type: LoadBalancer
+ ports:
+ main:
+ port: 9000
+ targetPort: 9000
+ protocol: http
+ # -- Forwarded Headers should never be enabled on Main entrypoint
+ forwardedHeaders:
+ enabled: false
+ # -- Proxy Protocol should never be enabled on Main entrypoint
+ proxyProtocol:
+ enabled: false
+ tcp:
+ enabled: true
+ type: LoadBalancer
+ ports:
+ web:
+ enabled: true
+ port: 9080
+ protocol: http
+ redirectTo: websecure
+ # Options: Empty, 0 (ingore), or positive int
+ # redirectPort:
+ # -- Configure (Forwarded Headers)[https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers] Support
+ forwardedHeaders:
+ enabled: false
+ # -- List of trusted IP and CIDR references
+ trustedIPs: []
+ # -- Trust all forwarded headers
+ insecureMode: false
+ # -- Configure (Proxy Protocol Headers)[https://doc.traefik.io/traefik/routing/entrypoints/#proxyprotocol] Support
+ proxyProtocol:
+ enabled: false
+ # -- Only IPs in trustedIPs will lead to remote client address replacement
+ trustedIPs: []
+ # -- Trust every incoming connection
+ insecureMode: false
+ websecure:
+ enabled: true
+ port: 9443
+ protocol: https
+ # -- Configure (Forwarded Headers)[https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers] Support
+ forwardedHeaders:
+ enabled: false
+ # -- List of trusted IP and CIDR references
+ trustedIPs: []
+ # -- Trust all forwarded headers
+ insecureMode: false
+ # -- Configure (Proxy Protocol Headers)[https://doc.traefik.io/traefik/routing/entrypoints/#proxyprotocol] Support
+ proxyProtocol:
+ enabled: false
+ # -- Only IPs in trustedIPs will lead to remote client address replacement
+ trustedIPs: []
+ # -- Trust every incoming connection
+ insecureMode: false
+ # tcpexample:
+ # enabled: true
+ # targetPort: 9443
+ # protocol: tcp
+ # tls:
+ # enabled: false
+ # # this is the name of a TLSOption definition
+ # options: ""
+ # certResolver: ""
+ # domains: []
+ # # - main: example.com
+ # # sans:
+ # # - foo.example.com
+ # # - bar.example.com
+ metrics:
+ enabled: true
+ type: ClusterIP
+ ports:
+ metrics:
+ enabled: true
+ port: 9180
+ targetPort: 9180
+ protocol: http
+ # -- Forwarded Headers should never be enabled on Metrics entrypoint
+ forwardedHeaders:
+ enabled: false
+ # -- Proxy Protocol should never be enabled on Metrics entrypoint
+ proxyProtocol:
+ enabled: false
+ # udp:
+ # enabled: false
+
+# -- Whether Role Based Access Control objects like roles and rolebindings should be created
+rbac:
+ main:
+ enabled: true
+ primary: true
+ clusterWide: true
+ rules:
+ - apiGroups:
+ - ""
+ resources:
+ - services
+ - endpoints
+ - secrets
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - extensions
+ - networking.k8s.io
+ resources:
+ - ingresses
+ - ingressclasses
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - extensions
+ - networking.k8s.io
+ resources:
+ - ingresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - traefik.containo.us
+ resources:
+ - ingressroutes
+ - ingressroutetcps
+ - ingressrouteudps
+ - middlewares
+ - middlewaretcps
+ - tlsoptions
+ - tlsstores
+ - traefikservices
+ - serverstransports
+ verbs:
+ - get
+ - list
+ - watch
+
+# -- The service account the pods will use to interact with the Kubernetes API
+serviceAccount:
+ main:
+ enabled: true
+ primary: true
+
+# -- SCALE Middleware Handlers
+middlewares:
+ basicAuth: []
+ # - name: basicauthexample
+ # users:
+ # - username: testuser
+ # password: testpassword
+ forwardAuth: []
+ # - name: forwardAuthexample
+ # address: https://auth.example.com/
+ # authResponseHeaders:
+ # - X-Secret
+ # - X-Auth-User
+ # authRequestHeaders:
+ # - "Accept"
+ # - "X-CustomHeader"
+ # authResponseHeadersRegex: "^X-"
+ # trustForwardHeader: true
+ chain: []
+ # - name: chainname
+ # middlewares:
+ # - name: compress
+ redirectScheme: []
+ # - name: redirectSchemeName
+ # scheme: https
+ # permanent: true
+ rateLimit: []
+ # - name: rateLimitName
+ # average: 300
+ # burst: 200
+ redirectRegex: []
+ # - name: redirectRegexName
+ # regex: putregexhere
+ # replacement: replacementurlhere
+ # permanent: false
+ stripPrefixRegex: []
+ # - name: stripPrefixRegexName
+ # regex: []
+ ipWhiteList: []
+ # - name: ipWhiteListName
+ # sourceRange: []
+ # ipStrategy:
+ # depth: 2
+ # excludedIPs: []
+ themeParkVersion: v1.3.0
+ themePark: []
+ # - name: themeParkName
+ # -- Supported apps, lower case name
+ # -- https://docs.theme-park.dev/themes
+ # app: appnamehere
+ # -- Supported themes, lower case name
+ # -- https://docs.theme-park.dev/themes/APPNAMEHERE
+ # -- https://docs.theme-park.dev/community-themes
+ # theme: themenamehere
+ # -- https://theme-park.dev or a self hosted url
+ # baseUrl: https://theme-park.dev
+ realIPVersion: v1.0.3
+ # Sets X-Real-Ip with an IP from the X-Forwarded-For or
+ # Cf-Connecting-Ip (If from Cloudflare)
+ # Evaluation of those headers will go from last to first
+ realIP: []
+ # - name: realIPName
+ # -- The real IP will be the first one that is
+ # -- not included in any of the CIDRs passed here
+ # excludedNetworks:
+ # - 1.1.1.1/24
+ addPrefix: []
+ # - name: addPrefixName
+ # prefix: "/foo"
+ geoBlockVersion: v0.2.4
+ geoBlock: []
+ # -- https://github.com/PascalMinder/geoblock
+ # - name: geoBlockName
+ # allowLocalRequests: true
+ # logLocalRequests: false
+ # logAllowedRequests: false
+ # logApiRequests: false
+ # api: https://get.geojs.io/v1/ip/country/{ip}
+ # apiTimeoutMs: 500
+ # cacheSize: 25
+ # forceMonthlyUpdate: true
+ # allowUnknownCountries: false
+ # unknownCountryApiResponse: nil
+ # blackListMode: false
+ # countries:
+ # - RU
+
+portalhook:
+ enabled: true
+
+persistence:
+ plugins:
+ enabled: true
+ mountPath: "/plugins-storage"
+ type: emptyDir
+
+portal:
+ open:
+ enabled: true
+ path: /dashboard/
+ override:
+ protocol: http
diff --git a/enterprise/traefik/17.0.28/questions.yaml b/enterprise/traefik/17.0.28/questions.yaml
new file mode 100644
index 00000000000..9fead349a1a
--- /dev/null
+++ b/enterprise/traefik/17.0.28/questions.yaml
@@ -0,0 +1,2612 @@
+groups:
+ - name: Container Image
+ description: Image to be used for container
+ - name: General Settings
+ description: General Deployment Settings
+ - name: Workload Settings
+ description: Workload Settings
+ - name: App Configuration
+ description: App Specific Config Options
+ - name: Networking and Services
+ description: Configure Network and Services for Container
+ - name: Storage and Persistence
+ description: Persist and Share Data that is Separate from the Container
+ - name: Ingress
+ description: Ingress Configuration
+ - name: Security and Permissions
+ description: Configure Security Context and Permissions
+ - name: Resources and Devices
+ description: "Specify Resources/Devices to be Allocated to Workload"
+ - name: Middlewares
+ description: Traefik Middlewares
+ - name: Metrics
+ description: Metrics
+ - name: Addons
+ description: Addon Configuration
+ - name: Advanced
+ description: Advanced Configuration
+ - name: Postgresql
+ description: Postgresql
+ - name: Documentation
+ description: Documentation
+portals:
+ open:
+ protocols:
+ - "$kubernetes-resource_configmap_tcportal-open_protocol"
+ host:
+ - "$kubernetes-resource_configmap_tcportal-open_host"
+ ports:
+ - "$kubernetes-resource_configmap_tcportal-open_port"
+ path: "$kubernetes-resource_configmap_tcportal-open_path"
+questions:
+
+ - variable: workload
+ group: "Workload Settings"
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Type (Advanced)
+ schema:
+ type: string
+ default: Deployment
+ enum:
+ - value: Deployment
+ description: Deployment
+ - value: DaemonSet
+ description: DaemonSet
+
+ - variable: replicas
+ label: Replicas (Advanced)
+ description: Set the number of Replicas
+ schema:
+ type: int
+ show_if: [["type", "!=", "DaemonSet"]]
+ default: 1
+ - variable: podSpec
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: containers
+ label: Containers
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: Main Container
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: envList
+ label: Extra Environment Variables
+ description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..."
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: envItem
+ label: Environment Variable
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ - variable: value
+ label: Value
+ schema:
+ type: string
+ - variable: extraArgs
+ label: Extra Args
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: arg
+ label: Arg
+ schema:
+ type: string
+ - variable: advanced
+ label: Show Advanced Settings
+ description: Advanced settings are not covered by TrueCharts Support
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: command
+ label: Command
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: param
+ label: Param
+ schema:
+ type: string
+
+ - variable: TZ
+ label: Timezone
+ group: "General Settings"
+ schema:
+ type: string
+ default: "Etc/UTC"
+ $ref:
+ - "definitions/timezone"
+ - variable: podOptions
+ group: "General Settings"
+ label: "Global Pod Options (Advanced)"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: hostNetwork
+ label: "Host Networking"
+ schema:
+ type: boolean
+ default: false
+ - variable: dnsConfig
+ label: "DNS Configuration"
+ schema:
+ type: dict
+ additional_attrs: true
+ attrs:
+ - variable: options
+ label: "Options"
+ schema:
+ type: list
+ default: [{"name": "ndots", "value": "2"}]
+ items:
+ - variable: optionsEntry
+ label: "Option Entry"
+ schema:
+ type: dict
+ additional_attrs: true
+ attrs:
+ - variable: name
+ label: "Name"
+ schema:
+ type: string
+ required: true
+ - variable: value
+ label: "Value"
+ schema:
+ type: string
+ - variable: nameservers
+ label: "Nameservers"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: nsEntry
+ label: "Nameserver Entry"
+ schema:
+ type: string
+ required: true
+ - variable: searches
+ label: "Searches"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: searchEntry
+ label: "Search Entry"
+ schema:
+ type: string
+ required: true
+ - variable: ingressClass
+ label: "ingressClass"
+ group: "App Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "Enable"
+ description: "When enabled, ingressClass will match the entered name of this app"
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: isDefaultClass
+ label: "isDefaultClass"
+ schema:
+ type: boolean
+ default: false
+ - variable: logs
+ label: "Logs"
+ group: "App Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: general
+ label: "General Logs"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: level
+ label: "Log Level"
+ schema:
+ type: string
+ default: "ERROR"
+ enum:
+ - value: "INFO"
+ description: "Info"
+ - value: "WARN"
+ description: "Warnings"
+ - value: "ERROR"
+ description: "Errors"
+ - value: "FATAL"
+ description: "Fatal Errors"
+ - value: "PANIC"
+ description: "Panics"
+ - value: "DEBUG"
+ description: "Debug"
+ - variable: format
+ label: "General Log format"
+ schema:
+ type: string
+ default: "common"
+ enum:
+ - value: "common"
+ description: "Common Log Format"
+ - value: "json"
+ description: "JSON"
+ - variable: access
+ label: "Access Logs"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "Enable"
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: enabledFilters
+ label: "Enable Filters"
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: filters
+ label: "Filters"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: statuscodes
+ label: "Status codes"
+ schema:
+ type: string
+ default: "200,300-302"
+ - variable: retryattempts
+ label: "retryattempts"
+ schema:
+ type: boolean
+ default: true
+ - variable: minduration
+ label: "minduration"
+ schema:
+ type: string
+ default: "10ms"
+ - variable: fields
+ label: "Fields"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: general
+ label: "General"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: defaultmode
+ label: "Default Mode"
+ schema:
+ type: string
+ default: "keep"
+ enum:
+ - value: "keep"
+ description: "Keep"
+ - value: "drop"
+ description: "Drop"
+ - variable: headers
+ label: "Headers"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: defaultmode
+ label: "Default Mode"
+ schema:
+ type: string
+ default: "drop"
+ enum:
+ - value: "keep"
+ description: "Keep"
+ - value: "drop"
+ description: "Drop"
+ - variable: format
+ label: "Access Log format"
+ schema:
+ type: string
+ default: "common"
+ enum:
+ - value: "common"
+ description: "Common Log Format"
+ - value: "json"
+ description: "JSON"
+ - variable: middlewares
+ label: ""
+ group: "Middlewares"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: basicAuth
+ label: basicAuth
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: basicAuthEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: users
+ label: Users
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: usersEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: username
+ label: Username
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: password
+ label: Password
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: forwardAuth
+ label: forwardAuth
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: basicAuthEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: address
+ label: Address
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: trustForwardHeader
+ label: trustForwardHeader
+ schema:
+ type: boolean
+ default: false
+ - variable: tls
+ label: TLS
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: insecureSkipVerify
+ label: insecureSkipVerify (expert)
+ description: >-
+ This disables all TLS certificate validation on communications with the authentication endpoint.
+ This could be a security risk and should only be used if you know what you are doing.
+ schema:
+ type: boolean
+ default: false
+ - variable: authResponseHeadersRegex
+ label: authResponseHeadersRegex
+ schema:
+ type: string
+ default: ""
+ - variable: authResponseHeaders
+ label: authResponseHeaders
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: authResponseHeadersEntry
+ label: ""
+ schema:
+ type: string
+ default: ""
+ - variable: authRequestHeaders
+ label: authRequestHeaders
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: authRequestHeadersEntry
+ label: ""
+ schema:
+ type: string
+ default: ""
+ - variable: chain
+ label: Chain
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: chainEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: middlewares
+ label: Middlewares to Chain
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: redirectScheme
+ label: redirectScheme
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: redirectSchemeEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: scheme
+ label: Scheme
+ schema:
+ type: string
+ required: true
+ default: https
+ enum:
+ - value: https
+ description: https
+ - value: http
+ description: http
+ - variable: permanent
+ label: Permanent
+ schema:
+ type: boolean
+ default: false
+ - variable: rateLimit
+ label: rateLimit
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: rateLimitEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: average
+ label: Average
+ schema:
+ type: int
+ required: true
+ default: 300
+ - variable: burst
+ label: Burst
+ schema:
+ type: int
+ required: true
+ default: 200
+ - variable: redirectRegex
+ label: redirectRegex
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: redirectRegexEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: regex
+ label: Regex
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: replacement
+ label: Replacement
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: permanent
+ label: Permanent
+ schema:
+ type: boolean
+ default: false
+ - variable: stripPrefixRegex
+ label: stripPrefixRegex
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: stripPrefixRegexEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: regex
+ label: Regex
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: regexEntry
+ label: Regex
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: ipWhiteList
+ label: ipWhiteList
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: ipWhiteListEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: sourceRange
+ label: Source Range
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: sourceRangeEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: ipStrategy
+ label: IP Strategy
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: depth
+ label: Depth
+ schema:
+ type: int
+ required: true
+ - variable: excludedIPs
+ label: Excluded IPs
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: excludedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: themePark
+ label: theme.park
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: themeParkEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: This is a 3rd party plugin and not maintained by TrueCharts,
+ for more information go to traefik-themepark
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: appName
+ label: App Name
+ description: Lower case, name of the app to be themed.
+
Go to https://docs.theme-park.dev/themes/ to see supported apps.
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: themeName
+ label: Theme Name
+ description: Lower case, name of the theme to be applied.
+
Go to https://docs.theme-park.dev/theme-options/ to see supported themes.
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: baseUrl
+ label: Base URL
+ description: Replace `https://theme-park.dev` URL for self-hosting reference.
+ schema:
+ type: string
+ required: true
+ default: https://theme-park.dev
+ - variable: addons
+ label: Addons
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: addonEntry
+ label: Addon
+ description: Currently only supports 'darker' and '4k-logo' for *arr apps.
+
Go to https://docs.theme-park.dev/themes/addons/ for Addon information.
+
Go to https://github.com/packruler/traefik-themepark for more context on plugin
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: realIP
+ label: Real IP
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: realIPEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: excludedNetworks
+ label: Excluded Networks
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: excludedNetEntry
+ label: Excluded Network Entry
+ description: Network to exclude setting it to X-Real-Ip
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: geoBlock
+ label: GeoBlock
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: geoBlockEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: This is a 3rd party plugin and not maintained by TrueCharts,
+ for more information go to geoblock
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: allowLocalRequests
+ label: Allow Local Requests
+ description: If set to true, will not block request from Private IP Ranges
+ schema:
+ type: boolean
+ default: true
+ - variable: logLocalRequests
+ label: Log Local Requests
+ description: If set to true, will log every connection from any IP in the private IP range
+ schema:
+ type: boolean
+ default: false
+ - variable: logAllowedRequests
+ label: Log Allowed Requests
+ description: If set to true, will show a log message with the IP and the country of origin if a request is allowed.
+ schema:
+ type: boolean
+ default: false
+ - variable: logApiRequests
+ label: Log API Requests
+ description: If set to true, will show a log message for every API hit.
+ schema:
+ type: boolean
+ default: false
+ - variable: api
+ label: API
+ description: Defines the API URL for the IP to Country resolution. The IP to fetch can be added with {ip} to the URL.
+ schema:
+ type: string
+ required: true
+ default: https://get.geojs.io/v1/ip/country/{ip}
+ - variable: apiTimeoutMs
+ label: API Timeout in ms
+ description: Timeout for the call to the api uri.
+ schema:
+ type: int
+ required: true
+ default: 500
+ - variable: cacheSize
+ label: Cache Size
+ description: Defines the max size of the LRU (least recently used) cache.
+ schema:
+ type: int
+ required: true
+ default: 25
+ - variable: forceMonthlyUpdate
+ label: Force Monthly Update
+ description: Even if an IP stays in the cache for a period of a month (about 30 x 24 hours), it must be fetch again after a month.
+ schema:
+ type: boolean
+ default: true
+ - variable: allowUnknownCountries
+ label: Allow Unknown Countries
+ description: Some IP addresses have no country associated with them. If this option is set to true, all IPs with no associated country are also allowed.
+ schema:
+ type: boolean
+ default: false
+ - variable: unknownCountryApiResponse
+ label: Unknown Countries API Response
+ description: The API uri can be customized. This options allows to customize the response string of the API when a IP with no associated country is requested.
+ schema:
+ type: string
+ required: true
+ default: nil
+ - variable: blackListMode
+ label: Blacklist Mode
+ description: When set to true the filter logic is inverted, i.e. requests originating from countries listed in the countries list are blocked.
+ schema:
+ type: boolean
+ default: false
+ - variable: countries
+ description: Country codes (2 characters) from which connections to the service should be allowed or blocked, based on the mode.
+ label: Countries
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: countryEntry
+ label: Country
+ description: Country codes (2 characters) from which connections to the service should be allowed or blocked, based on the mode.
+ schema:
+ type: string
+ required: true
+ # Allow only 2 Characters
+ valid_chars: '^[a-zA-Z]{2}$'
+ default: ""
+ - variable: addPrefix
+ label: Add Prefix
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: addPrefixEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: prefix
+ label: Prefix
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: service
+ group: "Networking and Services"
+ label: "Configure Service Entrypoint"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: "Main Service"
+ description: "The Primary service on which the healthcheck runs, often the webUI"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the Service
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: type
+ label: Service Type
+ description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer"
+ schema:
+ type: string
+ default: LoadBalancer
+ enum:
+ - value: LoadBalancer
+ description: LoadBalancer (Expose Ports)
+ - value: ClusterIP
+ description: ClusterIP (Do Not Expose Ports)
+ - variable: loadBalancerIP
+ label: LoadBalancer IP
+ description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB"
+ schema:
+ show_if: [["type", "=", "LoadBalancer"]]
+ type: string
+ default: ""
+ - variable: ports
+ label: "Service's Port(s) Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: "Main Entrypoint Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: "Entrypoints Port"
+ schema:
+ type: int
+ default: 9000
+ required: true
+ - variable: tcp
+ label: "TCP Service"
+ description: "The tcp Entrypoint service"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the Service
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: type
+ label: Service Type
+ description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer"
+ schema:
+ type: string
+ default: LoadBalancer
+ enum:
+ - value: LoadBalancer
+ description: LoadBalancer (Expose Ports)
+ - value: ClusterIP
+ description: ClusterIP (Do Not Expose Ports)
+ - variable: loadBalancerIP
+ label: LoadBalancer IP
+ description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB"
+ schema:
+ show_if: [["type", "=", "LoadBalancer"]]
+ type: string
+ default: ""
+ - variable: ports
+ label: "Service's Port(s) Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: web
+ label: "web Entrypoint Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: "Entrypoints Port"
+ schema:
+ type: int
+ default: 9080
+ required: true
+ - variable: advanced
+ label: Show Advanced Settings
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: redirectPort
+ label: "Redirect to Port"
+ schema:
+ type: int
+ - variable: redirectTo
+ label: "Redirect to Entrypoint"
+ schema:
+ type: string
+ default: "websecure"
+ - variable: forwardedHeaders
+ label: Accept Forwarded Headers
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Trust Forwarded Headers from specific IPs.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Always Trust Forwarded Headers
+ schema:
+ type: boolean
+ default: false
+ - variable: proxyProtocol
+ label: Accept Proxy Protocol connections
+ description: If Proxy Protocol header parsing is enabled for the entry point, this entry point can accept connections with or without Proxy Protocol headers.
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Only IPs in trustedIPs will lead to remote client address replacement
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Trust every incoming connection
+ schema:
+ type: boolean
+ default: false
+ - variable: websecure
+ label: "websecure Entrypoints Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: "Entrypoints Port"
+ schema:
+ type: int
+ default: 9443
+ required: true
+ - variable: advanced
+ label: Show Advanced Settings
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: redirectPort
+ label: "Redirect to Port"
+ schema:
+ type: int
+ - variable: redirectTo
+ label: "Redirect to Entrypoint"
+ schema:
+ type: string
+ - variable: forwardedHeaders
+ label: Accept Forwarded Headers
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Trust Forwarded Headers from specific IPs.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Always Trust Forwarded Headers
+ schema:
+ type: boolean
+ default: false
+ - variable: proxyProtocol
+ label: Accept Proxy Protocol connections
+ description: If Proxy Protocol header parsing is enabled for the entry point, this entry point can accept connections with or without Proxy Protocol headers.
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Only IPs in trustedIPs will lead to remote client address replacement
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Trust every incoming connection
+ schema:
+ type: boolean
+ default: false
+ - variable: tls
+ label: "websecure Entrypoints Configuration"
+ schema:
+ type: dict
+ hidden: true
+ attrs:
+ - variable: enabled
+ label: "Enabled"
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: portsList
+ label: "Additional TCP Entrypoints"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: portsListEntry
+ label: "Custom Entrypoints"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "Enable the port"
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: name
+ label: "Entrypoints Name"
+ schema:
+ type: string
+ default: ""
+ - variable: protocol
+ label: "Entrypoints Type"
+ schema:
+ type: string
+ default: "tcp"
+ enum:
+ - value: http
+ description: "HTTP"
+ - value: "https"
+ description: "HTTPS"
+ - value: tcp
+ description: "TCP"
+ - variable: port
+ label: "Port"
+ description: "This port exposes the container port on the service"
+ schema:
+ type: int
+ required: true
+ - variable: tls
+ label: "websecure Entrypoints Configuration"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "Enabled"
+ schema:
+ type: boolean
+ default: true
+ - variable: redirectPort
+ label: "Redirect to Port"
+ schema:
+ type: int
+ - variable: redirectTo
+ label: "Redirect to Entrypoint"
+ schema:
+ type: string
+ - variable: forwardedHeaders
+ label: Accept Forwarded Headers
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Trust Forwarded Headers from specific IPs.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Always Trust Forwarded Headers
+ schema:
+ type: boolean
+ default: false
+ - variable: proxyProtocol
+ label: Accept Proxy Protocol connections
+ description: If Proxy Protocol header parsing is enabled for the entry point, this entry point can accept connections with or without Proxy Protocol headers.
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: trustedIPs
+ label: Trusted IPs
+ description: Only IPs in trustedIPs will lead to remote client address replacement
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: trustedIPsEntry
+ label: ""
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: insecureMode
+ label: Insecure Mode
+ description: Trust every incoming connection
+ schema:
+ type: boolean
+ default: false
+ - variable: ingress
+ label: ""
+ group: Ingress
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: "Main Ingress"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable Ingress
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: hosts
+ label: Hosts
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: hostEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: host
+ label: HostName
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: paths
+ label: Paths
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: pathEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: path
+ label: Path
+ schema:
+ type: string
+ required: true
+ default: "/"
+ - variable: pathType
+ label: Path Type
+ schema:
+ type: string
+ required: true
+ default: Prefix
+ - variable: certificateIssuer
+ label: Cert-Manager clusterIssuer
+ description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below'
+ schema:
+ type: string
+ default: ""
+ - variable: tls
+ label: TLS-Settings
+ schema:
+ type: list
+ show_if: [["certificateIssuer", "=", ""]]
+ default: []
+ items:
+ - variable: tlsEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: hosts
+ label: Certificate Hosts
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: host
+ label: Host
+ schema:
+ type: string
+ default: ""
+ required: true
+
+ - variable: certificateIssuer
+ label: Use Cert-Manager clusterIssuer
+ description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.'
+ schema:
+ type: string
+ default: ""
+ - variable: scaleCert
+ label: Use TrueNAS SCALE Certificate (Deprecated)
+ schema:
+ show_if: [["certificateIssuer", "=", ""]]
+ type: int
+ $ref:
+ - "definitions/certificate"
+ - variable: secretName
+ label: Use Custom Secret (Advanced)
+ schema:
+ show_if: [["certificateIssuer", "=", ""]]
+ type: string
+ default: ""
+ - variable: entrypoint
+ label: (Advanced) Traefik Entrypoint
+ description: Entrypoint used by Traefik when using Traefik as Ingress Provider
+ schema:
+ type: string
+ default: websecure
+ required: true
+ - variable: ingressClassName
+ label: (Advanced/Optional) IngressClass Name
+ schema:
+ type: string
+ default: ""
+ - variable: middlewares
+ label: Traefik Middlewares
+ description: Add previously created Traefik Middlewares to this Ingress
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: ingressList
+ label: Add Manual Custom Ingresses
+ group: Ingress
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: ingressListEntry
+ label: Custom Ingress
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable Ingress
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ default: ""
+ - variable: ingressClassName
+ label: IngressClass Name
+ schema:
+ type: string
+ default: ""
+ - variable: hosts
+ label: Hosts
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: hostEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: host
+ label: HostName
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: paths
+ label: Paths
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: pathEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: path
+ label: Path
+ schema:
+ type: string
+ required: true
+ default: "/"
+ - variable: pathType
+ label: Path Type
+ schema:
+ type: string
+ required: true
+ default: Prefix
+ - variable: service
+ label: Linked Service
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Service Name
+ schema:
+ type: string
+ default: ""
+ - variable: port
+ label: Service Port
+ schema:
+ type: int
+ - variable: clusterIssuer
+ label: clusterIssuer
+ description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below'
+ schema:
+ type: string
+ default: ""
+ - variable: tls
+ label: TLS-Settings
+ schema:
+ type: list
+ default: []
+ show_if: [["clusterIssuer", "=", ""]]
+ items:
+ - variable: tlsEntry
+ label: Host
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: hosts
+ label: Certificate Hosts
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: host
+ label: Host
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: clusterIssuer
+ label: Use Cert-Manager clusterIssuer
+ description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.'
+ schema:
+ type: string
+ default: ""
+ - variable: scaleCert
+ label: Use TrueNAS SCALE Certificate (Deprecated)
+ schema:
+ show_if: [["clusterIssuer", "=", ""]]
+ type: int
+ $ref:
+ - "definitions/certificate"
+ - variable: secretName
+ label: Use Custom Secret (Advanced)
+ schema:
+ type: string
+ show_if: [["clusterIssuer", "=", ""]]
+ default: ""
+ - variable: entrypoint
+ label: Traefik Entrypoint
+ description: Entrypoint used by Traefik when using Traefik as Ingress Provider
+ schema:
+ type: string
+ default: websecure
+ required: true
+ - variable: middlewares
+ label: Traefik Middlewares
+ description: Add previously created Traefik Middlewares to this Ingress
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: securityContext
+ group: Security and Permissions
+ label: Security Context
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: container
+ label: Container
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ # Settings from questions.yaml get appended here on a per-app basis
+
+ - variable: runAsUser
+ label: "runAsUser"
+ description: "The UserID of the user running the application"
+ schema:
+ type: int
+ default: 568
+ - variable: runAsGroup
+ label: "runAsGroup"
+ description: "The groupID of the user running the application"
+ schema:
+ type: int
+ default: 568
+ # Settings from questions.yaml get appended here on a per-app basis
+ - variable: PUID
+ label: Process User ID - PUID
+ description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps
+ schema:
+ type: int
+ show_if: [["runAsUser", "=", "0"]]
+ default: 568
+ - variable: UMASK
+ label: UMASK
+ description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps
+ schema:
+ type: string
+ default: "0022"
+ - variable: advanced
+ label: Show Advanced Settings
+ description: Advanced settings are not covered by TrueCharts Support
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: privileged
+ label: "Privileged mode"
+ schema:
+ type: boolean
+ default: false
+ - variable: readOnlyRootFilesystem
+ label: "ReadOnly Root Filesystem"
+ schema:
+ type: boolean
+ default: true
+ - variable: pod
+ label: Pod
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: fsGroupChangePolicy
+ label: "When should we take ownership?"
+ schema:
+ type: string
+ default: OnRootMismatch
+ enum:
+ - value: OnRootMismatch
+ description: OnRootMismatch
+ - value: Always
+ description: Always
+ - variable: supplementalGroups
+ label: Supplemental Groups
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: supplementalGroupsEntry
+ label: Supplemental Group
+ schema:
+ type: int
+ # Settings from questions.yaml get appended here on a per-app basis
+ - variable: fsGroup
+ label: "fsGroup"
+ description: "The group that should own ALL storage."
+ schema:
+ type: int
+ default: 568
+
+ - variable: resources
+ group: Resources and Devices
+ label: "Resource Limits"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: limits
+ label: Advanced Limit Resource Consumption
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: cpu
+ label: CPU
+ description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation"
+ schema:
+ type: string
+ default: 4000m
+ valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$'
+ - variable: memory
+ label: RAM
+ description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation"
+ schema:
+ type: string
+ default: 8Gi
+ valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$'
+ - variable: requests
+ label: "Minimum Resources Required (request)"
+ schema:
+ additional_attrs: true
+ type: dict
+ hidden: true
+ attrs:
+ - variable: cpu
+ label: CPU
+ description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation"
+ schema:
+ type: string
+ default: 10m
+ hidden: true
+ valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$'
+ - variable: memory
+ label: "RAM"
+ description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation"
+ schema:
+ type: string
+ default: 50Mi
+ hidden: true
+ valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$'
+ - variable: deviceList
+ label: Mount USB Devices
+ group: Resources and Devices
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: deviceListEntry
+ label: Device
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the Storage
+ schema:
+ type: boolean
+ default: true
+ - variable: type
+ label: (Advanced) Type of Storage
+ description: Sets the persistence type
+ schema:
+ type: string
+ default: device
+ hidden: true
+ - variable: readOnly
+ label: readOnly
+ schema:
+ type: boolean
+ default: false
+ - variable: hostPath
+ label: Host Device Path
+ description: Path to the device on the host system
+ schema:
+ type: path
+ - variable: mountPath
+ label: Container Device Path
+ description: Path inside the container the device is mounted
+ schema:
+ type: string
+ default: "/dev/ttyACM0"
+ - variable: scaleGPU
+ label: GPU Configuration
+ group: Resources and Devices
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: scaleGPUEntry
+ label: GPU
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ # Specify GPU configuration
+ - variable: gpu
+ label: Select GPU
+ schema:
+ type: dict
+ $ref:
+ - "definitions/gpuConfiguration"
+ attrs: []
+ - variable: workaround
+ label: "Workaround"
+ schema:
+ type: string
+ default: workaround
+ hidden: true
+ - variable: metrics
+ group: Metrics
+ label: Prometheus Metrics
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: main
+ label: Main Metrics
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enabled
+ description: Enable Prometheus Metrics
+ schema:
+ type: boolean
+ default: true
+ show_subquestions_if: true
+ subquestions:
+ - variable: prometheusRule
+ label: PrometheusRule
+ description: Enable and configure Prometheus Rules for the App.
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enabled
+ description: Enable Prometheus Metrics
+ schema:
+ type: boolean
+ default: false
+ # TODO: Rule List section
+# - variable: horizontalPodAutoscaler
+# group: Advanced
+# label: (Advanced) Horizontal Pod Autoscaler
+# schema:
+# type: list
+# default: []
+# items:
+# - variable: hpaEntry
+# label: HPA Entry
+# schema:
+# additional_attrs: true
+# type: dict
+# attrs:
+# - variable: name
+# label: Name
+# schema:
+# type: string
+# required: true
+# default: ""
+# - variable: enabled
+# label: Enabled
+# schema:
+# type: boolean
+# default: false
+# show_subquestions_if: true
+# subquestions:
+# - variable: target
+# label: Target
+# description: Deployment name, Defaults to Main Deployment
+# schema:
+# type: string
+# default: ""
+# - variable: minReplicas
+# label: Minimum Replicas
+# schema:
+# type: int
+# default: 1
+# - variable: maxReplicas
+# label: Maximum Replicas
+# schema:
+# type: int
+# default: 5
+# - variable: targetCPUUtilizationPercentage
+# label: Target CPU Utilization Percentage
+# schema:
+# type: int
+# default: 80
+# - variable: targetMemoryUtilizationPercentage
+# label: Target Memory Utilization Percentage
+# schema:
+# type: int
+# default: 80
+ - variable: networkPolicy
+ group: Advanced
+ label: (Advanced) Network Policy
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: netPolicyEntry
+ label: Network Policy Entry
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: enabled
+ label: Enabled
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: policyType
+ label: Policy Type
+ schema:
+ type: string
+ default: ""
+ enum:
+ - value: ""
+ description: Default
+ - value: ingress
+ description: Ingress
+ - value: egress
+ description: Egress
+ - value: ingress-egress
+ description: Ingress and Egress
+ - variable: egress
+ label: Egress
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: egressEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: to
+ label: To
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: toEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: ipBlock
+ label: IP Block
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: cidr
+ label: CIDR
+ schema:
+ type: string
+ default: ""
+ - variable: except
+ label: Except
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: exceptint
+ label: ""
+ schema:
+ type: string
+ - variable: namespaceSelector
+ label: Namespace Selector
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: matchExpressions
+ label: Match Expressions
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: expressionEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: key
+ label: Key
+ schema:
+ type: string
+ - variable: operator
+ label: Operator
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: In
+ description: In
+ - value: NotIn
+ description: NotIn
+ - value: Exists
+ description: Exists
+ - value: DoesNotExist
+ description: DoesNotExist
+ - variable: values
+ label: Values
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: value
+ label: ""
+ schema:
+ type: string
+ - variable: podSelector
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: matchExpressions
+ label: Match Expressions
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: expressionEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: key
+ label: Key
+ schema:
+ type: string
+ - variable: operator
+ label: Operator
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: In
+ description: In
+ - value: NotIn
+ description: NotIn
+ - value: Exists
+ description: Exists
+ - value: DoesNotExist
+ description: DoesNotExist
+ - variable: values
+ label: Values
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: value
+ label: ""
+ schema:
+ type: string
+ - variable: ports
+ label: Ports
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: portsEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: Port
+ schema:
+ type: int
+ - variable: endPort
+ label: End Port
+ schema:
+ type: int
+ - variable: protocol
+ label: Protocol
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: TCP
+ description: TCP
+ - value: UDP
+ description: UDP
+ - value: SCTP
+ description: SCTP
+ - variable: ingress
+ label: Ingress
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: ingressEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: from
+ label: From
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: fromEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: ipBlock
+ label: IP Block
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: cidr
+ label: CIDR
+ schema:
+ type: string
+ default: ""
+ - variable: except
+ label: Except
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: exceptint
+ label: ""
+ schema:
+ type: string
+ - variable: namespaceSelector
+ label: Namespace Selector
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: matchExpressions
+ label: Match Expressions
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: expressionEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: key
+ label: Key
+ schema:
+ type: string
+ - variable: operator
+ label: Operator
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: In
+ description: In
+ - value: NotIn
+ description: NotIn
+ - value: Exists
+ description: Exists
+ - value: DoesNotExist
+ description: DoesNotExist
+ - variable: values
+ label: Values
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: value
+ label: ""
+ schema:
+ type: string
+ - variable: podSelector
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: matchExpressions
+ label: Match Expressions
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: expressionEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: key
+ label: Key
+ schema:
+ type: string
+ - variable: operator
+ label: Operator
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: In
+ description: In
+ - value: NotIn
+ description: NotIn
+ - value: Exists
+ description: Exists
+ - value: DoesNotExist
+ description: DoesNotExist
+ - variable: values
+ label: Values
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: value
+ label: ""
+ schema:
+ type: string
+ - variable: ports
+ label: Ports
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: portsEntry
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: Port
+ schema:
+ type: int
+ - variable: endPort
+ label: End Port
+ schema:
+ type: int
+ - variable: protocol
+ label: Protocol
+ schema:
+ type: string
+ default: TCP
+ enum:
+ - value: TCP
+ description: TCP
+ - value: UDP
+ description: UDP
+ - value: SCTP
+ description: SCTP
+ - variable: addons
+ group: Addons
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: codeserver
+ label: Codeserver
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enabled
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: service
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Service Type
+ description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer"
+ schema:
+ type: string
+ default: LoadBalancer
+ enum:
+ - value: NodePort
+ description: Deprecated CHANGE THIS
+ - value: ClusterIP
+ description: ClusterIP
+ - value: LoadBalancer
+ description: LoadBalancer
+ - variable: loadBalancerIP
+ label: LoadBalancer IP
+ description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB"
+ schema:
+ show_if: [["type", "=", "LoadBalancer"]]
+ type: string
+ default: ""
+ - variable: ports
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: codeserver
+ label: ""
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: Port
+ schema:
+ type: int
+ default: 36107
+ - variable: envList
+ label: Codeserver Environment Variables
+ schema:
+ type: list
+ show_if: [["type", "!=", "disabled"]]
+ default: []
+ items:
+ - variable: envItem
+ label: Environment Variable
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: value
+ label: Value
+ schema:
+ type: string
+ required: true
+ - variable: netshoot
+ label: Netshoot
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enabled
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: envList
+ label: Netshoot Environment Variables
+ schema:
+ type: list
+ show_if: [["type", "!=", "disabled"]]
+ default: []
+ items:
+ - variable: envItem
+ label: Environment Variable
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: value
+ label: Value
+ schema:
+ type: string
+ required: true
+ - variable: vpn
+ label: VPN
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Type
+ schema:
+ type: string
+ default: disabled
+ enum:
+ - value: disabled
+ description: disabled
+ - value: gluetun
+ description: Gluetun
+ - value: tailscale
+ description: Tailscale
+ - value: openvpn
+ description: OpenVPN (Deprecated)
+ - value: wireguard
+ description: Wireguard (Deprecated)
+ - variable: openvpn
+ label: OpenVPN Settings
+ schema:
+ type: dict
+ show_if: [["type", "=", "openvpn"]]
+ attrs:
+ - variable: username
+ label: Authentication Username (Optional)
+ description: Authentication Username, Optional
+ schema:
+ type: string
+ default: ""
+ - variable: password
+ label: Authentication Password
+ description: Authentication Credentials
+ schema:
+ type: string
+ show_if: [["username", "!=", ""]]
+ default: ""
+ required: true
+ - variable: tailscale
+ label: Tailscale Settings
+ schema:
+ type: dict
+ show_if: [["type", "=", "tailscale"]]
+ attrs:
+ - variable: authkey
+ label: Authentication Key
+ description: Provide an auth key to automatically authenticate the node as your user account.
+ schema:
+ type: string
+ private: true
+ default: ""
+ - variable: auth_once
+ label: Auth Once
+ description: Only attempt to log in if not already logged in.
+ schema:
+ type: boolean
+ default: true
+ - variable: accept_dns
+ label: Accept DNS
+ description: Accept DNS configuration from the admin console.
+ schema:
+ type: boolean
+ default: false
+ - variable: userspace
+ label: Userspace
+ description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device.
+ schema:
+ type: boolean
+ default: false
+ - variable: routes
+ label: Routes
+ description: Expose physical subnet routes to your entire Tailscale network.
+ schema:
+ type: string
+ default: ""
+ - variable: dest_ip
+ label: Destination IP
+ description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched.
+ schema:
+ type: string
+ default: ""
+ - variable: sock5_server
+ label: Sock5 Server
+ description: The address on which to listen for SOCKS5 proxying into the tailscale net.
+ schema:
+ type: string
+ default: ""
+ - variable: outbound_http_proxy_listen
+ label: Outbound HTTP Proxy Listen
+ description: The address on which to listen for HTTP proxying into the tailscale net.
+ schema:
+ type: string
+ default: ""
+ - variable: extra_args
+ label: Extra Args
+ description: Extra Args
+ schema:
+ type: string
+ default: ""
+ - variable: daemon_extra_args
+ label: Tailscale Daemon Extra Args
+ description: Tailscale Daemon Extra Args
+ schema:
+ type: string
+ default: ""
+ - variable: killSwitch
+ label: Enable Killswitch
+ schema:
+ type: boolean
+ show_if: [["type", "!=", "disabled"]]
+ default: true
+ - variable: excludedNetworks_IPv4
+ label: Killswitch Excluded IPv4 networks
+ description: List of Killswitch Excluded IPv4 Addresses
+ schema:
+ type: list
+ show_if: [["type", "!=", "disabled"]]
+ default: []
+ items:
+ - variable: networkv4
+ label: IPv4 Network
+ schema:
+ type: string
+ required: true
+ - variable: excludedNetworks_IPv6
+ label: Killswitch Excluded IPv6 networks
+ description: "List of Killswitch Excluded IPv6 Addresses"
+ schema:
+ type: list
+ show_if: [["type", "!=", "disabled"]]
+ default: []
+ items:
+ - variable: networkv6
+ label: IPv6 Network
+ schema:
+ type: string
+ required: true
+ - variable: configFile
+ label: VPN Config File Location
+ schema:
+ type: string
+ show_if: [["type", "!=", "disabled"]]
+ default: ""
+
+ - variable: envList
+ label: VPN Environment Variables
+ schema:
+ type: list
+ show_if: [["type", "!=", "disabled"]]
+ default: []
+ items:
+ - variable: envItem
+ label: Environment Variable
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: value
+ label: Value
+ schema:
+ type: string
+ required: true
+ - variable: docs
+ group: Documentation
+ label: Please read the documentation at https://truecharts.org
+ description: Please read the documentation at
+
https://truecharts.org
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: confirmDocs
+ label: I have checked the documentation
+ schema:
+ type: boolean
+ default: true
+ - variable: donateNag
+ group: Documentation
+ label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor
+ description: Please consider supporting TrueCharts, see
+
https://truecharts.org/sponsor
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: confirmDonate
+ label: I have considered donating
+ schema:
+ type: boolean
+ default: true
+ hidden: true
diff --git a/enterprise/traefik/17.0.28/templates/NOTES.txt b/enterprise/traefik/17.0.28/templates/NOTES.txt
new file mode 100644
index 00000000000..efcb74cb772
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/enterprise/traefik/17.0.28/templates/_args.tpl b/enterprise/traefik/17.0.28/templates/_args.tpl
new file mode 100644
index 00000000000..cf1e35a1d49
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/_args.tpl
@@ -0,0 +1,182 @@
+{{/* Define the args */}}
+{{- define "traefik.args" -}}
+args:
+ {{/* merge all ports */}}
+ {{- $ports := dict }}
+ {{- range $.Values.service }}
+ {{- range $name, $value := .ports }}
+ {{- $_ := set $ports $name $value }}
+ {{- end }}
+ {{- end }}
+ {{/* start of actual arguments */}}
+ {{- with .Values.globalArguments }}
+ {{- range . }}
+ - {{ . | quote }}
+ {{- end }}
+ {{- end }}
+ {{- range $name, $config := $ports }}
+ {{- if $config }}
+ {{- if or ( eq $config.protocol "http" ) ( eq $config.protocol "https" ) ( eq $config.protocol "tcp" ) }}
+ {{- $_ := set $config "protocol" "tcp" }}
+ {{- end }}
+ - "--entryPoints.{{$name}}.address=:{{ $config.port }}/{{ default "tcp" $config.protocol | lower }}"
+ {{- end }}
+ {{- end }}
+ - "--api.dashboard=true"
+ - "--ping=true"
+ {{- if .Values.traefikMetrics }}
+ {{- if .Values.traefikMetrics.datadog }}
+ - "--metrics.datadog=true"
+ - "--metrics.datadog.address={{ .Values.traefikMetrics.datadog.address }}"
+ {{- end }}
+ {{- if .Values.traefikMetrics.influxdb }}
+ - "--metrics.influxdb=true"
+ - "--metrics.influxdb.address={{ .Values.traefikMetrics.influxdb.address }}"
+ - "--metrics.influxdb.protocol={{ .Values.traefikMetrics.influxdb.protocol }}"
+ {{- end }}
+ {{- if .Values.traefikMetrics.statsd }}
+ - "--metrics.statsd=true"
+ - "--metrics.statsd.address={{ .Values.traefikMetrics.statsd.address }}"
+ {{- if or .Values.traefikMetrics.prometheus }}
+ - "--metrics.prometheus=true"
+ - "--metrics.prometheus.entrypoint=metrics"
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- if or .Values.metrics.main.enabled }}
+ - "--metrics.prometheus=true"
+ - "--metrics.prometheus.entrypoint=metrics"
+ {{- end }}
+ {{- if .Values.providers.kubernetesCRD.enabled }}
+ - "--providers.kubernetescrd"
+ {{- end }}
+ {{- if .Values.providers.kubernetesIngress.enabled }}
+ - "--providers.kubernetesingress"
+ {{- if .Values.providers.kubernetesIngress.publishedService.enabled }}
+ - "--providers.kubernetesingress.ingressendpoint.publishedservice={{ template "providers.kubernetesIngress.publishedServicePath" . }}"
+ {{- end }}
+ {{- if .Values.providers.kubernetesIngress.labelSelector }}
+ - "--providers.kubernetesingress.labelSelector={{ .Values.providers.kubernetesIngress.labelSelector }}"
+ {{- end }}
+ {{- end }}
+ {{- if and .Values.rbac.enabled .Values.rbac.namespaced }}
+ {{- if .Values.providers.kubernetesCRD.enabled }}
+ - "--providers.kubernetescrd.namespaces={{ template "providers.kubernetesCRD.namespaces" . }}"
+ {{- end }}
+ {{- if .Values.providers.kubernetesIngress.enabled }}
+ - "--providers.kubernetesingress.namespaces={{ template "providers.kubernetesIngress.namespaces" . }}"
+ {{- end }}
+ {{- end }}
+ {{- if .Values.ingressClass.enabled }}
+ - "--providers.kubernetesingress.ingressclass={{ .Release.Name }}"
+ {{- end }}
+ {{- range $entrypoint, $config := $ports }}
+ {{/* add args for proxyProtocol support */}}
+ {{- if $config.proxyProtocol }}
+ {{- if $config.proxyProtocol.enabled }}
+ {{- if $config.proxyProtocol.insecureMode }}
+ - "--entrypoints.{{ $entrypoint }}.proxyProtocol.insecure"
+ {{- end }}
+ {{- if not ( empty $config.proxyProtocol.trustedIPs ) }}
+ - "--entrypoints.{{ $entrypoint }}.proxyProtocol.trustedIPs={{ join "," $config.proxyProtocol.trustedIPs }}"
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{/* add args for forwardedHeaders support */}}
+ {{- if $config.forwardedHeaders.enabled }}
+ {{- if not ( empty $config.forwardedHeaders.trustedIPs ) }}
+ - "--entrypoints.{{ $entrypoint }}.forwardedHeaders.trustedIPs={{ join "," $config.forwardedHeaders.trustedIPs }}"
+ {{- end }}
+ {{- if $config.forwardedHeaders.insecureMode }}
+ - "--entrypoints.{{ $entrypoint }}.forwardedHeaders.insecure"
+ {{- end }}
+ {{- end }}
+ {{/* end forwardedHeaders configuration */}}
+ {{- if $config.redirectTo }}
+ {{- $toPort := index $ports $config.redirectTo }}
+ - "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.to=:{{ $toPort.port }}"
+ - "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.scheme=https"
+ {{- else if $config.redirectPort }}
+ {{ if gt $config.redirectPort 0.0 }}
+ - "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.to=:{{ $config.redirectPort }}"
+ - "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.scheme=https"
+ {{- end }}
+ {{- end }}
+ {{- if or ( $config.tls ) ( eq $config.protocol "https" ) }}
+ {{- if or ( $config.tls.enabled ) ( eq $config.protocol "https" ) }}
+ - "--entrypoints.{{ $entrypoint }}.http.tls=true"
+ {{- if $config.tls.options }}
+ - "--entrypoints.{{ $entrypoint }}.http.tls.options={{ $config.tls.options }}"
+ {{- end }}
+ {{- if $config.tls.certResolver }}
+ - "--entrypoints.{{ $entrypoint }}.http.tls.certResolver={{ $config.tls.certResolver }}"
+ {{- end }}
+ {{- if $config.tls.domains }}
+ {{- range $index, $domain := $config.tls.domains }}
+ {{- if $domain.main }}
+ - "--entrypoints.{{ $entrypoint }}.http.tls.domains[{{ $index }}].main={{ $domain.main }}"
+ {{- end }}
+ {{- if $domain.sans }}
+ - "--entrypoints.{{ $entrypoint }}.http.tls.domains[{{ $index }}].sans={{ join "," $domain.sans }}"
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.logs }}
+ - "--log.format={{ .general.format }}"
+ {{- if ne .general.level "ERROR" }}
+ - "--log.level={{ .general.level | upper }}"
+ {{- end }}
+ {{- if .access.enabled }}
+ - "--accesslog=true"
+ - "--accesslog.format={{ .access.format }}"
+ {{- if .access.bufferingsize }}
+ - "--accesslog.bufferingsize={{ .access.bufferingsize }}"
+ {{- end }}
+ {{- if .access.filters }}
+ {{- if .access.filters.statuscodes }}
+ - "--accesslog.filters.statuscodes={{ .access.filters.statuscodes }}"
+ {{- end }}
+ {{- if .access.filters.retryattempts }}
+ - "--accesslog.filters.retryattempts"
+ {{- end }}
+ {{- if .access.filters.minduration }}
+ - "--accesslog.filters.minduration={{ .access.filters.minduration }}"
+ {{- end }}
+ {{- end }}
+ - "--accesslog.fields.defaultmode={{ .access.fields.general.defaultmode }}"
+ {{- range $fieldname, $fieldaction := .access.fields.general.names }}
+ - "--accesslog.fields.names.{{ $fieldname }}={{ $fieldaction }}"
+ {{- end }}
+ - "--accesslog.fields.headers.defaultmode={{ .access.fields.headers.defaultmode }}"
+ {{- range $fieldname, $fieldaction := .access.fields.headers.names }}
+ - "--accesslog.fields.headers.names.{{ $fieldname }}={{ $fieldaction }}"
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{/* theme.park */}}
+ {{- if .Values.middlewares.themePark }}
+ - "--experimental.plugins.traefik-themepark.modulename=github.com/packruler/traefik-themepark"
+ - "--experimental.plugins.traefik-themepark.version={{ .Values.middlewares.themeParkVersion }}"
+ {{- end }}
+ {{/* End of theme.park */}}
+ {{/* GeoBlock */}}
+ {{- if .Values.middlewares.geoBlock }}
+ - "--experimental.plugins.GeoBlock.modulename=github.com/PascalMinder/geoblock"
+ - "--experimental.plugins.GeoBlock.version={{ .Values.middlewares.geoBlockVersion }}"
+ {{- end }}
+ {{/* End of GeoBlock */}}
+ {{/* RealIP */}}
+ {{- if .Values.middlewares.realIP }}
+ - "--experimental.plugins.traefik-real-ip.modulename=github.com/soulbalz/traefik-real-ip"
+ - "--experimental.plugins.traefik-real-ip.version={{ .Values.middlewares.realIPVersion }}"
+ {{- end }}
+ {{/* End of RealIP */}}
+ {{- with .Values.additionalArguments }}
+ {{- range . }}
+ - {{ . | quote }}
+ {{- end }}
+ {{- end }}
+{{- end -}}
diff --git a/enterprise/traefik/17.0.28/templates/_helpers.tpl b/enterprise/traefik/17.0.28/templates/_helpers.tpl
new file mode 100644
index 00000000000..1345dcea39a
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/_helpers.tpl
@@ -0,0 +1,22 @@
+{{/*
+Construct the path for the providers.kubernetesingress.ingressendpoint.publishedservice.
+By convention this will simply use the / 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 "tc.v1.common.lib.chart.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/enterprise/traefik/17.0.28/templates/_ingressclass.tpl b/enterprise/traefik/17.0.28/templates/_ingressclass.tpl
new file mode 100644
index 00000000000..004d4a6dcda
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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 "tc.v1.common.lib.metadata.allLabels" . | nindent 4 }}
+ name: {{ .Release.Name }}
+spec:
+ controller: traefik.io/ingress-controller
+{{- end }}
+{{- end }}
diff --git a/enterprise/traefik/17.0.28/templates/_ingressroute.tpl b/enterprise/traefik/17.0.28/templates/_ingressroute.tpl
new file mode 100644
index 00000000000..6599ceb6e2b
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/_ingressroute.tpl
@@ -0,0 +1,34 @@
+{{/* Define the ingressRoute */}}
+{{- define "traefik.ingressRoute" -}}
+{{ if .Values.ingressRoute.dashboard.enabled }}
+
+{{- $ingressRouteLabels := .Values.ingressRoute.dashboard.labels -}}
+{{- $ingressRouteAnnotations := .Values.ingressRoute.dashboard.annotations -}}
+
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: IngressRoute
+metadata:
+ name: {{ include "tc.v1.common.lib.chart.names.fullname" . }}-dashboard
+ {{- $labels := (mustMerge ($ingressRouteLabels | default dict) (include "tc.v1.common.lib.metadata.allLabels" $ | fromYaml)) -}}
+ {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "labels" $labels) | trim) }}
+ labels:
+ {{- . | nindent 4 }}
+ {{- end }}
+ {{- $annotations := (mustMerge ($ingressRouteAnnotations | default dict) (include "tc.v1.common.lib.metadata.allAnnotations" $ | fromYaml)) -}}
+ {{- with (include "tc.v1.common.lib.metadata.render" (dict "rootCtx" $ "annotations" $annotations) | trim) }}
+ annotations:
+ {{- . | nindent 4 }}
+ {{- end }}
+
+spec:
+ entryPoints:
+ - main
+ routes:
+ - match: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
+ kind: Rule
+ services:
+ - name: api@internal
+ kind: TraefikService
+{{ end }}
+{{- end -}}
diff --git a/enterprise/traefik/17.0.28/templates/_portalhook.tpl b/enterprise/traefik/17.0.28/templates/_portalhook.tpl
new file mode 100644
index 00000000000..e3586c5d4e9
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/_tlsoptions.tpl b/enterprise/traefik/17.0.28/templates/_tlsoptions.tpl
new file mode 100644
index 00000000000..3e5aad3bee9
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/common.yaml b/enterprise/traefik/17.0.28/templates/common.yaml
new file mode 100644
index 00000000000..d70a9887a47
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/common.yaml
@@ -0,0 +1,23 @@
+{{/* Make sure all variables are set properly */}}
+{{- include "tc.v1.common.loader.init" . }}
+
+{{- $newArgs := (include "traefik.args" . | fromYaml) }}
+{{- $_ := set .Values "newArgs" $newArgs -}}
+{{- $mergedargs := concat $.Values.workload.main.podSpec.containers.main.args .Values.newArgs.args }}
+{{- $_ := set $.Values.workload.main.podSpec.containers.main "args" $mergedargs -}}
+
+{{- include "traefik.portalhook" . }}
+{{- include "traefik.tlsOptions" . }}
+{{- include "traefik.ingressRoute" . }}
+{{- include "traefik.ingressClass" . }}
+
+{{- with .Values.ingress -}}
+ {{- with .main -}}
+ {{- if .enabled -}}
+ {{- $_ := set $.Values.portal.open.override "protocol" "https" -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{/* Render the templates */}}
+{{ include "tc.v1.common.loader.apply" . }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/addPrefix.yaml b/enterprise/traefik/17.0.28/templates/middlewares/addPrefix.yaml
new file mode 100644
index 00000000000..233b23834c3
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/addPrefix.yaml
@@ -0,0 +1,17 @@
+{{- $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.addPrefix }}
+
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: {{ $middlewareData.name }}
+ namespace: {{ $namespace }}
+spec:
+ addPrefix:
+ prefix: {{ $middlewareData.prefix }}
+{{- end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/basic-middleware.yaml b/enterprise/traefik/17.0.28/templates/middlewares/basic-middleware.yaml
new file mode 100644
index 00000000000..9ba8e5c5d93
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/basic-middleware.yaml
@@ -0,0 +1,62 @@
+{{- $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: 600
+ burst: 400
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: basic-secure-headers
+ namespace: {{ $namespace }}
+spec:
+ headers:
+ accessControlAllowMethods:
+ - GET
+ - OPTIONS
+ - HEAD
+ - PUT
+ accessControlMaxAge: 100
+ stsSeconds: 63072000
+ # stsIncludeSubdomains: false
+ # stsPreload: false
+ forceSTSHeader: true
+ contentTypeNosniff: true
+ browserXssFilter: true
+ referrerPolicy: same-origin
+ customRequestHeaders:
+ X-Forwarded-Proto: "https"
+ customResponseHeaders:
+ 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/enterprise/traefik/17.0.28/templates/middlewares/basicauth.yaml b/enterprise/traefik/17.0.28/templates/middlewares/basicauth.yaml
new file mode 100644
index 00000000000..ccb541742f0
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/middlewares/chain.yaml b/enterprise/traefik/17.0.28/templates/middlewares/chain.yaml
new file mode 100644
index 00000000000..f87994f7956
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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, $middleware := .middlewares }}
+ - name: {{ printf "%v-%v@%v" $namespace $middleware "kubernetescrd" }}
+ {{ end }}
+{{ end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/forwardauth.yaml b/enterprise/traefik/17.0.28/templates/middlewares/forwardauth.yaml
new file mode 100644
index 00000000000..4bdefbd5c01
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/forwardauth.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.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 }}
+ {{- with $middlewareData.tls }}
+ tls:
+ insecureSkipVerify: {{ .insecureSkipVerify | default false }}
+ {{- end }}
+{{ end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/geoblock.yaml b/enterprise/traefik/17.0.28/templates/middlewares/geoblock.yaml
new file mode 100644
index 00000000000..be21bcf57b6
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/geoblock.yaml
@@ -0,0 +1,35 @@
+{{- $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.geoBlock }}
+
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: {{ $middlewareData.name }}
+ namespace: {{ $namespace }}
+spec:
+ plugin:
+ GeoBlock:
+ allowLocalRequests: {{ $middlewareData.allowLocalRequests }}
+ logLocalRequests: {{ $middlewareData.logLocalRequests }}
+ logAllowedRequests: {{ $middlewareData.logAllowedRequests }}
+ logApiRequests: {{ $middlewareData.logApiRequests }}
+ api: {{ $middlewareData.api }}
+ apiTimeoutMs: {{ $middlewareData.apiTimeoutMs }}
+ cacheSize: {{ $middlewareData.cacheSize }}
+ forceMonthlyUpdate: {{ $middlewareData.forceMonthlyUpdate }}
+ allowUnknownCountries: {{ $middlewareData.allowUnknownCountries }}
+ unknownCountryApiResponse: {{ $middlewareData.unknownCountryApiResponse }}
+ blackListMode: {{ $middlewareData.blackListMode }}
+ {{- if not $middlewareData.countries }}
+ {{- fail "You have to define at least one country..." }}
+ {{- end }}
+ countries:
+ {{- range $middlewareData.countries }}
+ - {{ . }}
+ {{- end }}
+{{- end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/ipwhitelist.yaml b/enterprise/traefik/17.0.28/templates/middlewares/ipwhitelist.yaml
new file mode 100644
index 00000000000..1179245017e
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/middlewares/ratelimit.yaml b/enterprise/traefik/17.0.28/templates/middlewares/ratelimit.yaml
new file mode 100644
index 00000000000..144b9d8bf38
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/middlewares/real-ip.yaml b/enterprise/traefik/17.0.28/templates/middlewares/real-ip.yaml
new file mode 100644
index 00000000000..2dd1ae030a4
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/real-ip.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.realIP }}
+
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: {{ $middlewareData.name }}
+ namespace: {{ $namespace }}
+spec:
+ plugin:
+ traefik-real-ip:
+ excludednets:
+ {{- range $middlewareData.excludedNetworks }}
+ - {{ . | quote }}
+ {{- end }}
+{{- end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/redirectScheme.yaml b/enterprise/traefik/17.0.28/templates/middlewares/redirectScheme.yaml
new file mode 100644
index 00000000000..f2413f84e19
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/middlewares/redirectregex.yaml b/enterprise/traefik/17.0.28/templates/middlewares/redirectregex.yaml
new file mode 100644
index 00000000000..46e3e724dd6
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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.permanent }}
+{{ end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/stripPrefixRegex.yaml b/enterprise/traefik/17.0.28/templates/middlewares/stripPrefixRegex.yaml
new file mode 100644
index 00000000000..007c166ff39
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/stripPrefixRegex.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.stripPrefixRegex }}
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: {{ $middlewareData.name }}
+ namespace: {{ $namespace }}
+spec:
+ stripPrefixRegex:
+ regex:
+ {{- range $middlewareData.regex }}
+ - {{ . | quote }}
+ {{- end }}
+{{ end }}
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/tc-chains.yaml b/enterprise/traefik/17.0.28/templates/middlewares/tc-chains.yaml
new file mode 100644
index 00000000000..409766daa89
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/tc-chains.yaml
@@ -0,0 +1,29 @@
+{{- $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-opencors-chain
+ namespace: {{ $namespace }}
+spec:
+ chain:
+ middlewares:
+ - name: basic-ratelimit
+ - name: tc-opencors-headers
+ - name: compress
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: tc-closedcors-chain
+ namespace: {{ $namespace }}
+spec:
+ chain:
+ middlewares:
+ - name: basic-ratelimit
+ - name: tc-closedcors-headers
+ - name: compress
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/tc-headers.yaml b/enterprise/traefik/17.0.28/templates/middlewares/tc-headers.yaml
new file mode 100644
index 00000000000..a0462f1fd73
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/tc-headers.yaml
@@ -0,0 +1,62 @@
+{{- $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-opencors-headers
+ namespace: {{ $namespace }}
+spec:
+ headers:
+ accessControlAllowHeaders:
+ - '*'
+ accessControlAllowMethods:
+ - GET
+ - OPTIONS
+ - HEAD
+ - PUT
+ - POST
+ accessControlAllowOriginList:
+ - '*'
+ accessControlMaxAge: 100
+ browserXssFilter: true
+ contentTypeNosniff: true
+ customRequestHeaders:
+ X-Forwarded-Proto: https
+ customResponseHeaders:
+ server: ""
+ forceSTSHeader: true
+ referrerPolicy: same-origin
+ sslForceHost: true
+ sslRedirect: true
+ stsSeconds: 63072000
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: tc-closedcors-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:
+ server: ''
diff --git a/enterprise/traefik/17.0.28/templates/middlewares/tc-nextcloud.yaml b/enterprise/traefik/17.0.28/templates/middlewares/tc-nextcloud.yaml
new file mode 100644
index 00000000000..6a3019d56c5
--- /dev/null
+++ b/enterprise/traefik/17.0.28/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/enterprise/traefik/17.0.28/templates/middlewares/theme-park.yaml b/enterprise/traefik/17.0.28/templates/middlewares/theme-park.yaml
new file mode 100644
index 00000000000..92a4257e279
--- /dev/null
+++ b/enterprise/traefik/17.0.28/templates/middlewares/theme-park.yaml
@@ -0,0 +1,26 @@
+{{- $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.themePark }}
+
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: Middleware
+metadata:
+ name: {{ $middlewareData.name }}
+ namespace: {{ $namespace }}
+spec:
+ plugin:
+ traefik-themepark:
+ app: {{ $middlewareData.appName }}
+ theme: {{ $middlewareData.themeName }}
+ baseUrl: {{ $middlewareData.baseUrl }}
+ {{- if $middlewareData.addons }}
+ addons:
+ {{- range $middlewareData.addons }}
+ - {{ . | quote }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/enterprise/traefik/17.0.28/values.yaml b/enterprise/traefik/17.0.28/values.yaml
new file mode 100644
index 00000000000..e69de29bb2d