diff --git a/stable/immich/6.0.0/CHANGELOG.md b/stable/immich/6.0.0/CHANGELOG.md
new file mode 100644
index 0000000000..b8399f3a80
--- /dev/null
+++ b/stable/immich/6.0.0/CHANGELOG.md
@@ -0,0 +1,99 @@
+**Important:**
+*for the complete changelog, please refer to the website*
+
+
+
+
+## [immich-6.0.0](https://github.com/truecharts/charts/compare/immich-5.0.16...immich-6.0.0) (2023-05-13)
+
+### Feat
+
+- BREAKING CHANGE - port to new common + multi-pod ([#8801](https://github.com/truecharts/charts/issues/8801))
+
+ ### Fix
+
+- already adapt questions.yaml GUI to prevent tests from needlessly failing for unported charts ([#8720](https://github.com/truecharts/charts/issues/8720))
+
+
+
+
+## [immich-5.0.16](https://github.com/truecharts/charts/compare/immich-5.0.15...immich-5.0.16) (2023-02-27)
+
+### Chore
+
+- update helm general non-major ([#7725](https://github.com/truecharts/charts/issues/7725))
+
+
+
+
+## [immich-5.0.15](https://github.com/truecharts/charts/compare/immich-5.0.14...immich-5.0.15) (2023-02-24)
+
+### Chore
+
+- update immich to v1.49.0 (minor) ([#7487](https://github.com/truecharts/charts/issues/7487))
+
+
+
+
+## [immich-5.0.14](https://github.com/truecharts/charts/compare/immich-5.0.13...immich-5.0.14) (2023-02-20)
+
+### Chore
+
+- update immich to v1.47.3
+
+
+
+
+## [immich-5.0.13](https://github.com/truecharts/charts/compare/immich-5.0.12...immich-5.0.13) (2023-02-19)
+
+### Chore
+
+- update helm general non-major
+
+
+
+
+## [immich-5.0.12](https://github.com/truecharts/charts/compare/immich-5.0.11...immich-5.0.12) (2023-02-13)
+
+### Chore
+
+- update immich to v1.47.2
+
+
+
+
+## [immich-5.0.11](https://github.com/truecharts/charts/compare/immich-5.0.10...immich-5.0.11) (2023-02-10)
+
+### Chore
+
+- update immich to v1.46.1
+
+ ### Fix
+
+- ensure new helm deps repo is used in latest releases as well.
+
+
+
+
+## [immich-5.0.10](https://github.com/truecharts/charts/compare/immich-5.0.9...immich-5.0.10) (2023-02-10)
+
+### Chore
+
+- update immich to v1.46.1
+
+
+
+
+## [immich-5.0.9](https://github.com/truecharts/charts/compare/immich-5.0.8...immich-5.0.9) (2023-02-09)
+
+### Chore
+
+- update immich to v1.46.0
+
+
+
+
+## [immich-5.0.8](https://github.com/truecharts/charts/compare/immich-5.0.7...immich-5.0.8) (2023-02-07)
+
+### Chore
+
diff --git a/stable/immich/6.0.0/Chart.yaml b/stable/immich/6.0.0/Chart.yaml
new file mode 100644
index 0000000000..11e8a27e84
--- /dev/null
+++ b/stable/immich/6.0.0/Chart.yaml
@@ -0,0 +1,29 @@
+apiVersion: v2
+appVersion: "1.49.0"
+dependencies:
+ - name: common
+ repository: https://library-charts.truecharts.org
+ version: 12.6.6
+ - condition: redis.enabled
+ name: redis
+ repository: https://deps.truecharts.org
+ version: 6.0.39
+description: High performance self-hosted photo and video backup solution.
+home: https://truecharts.org/charts/stable/immich
+icon: https://truecharts.org/img/hotlink-ok/chart-icons/immich.png
+keywords:
+ - photos
+kubeVersion: ">=1.16.0-0"
+maintainers:
+ - email: info@truecharts.org
+ name: TrueCharts
+ url: https://truecharts.org
+name: immich
+sources:
+ - https://github.com/truecharts/charts/tree/master/charts/stable/immich
+ - https://github.com/immich-app/immich
+version: 6.0.0
+annotations:
+ truecharts.org/catagories: |
+ - media
+ truecharts.org/SCALE-support: "true"
diff --git a/stable/immich/6.0.0/LICENSE b/stable/immich/6.0.0/LICENSE
new file mode 100644
index 0000000000..33a8cbb23f
--- /dev/null
+++ b/stable/immich/6.0.0/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 "Blocky" 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/stable/immich/6.0.0/README.md b/stable/immich/6.0.0/README.md
new file mode 100644
index 0000000000..701942c352
--- /dev/null
+++ b/stable/immich/6.0.0/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/stable/)
+
+**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/stable/immich/6.0.0/app-changelog.md b/stable/immich/6.0.0/app-changelog.md
new file mode 100644
index 0000000000..431f3d637f
--- /dev/null
+++ b/stable/immich/6.0.0/app-changelog.md
@@ -0,0 +1,13 @@
+
+
+## [immich-6.0.0](https://github.com/truecharts/charts/compare/immich-5.0.16...immich-6.0.0) (2023-05-13)
+
+### Feat
+
+- BREAKING CHANGE - port to new common + multi-pod ([#8801](https://github.com/truecharts/charts/issues/8801))
+
+ ### Fix
+
+- already adapt questions.yaml GUI to prevent tests from needlessly failing for unported charts ([#8720](https://github.com/truecharts/charts/issues/8720))
+
+
\ No newline at end of file
diff --git a/stable/immich/6.0.0/app-readme.md b/stable/immich/6.0.0/app-readme.md
new file mode 100644
index 0000000000..faabed80fd
--- /dev/null
+++ b/stable/immich/6.0.0/app-readme.md
@@ -0,0 +1,8 @@
+High performance self-hosted photo and video backup solution.
+
+This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/immich](https://truecharts.org/charts/stable/immich)
+
+---
+
+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/stable/immich/6.0.0/charts/common-12.6.6.tgz b/stable/immich/6.0.0/charts/common-12.6.6.tgz
new file mode 100644
index 0000000000..250a939fa5
Binary files /dev/null and b/stable/immich/6.0.0/charts/common-12.6.6.tgz differ
diff --git a/stable/immich/6.0.0/charts/redis-6.0.39.tgz b/stable/immich/6.0.0/charts/redis-6.0.39.tgz
new file mode 100644
index 0000000000..6af371639e
Binary files /dev/null and b/stable/immich/6.0.0/charts/redis-6.0.39.tgz differ
diff --git a/stable/immich/6.0.0/ix_values.yaml b/stable/immich/6.0.0/ix_values.yaml
new file mode 100644
index 0000000000..6cc6d2537e
--- /dev/null
+++ b/stable/immich/6.0.0/ix_values.yaml
@@ -0,0 +1,109 @@
+image:
+ repository: tccr.io/truecharts/immich-server
+ tag: 1.55.1@sha256:c53b10695ed95b26a098e20788dcf0599b18f09d23dc54dd97717ed189370393
+ pullPolicy: IfNotPresent
+mlImage:
+ repository: tccr.io/truecharts/immich-ml
+ tag: 1.55.1@sha256:5253b8bedf856669ca0d260190640fccbe7d19a3ff56af61b70b1e587a76d383
+ pullPolicy: IfNotPresent
+webImage:
+ repository: tccr.io/truecharts/immich-web
+ tag: 1.55.1@sha256:9bd918a3c7e48e750867f16fc813913c5f00829fe0f187ec71168c789a3009db
+ pullPolicy: IfNotPresent
+proxyImage:
+ repository: tccr.io/truecharts/immich-proxy
+ tag: 1.55.1@sha256:794dd24898a12eb7ab91f6f7322743e0ef9fe1d224fbd62fb7ec1349246d55c4
+ pullPolicy: IfNotPresent
+typesenseImage:
+ repository: tccr.io/truecharts/immich-typesense
+ tag: v0.24.1@sha256:1e46a13a98670c98b483e0cbbf66f05aa418146e7edf447446ae72f3bb8477ac
+ pullPolicy: IfNotPresent
+
+securityContext:
+ container:
+ readOnlyRootFilesystem: false
+ runAsNonRoot: false
+ runAsUser: 0
+ runAsGroup: 0
+
+immich:
+ enable_ml: true
+ enable_typesense: true
+ public_login_page_message: Immich
+ disable_reverse_geocoding: false
+ reverse_geocoding_precision: 3
+ # simple | verbose
+ log_level: simple
+ mapbox_enable: false
+ mapbox_key: ""
+
+service:
+ main:
+ # Main service targets the proxy
+ targetSelector: proxy
+ ports:
+ main:
+ port: 10323
+ protocol: http
+ targetSelector: proxy
+ targetPort: 8080
+ server:
+ enabled: true
+ type: ClusterIP
+ # Server is the main container
+ targetSelector: main
+ ports:
+ server:
+ enabled: true
+ primary: true
+ port: 10001
+ protocol: http
+ targetSelector: main
+
+persistence:
+ uploads:
+ enabled: true
+ mountPath: /usr/src/app/upload
+ targetSelector:
+ # Main pod/container is server
+ main:
+ main: {}
+ microservices:
+ microservices: {}
+ machinelearning:
+ machinelearning: {}
+ mlcache:
+ enabled: true
+ type: emptyDir
+ targetSelector:
+ machinelearning:
+ machinelearning:
+ mountPath: /mlcache
+ microcache:
+ enabled: true
+ type: emptyDir
+ targetSelector:
+ microservices:
+ microservices:
+ mountPath: /microcache
+ typesense:
+ enabled: true
+ type: emptyDir
+ targetSelector:
+ typesense:
+ typesense:
+ mountPath: /typesensedata
+
+cnpg:
+ main:
+ enabled: true
+ user: immich
+ database: immich
+
+redis:
+ enabled: true
+ redisUsername: default
+
+portal:
+ open:
+ enabled: true
diff --git a/stable/immich/6.0.0/questions.yaml b/stable/immich/6.0.0/questions.yaml
new file mode 100644
index 0000000000..65e128098b
--- /dev/null
+++ b/stable/immich/6.0.0/questions.yaml
@@ -0,0 +1,1979 @@
+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"
+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: immich
+ group: App Configuration
+ label: Immich Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: public_login_page_message
+ label: Public Login Page Message
+ description: Custom message on the login page, should be written in HTML form.
+ schema:
+ type: string
+ default: ""
+ - variable: disable_reverse_geocoding
+ label: Disable Reverse Geocoding
+ schema:
+ type: boolean
+ default: false
+ - variable: reverse_geocoding_precision
+ label: Reverse Geocoding Precision
+ description: Reverse geocoding is done locally which has a small impact on memory usage. (Valid options 0 - 3)
+ schema:
+ type: int
+ show_if: [["disable_reverse_geocoding", "=", false]]
+ default: 3
+ - variable: mapbox_enable
+ label: Enable MapBox
+ schema:
+ type: boolean
+ default: false
+ - variable: mapbox_key
+ label: MaxBox Key
+ schema:
+ type: string
+ private: true
+ show_if: [["maxbox_enable", "=", false]]
+ default: ""
+ - variable: log_level
+ label: Log Level
+ schema:
+ type: string
+ default: simple
+ enum:
+ - value: simple
+ description: simple
+ - value: verbose
+ description: verbose
+ - variable: enable_ml
+ label: Enable Machine Learning Container
+ schema:
+ type: boolean
+ default: true
+ - variable: enable_typesense
+ label: Enable Typesense Container
+ schema:
+ type: boolean
+ default: true
+
+ - 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: expertPodOpts
+ label: "Expert - Pod Options"
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - 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: service
+ group: Networking and Services
+ label: Configure Service(s)
+ 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 Service Port Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: port
+ label: Port
+ description: This port exposes the container port on the service
+ schema:
+ type: int
+ default: 10323
+ required: true
+ - variable: serviceexpert
+ group: Networking and Services
+ label: Show Expert Config
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: hostNetwork
+ group: Networking and Services
+ label: Host-Networking (Complicated)
+ schema:
+ hidden: true
+ type: boolean
+ default: false
+ - variable: scaleExternalInterface
+ description: Add External Interfaces
+ label: Add external Interfaces
+ group: Networking
+ schema:
+ type: list
+ items:
+ - variable: interfaceConfiguration
+ description: Interface Configuration
+ label: Interface Configuration
+ schema:
+ type: dict
+ $ref:
+ - "normalize/interfaceConfiguration"
+ attrs:
+ - variable: hostInterface
+ description: Please Specify Host Interface
+ label: Host Interface
+ schema:
+ type: string
+ required: true
+ $ref:
+ - "definitions/interface"
+ - variable: ipam
+ description: Define how IP Address will be managed
+ label: IP Address Management
+ schema:
+ type: dict
+ required: true
+ attrs:
+ - variable: type
+ description: Specify type for IPAM
+ label: IPAM Type
+ schema:
+ type: string
+ required: true
+ enum:
+ - value: dhcp
+ description: Use DHCP
+ - value: static
+ description: Use Static IP
+ - variable: staticIPConfigurations
+ label: Static IP Addresses
+ schema:
+ type: list
+ show_if: [["type", "=", "static"]]
+ items:
+ - variable: staticIP
+ label: Static IP
+ schema:
+ type: ipaddr
+ cidr: true
+ - variable: staticRoutes
+ label: Static Routes
+ schema:
+ type: list
+ show_if: [["type", "=", "static"]]
+ items:
+ - variable: staticRouteConfiguration
+ label: Static Route Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: destination
+ label: Destination
+ schema:
+ type: ipaddr
+ cidr: true
+ required: true
+ - variable: gateway
+ label: Gateway
+ schema:
+ type: ipaddr
+ cidr: false
+ required: true
+ - variable: serviceList
+ label: Add Manual Custom Services
+ group: Networking and Services
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: serviceListEntry
+ label: Custom Service
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the service
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ default: ""
+ - 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)
+ - value: Simple
+ description: Deprecated CHANGE THIS
+ - 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: advancedsvcset
+ label: Show Advanced Service Settings
+ schema:
+ type: boolean
+ default: false
+ show_subquestions_if: true
+ subquestions:
+ - variable: externalIPs
+ label: "External IP's"
+ description: "External IP's"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: externalIP
+ label: External IP
+ schema:
+ type: string
+ - variable: ipFamilyPolicy
+ label: IP Family Policy
+ description: Specify the IP Policy
+ schema:
+ type: string
+ default: SingleStack
+ enum:
+ - value: SingleStack
+ description: SingleStack
+ - value: PreferDualStack
+ description: PreferDualStack
+ - value: RequireDualStack
+ description: RequireDualStack
+ - variable: ipFamilies
+ label: IP Families
+ description: (Advanced) The IP Families that should be used
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: ipFamily
+ label: IP Family
+ schema:
+ type: string
+ - variable: portsList
+ label: Additional Service Ports
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: portsListEntry
+ label: Custom ports
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the Port
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: name
+ label: Port Name
+ schema:
+ type: string
+ default: ""
+ - variable: protocol
+ label: Port Type
+ schema:
+ type: string
+ default: tcp
+ enum:
+ - value: http
+ description: HTTP
+ - value: https
+ description: HTTPS
+ - value: tcp
+ description: TCP
+ - value: udp
+ description: UDP
+ - variable: targetPort
+ label: Target Port
+ description: This port exposes the container port on the service
+ schema:
+ type: int
+ required: true
+ - variable: port
+ label: Container Port
+ schema:
+ type: int
+ required: true
+ - variable: persistence
+ label: Integrated Persistent Storage
+ description: Integrated Persistent Storage
+ group: Storage and Persistence
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: uploads
+ label: App Uploads Storage
+ description: Stores the Application Uploads.
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Type of Storage
+ description: Sets the persistence type, Anything other than PVC could break rollback!
+ schema:
+ type: string
+ default: pvc
+ enum:
+ - value: pvc
+ description: PVC
+ - value: hostPath
+ description: Host Path
+ - value: emptyDir
+ description: emptyDir
+ - value: nfs
+ description: NFS Share
+ - variable: server
+ label: NFS Server
+ schema:
+ show_if: [["type", "=", "nfs"]]
+ type: string
+ default: ""
+ - variable: path
+ label: Path on NFS Server
+ schema:
+ show_if: [["type", "=", "nfs"]]
+ type: string
+ default: ""
+ - variable: setPermissions
+ label: Automatic Permissions
+ description: Automatically set permissions on install
+ schema:
+ show_if: [["type", "=", "hostPath"]]
+ type: boolean
+ default: false
+ - variable: readOnly
+ label: Read Only
+ schema:
+ type: boolean
+ default: false
+ - variable: hostPath
+ label: Host Path
+ description: Path inside the container the storage is mounted
+ schema:
+ show_if: [["type", "=", "hostPath"]]
+ type: hostpath
+ - variable: medium
+ label: EmptyDir Medium
+ schema:
+ show_if: [["type", "=", "emptyDir"]]
+ type: string
+ default: ""
+ enum:
+ - value: ""
+ description: Default
+ - value: Memory
+ description: Memory
+ - variable: size
+ label: Size quotum of Storage (Do NOT REDUCE after installation)
+ description: This value can ONLY be INCREASED after the installation
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: string
+ default: 256Gi
+ - variable: persistenceList
+ label: Additional App Storage
+ group: Storage and Persistence
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: persistenceListEntry
+ label: Custom Storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable the storage
+ schema:
+ type: boolean
+ default: true
+ hidden: true
+ - variable: type
+ label: Type of Storage
+ description: Sets the persistence type, Anything other than PVC could break rollback!
+ schema:
+ type: string
+ default: hostPath
+ enum:
+ - value: pvc
+ description: PVC
+ - value: hostPath
+ description: Host Path
+ - value: emptyDir
+ description: emptyDir
+ - value: nfs
+ description: NFS Share
+ - variable: server
+ label: NFS Server
+ schema:
+ show_if: [["type", "=", "nfs"]]
+ type: string
+ default: ""
+ - variable: path
+ label: Path on NFS Server
+ schema:
+ show_if: [["type", "=", "nfs"]]
+ type: string
+ default: ""
+ - variable: setPermissions
+ label: Automatic Permissions
+ description: Automatically set permissions on install
+ schema:
+ show_if: [["type", "=", "hostPath"]]
+ type: boolean
+ default: false
+ - variable: readOnly
+ label: Read Only
+ schema:
+ type: boolean
+ default: false
+ - variable: hostPath
+ label: Host Path
+ description: Path inside the container the storage is mounted
+ schema:
+ show_if: [["type", "=", "hostPath"]]
+ type: hostpath
+ - variable: mountPath
+ label: Mount Path
+ description: Path inside the container the storage is mounted
+ schema:
+ type: string
+ default: ""
+ required: true
+ valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$'
+ - variable: medium
+ label: EmptyDir Medium
+ schema:
+ show_if: [["type", "=", "emptyDir"]]
+ type: string
+ default: ""
+ enum:
+ - value: ""
+ description: Default
+ - value: Memory
+ description: Memory
+ - variable: size
+ label: Size Quotum of Storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: string
+ default: 256Gi
+ - 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: 0
+ - variable: runAsGroup
+ label: "runAsGroup"
+ description: "The groupID of the user running the application"
+ schema:
+ type: int
+ default: 0
+ # 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: 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/stable/immich/6.0.0/templates/NOTES.txt b/stable/immich/6.0.0/templates/NOTES.txt
new file mode 100644
index 0000000000..efcb74cb77
--- /dev/null
+++ b/stable/immich/6.0.0/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/stable/immich/6.0.0/templates/_config.tpl b/stable/immich/6.0.0/templates/_config.tpl
new file mode 100644
index 0000000000..ee2c480668
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_config.tpl
@@ -0,0 +1,95 @@
+{{- define "immich.config" -}}
+ {{- $fname := (include "tc.v1.common.lib.chart.names.fullname" .) -}}
+ {{- $secretName := printf "%s-secret" $fname -}}
+ {{- $jwtSecret := randAlphaNum 32 -}}
+ {{- $typesenseKey := randAlphaNum 32 -}}
+ {{- with (lookup "v1" "Secret" .Release.Namespace $secretName) -}}
+ {{- $jwtSecret = index .data "JWT_SECRET" | b64dec -}}
+ {{- $typesenseKey = index .data "TYPESENSE_API_KEY" | b64dec -}}
+ {{- end }}
+
+configmap:
+ web-config:
+ enabled: true
+ data:
+ PORT: {{ .Values.service.web.ports.web.port | quote }}
+ server-config:
+ enabled: true
+ data:
+ {{/* User Defined */}}
+ DISABLE_REVERSE_GEOCODING: {{ .Values.immich.disable_reverse_geocoding | quote }}
+ REVERSE_GEOCODING_PRECISION: {{ .Values.immich.reverse_geocoding_precision | quote }}
+ ENABLE_MAPBOX: {{ .Values.immich.mapbox_enable | quote }}
+ SERVER_PORT: {{ .Values.service.server.ports.server.port | quote }}
+ micro-config:
+ enabled: true
+ data:
+ MICROSERVICES_PORT: {{ .Values.service.microservices.ports.microservices.port | quote }}
+ REVERSE_GEOCODING_DUMP_DIRECTORY: {{ .Values.persistence.microcache.targetSelector.microservices.microservices.mountPath }}
+ {{- if .Values.immich.enable_ml }}
+ ml-config:
+ enabled: true
+ data:
+ MACHINE_LEARNING_PORT: {{ .Values.service.machinelearning.ports.machinelearning.port | quote }}
+ TRANSFORMERS_CACHE: {{ .Values.persistence.mlcache.targetSelector.machinelearning.machinelearning.mountPath }}
+ {{- end }}
+ common-config:
+ enabled: true
+ data:
+ IMMICH_WEB_URL: {{ printf "http://%v-web:%v" $fname .Values.service.web.ports.web.port }}
+ IMMICH_SERVER_URL: {{ printf "http://%v-server:%v" $fname .Values.service.server.ports.server.port }}
+ {{- if .Values.immich.enable_ml }}
+ IMMICH_MACHINE_LEARNING_URL: {{ printf "http://%v-machinelearning:%v" $fname .Values.service.machinelearning.ports.machinelearning.port }}
+ {{- else }}
+ IMMICH_MACHINE_LEARNING_URL: "false"
+ {{- end }}
+ TYPESENSE_ENABLED: {{ .Values.immich.enable_typesense | quote }}
+ {{- if .Values.immich.enable_typesense }}
+ TYPESENSE_URL: {{ printf "http://%v-typesense:%v" $fname .Values.service.typesense.ports.typesense.port }}
+ TYPESENSE_PROTOCOL: http
+ TYPESENSE_HOST: {{ printf "%v-typesense" $fname }}
+ TYPESENSE_PORT: {{ .Values.service.typesense.ports.typesense.port | quote }}
+ {{- end }}
+ {{/*
+ Its unclear where this URL is being used, but poking in their code, seems to be used internally?
+ Its set to the value of IMMICH_SERVER_URL on their compose. If something doesnt work remotely,
+ This is the place to start looking
+ https://github.com/immich-app/immich/blob/b5d75e20167b92de12cc50a816da214779cb0807/web/src/api/api.ts#L55
+ */}}
+ PUBLIC_IMMICH_SERVER_URL: {{ printf "http://%v-server:%v" $fname .Values.service.server.ports.server.port }}
+ NODE_ENV: production
+ {{/* User Defined */}}
+ {{- with .Values.immich.public_login_page_message }}
+ PUBLIC_LOGIN_PAGE_MESSAGE: {{ . }}
+ {{- end }}
+ LOG_LEVEL: {{ .Values.immich.log_level }}
+
+secret:
+ typesense-secret:
+ enabled: true
+ data:
+ {{/* Secret Key */}}
+ TYPESENSE_API_KEY: {{ $typesenseKey }}
+ TYPESENSE_DATA_DIR: {{ .Values.persistence.typesense.targetSelector.typesense.typesense.mountPath }}
+ secret:
+ enabled: true
+ data:
+ {{/* Secret Key */}}
+ JWT_SECRET: {{ $jwtSecret }}
+ TYPESENSE_API_KEY: {{ $typesenseKey }}
+ {{- with .Values.immich.mapbox_key }}
+ MAPBOX_KEY: {{ . }}
+ {{- end }}
+ deps-secret:
+ enabled: true
+ data:
+ DB_USERNAME: {{ .Values.cnpg.main.user }}
+ DB_DATABASE_NAME: {{ .Values.cnpg.main.database }}
+ DB_HOSTNAME: {{ .Values.cnpg.main.creds.host }}
+ DB_PASSWORD: {{ .Values.cnpg.main.creds.password }}
+ DB_PORT: "5432"
+ REDIS_HOSTNAME: {{ .Values.redis.creds.plainhost }}
+ REDIS_PASSWORD: {{ .Values.redis.creds.redisPassword }}
+ REDIS_PORT: "6379"
+ REDIS_DBINDEX: "0"
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_machinelearning.tpl b/stable/immich/6.0.0/templates/_machinelearning.tpl
new file mode 100644
index 0000000000..82740d6a6c
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_machinelearning.tpl
@@ -0,0 +1,54 @@
+{{/* Define the machinelearning container */}}
+{{- define "immich.machinelearning" -}}
+enabled: true
+type: Deployment
+podSpec:
+ initContainers:
+ wait-server:
+ {{- include "immich.wait" (dict "variable" "IMMICH_SERVER_URL" "path" "server-info/ping") | nindent 6 }}
+ containers:
+ machinelearning:
+ enabled: true
+ primary: true
+ imageSelector: mlImage
+ envFrom:
+ - configMapRef:
+ name: common-config
+ - configMapRef:
+ name: server-config
+ - configMapRef:
+ name: ml-config
+ - secretRef:
+ name: deps-secret
+ - secretRef:
+ name: secret
+ probes:
+ readiness:
+ enabled: true
+ type: http
+ path: /ping
+ port: {{ .Values.service.machinelearning.ports.machinelearning.port }}
+ liveness:
+ enabled: true
+ type: http
+ path: /ping
+ port: {{ .Values.service.machinelearning.ports.machinelearning.port }}
+ startup:
+ enabled: true
+ type: http
+ path: /ping
+ port: {{ .Values.service.machinelearning.ports.machinelearning.port }}
+{{- end -}}
+
+{{- define "immich.machinelearning.service" -}}
+enabled: true
+type: ClusterIP
+targetSelector: machinelearning
+ports:
+ machinelearning:
+ enabled: true
+ primary: true
+ port: 10003
+ protocol: http
+ targetSelector: machinelearning
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_microservices.tpl b/stable/immich/6.0.0/templates/_microservices.tpl
new file mode 100644
index 0000000000..0f8807c9e3
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_microservices.tpl
@@ -0,0 +1,64 @@
+{{- define "immich.microservices" -}}
+enabled: true
+type: Deployment
+podSpec:
+ initContainers:
+ wait-server:
+ {{- include "immich.wait" (dict "variable" "IMMICH_SERVER_URL" "path" "server-info/ping") | nindent 6 }}
+ containers:
+ microservices:
+ enabled: true
+ primary: true
+ imageSelector: image
+ command: /bin/sh
+ args: ./start-microservices.sh
+ envFrom:
+ - secretRef:
+ name: secret
+ - secretRef:
+ name: deps-secret
+ - configMapRef:
+ name: common-config
+ - configMapRef:
+ name: server-config
+ - configMapRef:
+ name: micro-config
+ probes:
+ readiness:
+ enabled: true
+ type: exec
+ command:
+ - /bin/sh
+ - -c
+ - |
+ ps -a | grep -v grep | grep -q microservices
+ liveness:
+ enabled: true
+ type: exec
+ command:
+ - /bin/sh
+ - -c
+ - |
+ ps -a | grep -v grep | grep -q microservices
+ startup:
+ enabled: true
+ type: exec
+ command:
+ - /bin/sh
+ - -c
+ - |
+ ps -a | grep -v grep | grep -q microservices
+{{- end -}}
+
+{{- define "immich.microservices.service" -}}
+enabled: true
+type: ClusterIP
+targetSelector: microservices
+ports:
+ microservices:
+ enabled: true
+ primary: true
+ port: 10004
+ protocol: http
+ targetSelector: microservices
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_proxy.tpl b/stable/immich/6.0.0/templates/_proxy.tpl
new file mode 100644
index 0000000000..b2f73ed8fc
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_proxy.tpl
@@ -0,0 +1,32 @@
+{{- define "immich.proxy" -}}
+enabled: true
+type: Deployment
+podSpec:
+ initContainers:
+ wait-server:
+ {{- include "immich.wait" (dict "variable" "IMMICH_SERVER_URL" "path" "server-info/ping") | nindent 6 }}
+ containers:
+ proxy:
+ enabled: true
+ primary: true
+ imageSelector: proxyImage
+ envFrom:
+ - configMapRef:
+ name: common-config
+ probes:
+ readiness:
+ enabled: true
+ type: http
+ path: /api/server-info/ping
+ port: {{ .Values.service.main.ports.main.targetPort }}
+ liveness:
+ enabled: true
+ type: http
+ path: /api/server-info/ping
+ port: {{ .Values.service.main.ports.main.targetPort }}
+ startup:
+ enabled: true
+ type: http
+ path: /api/server-info/ping
+ port: {{ .Values.service.main.ports.main.targetPort }}
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_server.tpl b/stable/immich/6.0.0/templates/_server.tpl
new file mode 100644
index 0000000000..ad193260c2
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_server.tpl
@@ -0,0 +1,32 @@
+{{- define "immich.server" -}}
+enabled: true
+primary: true
+imageSelector: image
+command: /bin/sh
+args: ./start-server.sh
+envFrom:
+ - configMapRef:
+ name: server-config
+ - configMapRef:
+ name: common-config
+ - secretRef:
+ name: deps-secret
+ - secretRef:
+ name: secret
+probes:
+ liveness:
+ enabled: true
+ type: http
+ path: /server-info/ping
+ port: {{ .Values.service.server.ports.server.port }}
+ readiness:
+ enabled: true
+ type: http
+ path: /server-info/ping
+ port: {{ .Values.service.server.ports.server.port }}
+ startup:
+ enabled: true
+ type: http
+ path: /server-info/ping
+ port: {{ .Values.service.server.ports.server.port }}
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_typesense.tpl b/stable/immich/6.0.0/templates/_typesense.tpl
new file mode 100644
index 0000000000..5ab9c1bfc7
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_typesense.tpl
@@ -0,0 +1,46 @@
+{{/* Define the typesense container */}}
+{{- define "immich.typesense" -}}
+enabled: true
+type: Deployment
+podSpec:
+ containers:
+ typesense:
+ enabled: true
+ primary: true
+ imageSelector: typesenseImage
+ envFrom:
+ - secretRef:
+ name: typesense-secret
+ args:
+ - --api-port
+ - {{ .Values.service.typesense.ports.typesense.port | quote }}
+ probes:
+ readiness:
+ enabled: true
+ type: http
+ path: /health
+ port: {{ .Values.service.typesense.ports.typesense.port }}
+ liveness:
+ enabled: true
+ type: http
+ path: /health
+ port: {{ .Values.service.typesense.ports.typesense.port }}
+ startup:
+ enabled: true
+ type: http
+ path: /health
+ port: {{ .Values.service.typesense.ports.typesense.port }}
+{{- end -}}
+
+{{- define "immich.typesense.service" -}}
+enabled: true
+type: ClusterIP
+targetSelector: typesense
+ports:
+ typesense:
+ enabled: true
+ primary: true
+ port: 10002
+ protocol: http
+ targetSelector: typesense
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_wait.tpl b/stable/immich/6.0.0/templates/_wait.tpl
new file mode 100644
index 0000000000..27c8fef530
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_wait.tpl
@@ -0,0 +1,20 @@
+{{- define "immich.wait" -}}
+{{- $path := .path | default "" }}
+{{- $variable := .variable }}
+enabled: true
+type: init
+imageSelector: alpineImage
+envFrom:
+ - configMapRef:
+ name: common-config
+command:
+ - /bin/ash
+ - -c
+ - |
+ echo "Pinging [${{ $variable }}/{{ $path }}] until it is ready..."
+ until wget --spider --quiet "${{ $variable }}/{{ $path }}"; do
+ echo "Waiting for [${{ $variable }}/{{ $path }}] to be ready..."
+ sleep 2
+ done
+ echo "URL [${{ $variable }}/{{ $path }}] is ready!"
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/_web.tpl b/stable/immich/6.0.0/templates/_web.tpl
new file mode 100644
index 0000000000..09e2ecb858
--- /dev/null
+++ b/stable/immich/6.0.0/templates/_web.tpl
@@ -0,0 +1,52 @@
+{{/* Define the web container */}}
+{{- define "immich.web" -}}
+enabled: true
+type: Deployment
+podSpec:
+ initContainers:
+ wait-server:
+ {{- include "immich.wait" (dict "variable" "IMMICH_SERVER_URL" "path" "server-info/ping") | nindent 6 }}
+ containers:
+ web:
+ enabled: true
+ primary: true
+ imageSelector: webImage
+ command: /bin/sh
+ args: ./entrypoint.sh
+ envFrom:
+ - configMapRef:
+ name: common-config
+ - configMapRef:
+ name: web-config
+ - secretRef:
+ name: deps-secret
+ probes:
+ readiness:
+ enabled: true
+ type: http
+ path: /robots.txt
+ port: {{ .Values.service.web.ports.web.port }}
+ liveness:
+ enabled: true
+ type: http
+ path: /robots.txt
+ port: {{ .Values.service.web.ports.web.port }}
+ startup:
+ enabled: true
+ type: http
+ path: /robots.txt
+ port: {{ .Values.service.web.ports.web.port }}
+{{- end -}}
+
+{{- define "immich.web.service" -}}
+enabled: true
+type: ClusterIP
+targetSelector: web
+ports:
+ web:
+ enabled: true
+ primary: true
+ port: 10000
+ protocol: http
+ targetSelector: web
+{{- end -}}
diff --git a/stable/immich/6.0.0/templates/common.yaml b/stable/immich/6.0.0/templates/common.yaml
new file mode 100644
index 0000000000..bc788b4044
--- /dev/null
+++ b/stable/immich/6.0.0/templates/common.yaml
@@ -0,0 +1,36 @@
+{{/* Make sure all variables are set properly */}}
+{{- include "tc.v1.common.loader.init" . }}
+
+{{- $_ := set .Values.workload "proxy" (include "immich.proxy" . | fromYaml) -}}
+
+{{- $_ := set .Values.workload.main.podSpec.containers "main" (include "immich.server" . | fromYaml) -}}
+{{- if .Values.immich.enable_typesense -}}
+ {{- $_ := set .Values.workload.main.podSpec.initContainers "wait-typesense" (include "immich.wait" (dict "variable" "TYPESENSE_URL" "path" "health") | fromYaml) -}}
+{{- end -}}
+
+{{- $_ := set .Values.service "web" (include "immich.web.service" . | fromYaml) -}}
+{{- $_ := set .Values.workload "web" (include "immich.web" . | fromYaml) -}}
+
+{{- $_ := set .Values.service "microservices" (include "immich.microservices.service" . | fromYaml) -}}
+{{- $_ := set .Values.workload "microservices" (include "immich.microservices" . | fromYaml) -}}
+
+{{- if .Values.immich.enable_ml -}}
+ {{- $_ := set .Values.service "machinelearning" (include "immich.machinelearning.service" . | fromYaml) -}}
+ {{- $_ := set .Values.workload "machinelearning" (include "immich.machinelearning" . | fromYaml) -}}
+{{- end -}}
+
+{{- if .Values.immich.enable_typesense -}}
+ {{- $_ := set .Values.service "typesense" (include "immich.typesense.service" . | fromYaml) -}}
+ {{- $_ := set .Values.workload "typesense" (include "immich.typesense" . | fromYaml) -}}
+{{- end -}}
+
+{{/* Render configuration for immich
+ after services, as it has references
+*/}}
+{{- $config := include "immich.config" . | fromYaml -}}
+{{- if $config -}}
+ {{- $_ := mustMergeOverwrite .Values $config -}}
+{{- end -}}
+
+{{/* Render the templates */}}
+{{ include "tc.v1.common.loader.apply" . }}
diff --git a/stable/immich/6.0.0/values.yaml b/stable/immich/6.0.0/values.yaml
new file mode 100644
index 0000000000..e69de29bb2