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