From befdca49e1931afcd285d2dc55472c9dcc15ac56 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Mon, 22 Jan 2024 14:01:10 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/mealie/20.2.0/CHANGELOG.md | 99 + stable/mealie/20.2.0/Chart.yaml | 36 + stable/mealie/20.2.0/LICENSE | 106 + stable/mealie/20.2.0/README.md | 28 + stable/mealie/20.2.0/app-changelog.md | 3 + stable/mealie/20.2.0/app-readme.md | 8 + .../mealie/20.2.0/charts/common-17.2.28.tgz | Bin 0 -> 98029 bytes stable/mealie/20.2.0/ix_values.yaml | 107 + stable/mealie/20.2.0/questions.yaml | 3642 +++++++++++++++++ stable/mealie/20.2.0/templates/NOTES.txt | 1 + stable/mealie/20.2.0/templates/_secrets.tpl | 97 + stable/mealie/20.2.0/templates/common.yaml | 11 + stable/mealie/20.2.0/values.yaml | 0 13 files changed, 4138 insertions(+) create mode 100644 stable/mealie/20.2.0/CHANGELOG.md create mode 100644 stable/mealie/20.2.0/Chart.yaml create mode 100644 stable/mealie/20.2.0/LICENSE create mode 100644 stable/mealie/20.2.0/README.md create mode 100644 stable/mealie/20.2.0/app-changelog.md create mode 100644 stable/mealie/20.2.0/app-readme.md create mode 100644 stable/mealie/20.2.0/charts/common-17.2.28.tgz create mode 100644 stable/mealie/20.2.0/ix_values.yaml create mode 100644 stable/mealie/20.2.0/questions.yaml create mode 100644 stable/mealie/20.2.0/templates/NOTES.txt create mode 100644 stable/mealie/20.2.0/templates/_secrets.tpl create mode 100644 stable/mealie/20.2.0/templates/common.yaml create mode 100644 stable/mealie/20.2.0/values.yaml diff --git a/stable/mealie/20.2.0/CHANGELOG.md b/stable/mealie/20.2.0/CHANGELOG.md new file mode 100644 index 00000000000..c7f06a48acc --- /dev/null +++ b/stable/mealie/20.2.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [mealie-20.2.0](https://github.com/truecharts/charts/compare/mealie-20.1.9...mealie-20.2.0) (2024-01-22) + + +## [mealie-20.1.9](https://github.com/truecharts/charts/compare/mealie-20.1.8...mealie-20.1.9) (2024-01-21) + +### Chore + + + +- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) + + +## [mealie-20.1.8](https://github.com/truecharts/charts/compare/mealie-20.1.7...mealie-20.1.8) (2024-01-21) + +### Chore + + + +- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) + + +## [mealie-20.1.7](https://github.com/truecharts/charts/compare/mealie-20.1.6...mealie-20.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [mealie-20.1.6](https://github.com/truecharts/charts/compare/mealie-20.1.5...mealie-20.1.6) (2024-01-09) + +### Chore + + + +- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) + + +## [mealie-20.1.5](https://github.com/truecharts/charts/compare/mealie-20.1.4...mealie-20.1.5) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [mealie-20.1.4](https://github.com/truecharts/charts/compare/mealie-20.1.3...mealie-20.1.4) (2024-01-01) + +### Chore + + + +- increase common version for oci fixes + +- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) + + +## [mealie-20.1.3](https://github.com/truecharts/charts/compare/mealie-20.1.0...mealie-20.1.3) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- update container image common to v17.2.19[@4ebb688](https://github.com/4ebb688) by renovate ([#16733](https://github.com/truecharts/charts/issues/16733)) + +- update container image common to v17.2.18[@085ba3c](https://github.com/085ba3c) by renovate ([#16732](https://github.com/truecharts/charts/issues/16732)) + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + + +## [mealie-20.1.2](https://github.com/truecharts/charts/compare/mealie-20.1.0...mealie-20.1.2) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + diff --git a/stable/mealie/20.2.0/Chart.yaml b/stable/mealie/20.2.0/Chart.yaml new file mode 100644 index 00000000000..6d64db1f262 --- /dev/null +++ b/stable/mealie/20.2.0/Chart.yaml @@ -0,0 +1,36 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: utilities + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.0.0 +dependencies: + - name: common + version: 17.2.28 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Mealie is a self hosted recipe manager and meal planner with a RestAPI backend +home: https://truecharts.org/charts/stable/mealie +icon: https://truecharts.org/img/hotlink-ok/chart-icons/mealie.png +keywords: + - grocy +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: mealie +sources: + - https://github.com/mealie-recipes/mealie + - https://github.com/truecharts/charts/tree/master/charts/stable/mealie + - https://ghcr.io/mealie-recipes/mealie +type: application +version: 20.2.0 diff --git a/stable/mealie/20.2.0/LICENSE b/stable/mealie/20.2.0/LICENSE new file mode 100644 index 00000000000..33a8cbb23f0 --- /dev/null +++ b/stable/mealie/20.2.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/mealie/20.2.0/README.md b/stable/mealie/20.2.0/README.md new file mode 100644 index 00000000000..78a7815f5b7 --- /dev/null +++ b/stable/mealie/20.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: 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/mealie) + +**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/guides/scale-intro). +- 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/mealie/20.2.0/app-changelog.md b/stable/mealie/20.2.0/app-changelog.md new file mode 100644 index 00000000000..3d9da80b774 --- /dev/null +++ b/stable/mealie/20.2.0/app-changelog.md @@ -0,0 +1,3 @@ + + +## [mealie-20.2.0](https://github.com/truecharts/charts/compare/mealie-20.1.9...mealie-20.2.0) (2024-01-22) \ No newline at end of file diff --git a/stable/mealie/20.2.0/app-readme.md b/stable/mealie/20.2.0/app-readme.md new file mode 100644 index 00000000000..b8d1b98bcd7 --- /dev/null +++ b/stable/mealie/20.2.0/app-readme.md @@ -0,0 +1,8 @@ +Mealie is a self hosted recipe manager and meal planner with a RestAPI backend + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/mealie](https://truecharts.org/charts/stable/mealie) + +--- + +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/mealie/20.2.0/charts/common-17.2.28.tgz b/stable/mealie/20.2.0/charts/common-17.2.28.tgz new file mode 100644 index 0000000000000000000000000000000000000000..695e0d5cea93b36880b7021045bd1ef00dfe5915 GIT binary patch literal 98029 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 literal 0 HcmV?d00001 diff --git a/stable/mealie/20.2.0/ix_values.yaml b/stable/mealie/20.2.0/ix_values.yaml new file mode 100644 index 00000000000..cf4bff86220 --- /dev/null +++ b/stable/mealie/20.2.0/ix_values.yaml @@ -0,0 +1,107 @@ +image: + repository: ghcr.io/mealie-recipes/mealie + tag: v1.0.0@sha256:86eb67572f68e1a8d306e805d7a2677c751247bd84093f4304587d0b61094d26 + pullPolicy: IfNotPresent +mealie: + frontend: + theme: + light_primary: "#E58325" + light_accent: "#007A99" + light_secondary: "#973542" + light_success: "#43A047" + light_info: "#1976D2" + light_warning: "#FF6D00" + light_error: "#EF5350" + dark_primary: "#E58325" + dark_accent: "#007A99" + dark_secondary: "#973542" + dark_success: "#43A047" + dark_info: "#1976D2" + dark_warning: "#FF6D00" + dark_error: "#EF5350" + api: + general: + allow_signup: true + default_group: Home + base_url: "" + token_time: 48 + security: + max_login_attempts: 5 + user_lockout_time: 24 + smtp: + user: "" + password: "" + host: "" + port: 587 + from_name: Mealie + from_email: "" + # TLS | SSL | NONE + auth_strategy: TLS + webworkers: + workers_per_core: 1 + max_workers: 1 + web_concurrency: 1 + ldap: + auth_enabled: false + server_url: "" + tls_insecure: false + enable_starttls: false + tls_cacertfile: "" + base_dn: "" + query_bind: "" + query_password: "" + user_filter: "" + admin_filter: "" + id_attribute: uid + name_attribute: name + mail_attribute: mail +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + readiness: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + startup: + enabled: true + type: exec + command: + - python + - /app/mealie/scripts/healthcheck.py + envFrom: + - secretRef: + name: frontend + - secretRef: + name: api +service: + main: + ports: + main: + port: 10018 + protocol: http +persistence: + data: + enabled: true + targetSelector: + main: + main: + mountPath: /app/data +cnpg: + main: + enabled: true + user: mealie + database: mealie +portal: + open: + enabled: true diff --git a/stable/mealie/20.2.0/questions.yaml b/stable/mealie/20.2.0/questions.yaml new file mode 100644 index 00000000000..ac1aa2475d9 --- /dev/null +++ b/stable/mealie/20.2.0/questions.yaml @@ -0,0 +1,3642 @@ +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: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + - 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: mealie + group: App Configuration + label: Mealie Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: frontend + label: Mealie Frontend Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: theme + label: Theme + schema: + additional_attrs: true + type: dict + attrs: + - variable: light_primary + label: Light Primary + description: Light Theme Config Variable + schema: + type: string + default: "#E58325" + required: true + - variable: light_accent + label: Light Accent + description: Light Theme Config Variable + schema: + type: string + default: "#007A99" + required: true + - variable: light_secondary + label: Light Secondary + description: Light Theme Config Variable + schema: + type: string + default: "#973542" + required: true + - variable: light_success + label: Light Success + description: Light Theme Config Variable + schema: + type: string + default: "#43A047" + required: true + - variable: light_info + label: Light Info + description: Light Theme Config Variable + schema: + type: string + default: "#1976D2" + required: true + - variable: light_warning + label: Light Warning + description: Light Theme Config Variable + schema: + type: string + default: "#FF6D00" + required: true + - variable: light_error + label: Light Error + description: Light Theme Config Variable + schema: + type: string + default: "#EF5350" + required: true + - variable: dark_primary + label: Dark Primary + description: Dark Theme Config Variable + schema: + type: string + default: "#E58325" + required: true + - variable: dark_accent + label: Dark Accent + description: Dark Theme Config Variable + schema: + type: string + default: "#007A99" + required: true + - variable: dark_secondary + label: Dark Secondary + description: Dark Theme Config Variable + schema: + type: string + default: "#973542" + required: true + - variable: dark_success + label: Dark Success + description: Dark Theme Config Variable + schema: + type: string + default: "#43A047" + required: true + - variable: dark_info + label: Dark Info + description: Dark Theme Config Variable + schema: + type: string + default: "#1976D2" + required: true + - variable: dark_warning + label: Dark Warning + description: Dark Theme Config Variable + schema: + type: string + default: "#FF6D00" + required: true + - variable: dark_error + label: Dark Error + description: Dark Theme Config Variable + schema: + type: string + default: "#EF5350" + required: true + - variable: api + label: Mealie API Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: general + label: General + schema: + additional_attrs: true + type: dict + attrs: + - variable: base_url + label: Base URL + description: Used for Notifications + schema: + type: string + default: "" + - variable: allow_signup + label: Allow Sign up + description: Allow user sign-up without token + schema: + type: boolean + default: true + - variable: default_group + label: Default Group + description: The default group for users + schema: + type: string + default: Home + required: true + - variable: token_time + label: Token Time + description: The time in hours that a login/auth token is valid + schema: + type: int + default: 48 + required: true + - variable: security + label: Security + schema: + additional_attrs: true + type: dict + attrs: + - variable: max_login_attempts + label: Max Login Attempts + description: Maximum times a user can provide an invalid password before their account is locked + schema: + type: int + default: 5 + required: true + - variable: user_lockout_time + label: User Lockout Time + description: Time in hours for how long a users account is locked + schema: + type: int + default: 24 + required: true + - variable: webworkers + label: Web Workers + schema: + additional_attrs: true + type: dict + attrs: + - variable: workers_per_core + label: Workers Per Core + description: Set the number of workers to the number of CPU cores multiplied by this value. + schema: + type: int + default: 1 + required: true + - variable: max_workers + label: Max Workers + description: Set the maximum number of workers to use. Default is not set meaning unlimited. + schema: + type: int + default: 1 + required: true + - variable: web_concurrency + label: Web Concurrency + description: Override the automatic definition of number of workers. + schema: + type: int + default: 1 + required: true + - variable: smtp + label: SMTP + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: Host + description: Mail Host + schema: + type: string + default: "" + - variable: port + label: Port + description: Mail Port + schema: + type: int + show_if: [["host", "!=", ""]] + default: 587 + required: true + - variable: user + label: User + description: Mail User + schema: + type: string + show_if: [["host", "!=", ""]] + required: true + default: "" + - variable: password + label: Password + description: Mail Password + schema: + type: string + show_if: [["host", "!=", ""]] + private: true + required: true + default: "" + - variable: from_name + label: From Name + description: Mail From Name + schema: + type: string + show_if: [["host", "!=", ""]] + required: true + default: Mealie + - variable: from_email + label: From Email + description: Mail From Email + schema: + type: string + show_if: [["host", "!=", ""]] + required: true + default: "" + - variable: auth_strategy + label: Auth Strategy + description: Mail Auth Strategy + schema: + type: string + show_if: [["host", "!=", ""]] + required: true + default: "TLS" + enum: + - value: TLS + description: TLS + - value: SSL + description: SSL + - value: NONE + description: NONE + - variable: ldap + label: LDAP + schema: + additional_attrs: true + type: dict + attrs: + - variable: auth_enabled + label: Auth Enabled + description: Authenticate via an external LDAP server in addition to built-in Mealie auth + schema: + type: boolean + default: false + - variable: server_url + label: Server URL + description: LDAP server URL + schema: + type: string + default: "" + - variable: tls_insecure + label: TLS Insecure + description: Do not verify server certificate when using secure LDAP + schema: + type: boolean + default: false + - variable: enable_starttls + label: Enable StartTLS + description: Use STARTTLS to connect to the server + schema: + type: boolean + default: false + - variable: tls_cacertfile + label: TLS CA Cert File + description: File path to Certificate Authority used to verify server certificate + schema: + type: string + default: "" + - variable: base_dn + label: Base DN + description: Starting point when searching for users authentication. + schema: + type: string + default: "" + - variable: query_bind + label: Query Bind + description: Optional bind user for LDAP search queries + schema: + type: string + default: "" + - variable: query_password + label: Query Password + description: Optional password for the bind user used + schema: + type: string + default: "" + - variable: user_filter + label: User Filter + description: Optional LDAP filter to narrow down eligible users + schema: + type: string + default: "" + - variable: admin_filter + label: Admin Filter + description: Optional LDAP filter, which tells Mealie the LDAP user is an admin + schema: + type: string + default: "" + - variable: id_attribute + label: ID Attribute + description: The LDAP attribute that maps to the user's id + schema: + type: string + default: uid + - variable: name_attribute + label: Name Attribute + description: The LDAP attribute that maps to the user's name + schema: + type: string + default: name + - variable: mail_attribute + label: Mail Attribute + description: The LDAP attribute that maps to the user's email + schema: + type: string + default: mail + - 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": "1"}] + 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: imagePullSecretList + group: "General Settings" + label: "Image Pull Secrets" + schema: + type: list + default: [] + items: + - variable: pullsecretentry + label: "Pull Secret" + schema: + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + - variable: data + label: Data + schema: + type: dict + additional_attrs: true + attrs: + - variable: registry + label: "Registry" + schema: + type: string + required: true + default: "https://index.docker.io/v1/" + - variable: username + label: "Username" + schema: + type: string + required: true + default: "" + - variable: password + label: "Password" + schema: + type: string + required: true + private: true + default: "" + - variable: email + label: "Email" + schema: + type: string + required: true + default: "" + - 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: 10018 + required: true + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - 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: + additional_attrs: true + 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: + additional_attrs: true + 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: data + label: App Data Storage + description: Stores the Application Data. + 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 + - value: iscsi + description: iSCSI 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + 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: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + 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: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - 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: [{path: "/", pathType: "Prefix"}] + 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: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name (Optional) + description: Defaults to chart name + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description (Optional) + description: Defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: icon + label: Icon (Optional) + description: Defaults to chart icon + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: widget + label: Widget Settings + schema: + type: dict + additional_attrs: true + show_if: [["enabled", "=", true]] + attrs: + - variable: enabled + label: Enable Widget + description: When disabled all widget annotations are skipped. + schema: + type: boolean + default: true + - variable: custom + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: API-key (key) + schema: + type: string + default: "" + - variable: customkv + label: Custom Options + schema: + type: list + default: [] + items: + - variable: option + label: Option + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + default: "" + required: true + - variable: value + label: Value + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + 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: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: overrideService + 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: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + 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: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: namespace + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: securityContext + group: Security and Permissions + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 568 + # Settings from questions.yaml get appended here on a per-app basis + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + show_if: [["runAsUser", "=", 0]] + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "0022" + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + # Settings from questions.yaml get appended here on a per-app basis + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/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/manual/SCALE/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/manual/SCALE/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/manual/SCALE/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: + additional_attrs: true + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + - variable: workaround + label: "Workaround" + schema: + type: string + default: workaround + hidden: true + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: 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: ingress + label: "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: [{path: "/", pathType: "Prefix"}] + 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: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + 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: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: + additional_attrs: true + 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: + additional_attrs: true + 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 + max_length: 10240 + - 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/mealie/20.2.0/templates/NOTES.txt b/stable/mealie/20.2.0/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/stable/mealie/20.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/mealie/20.2.0/templates/_secrets.tpl b/stable/mealie/20.2.0/templates/_secrets.tpl new file mode 100644 index 00000000000..5c7f5413244 --- /dev/null +++ b/stable/mealie/20.2.0/templates/_secrets.tpl @@ -0,0 +1,97 @@ +{{/* Define the secrets */}} +{{- define "mealie.secrets" -}} +{{- $fullname := (include "tc.v1.common.lib.chart.names.fullname" $) -}} +{{- $api := .Values.mealie.api -}} +{{- $frontend := .Values.mealie.frontend }} + +frontend: + enabled: true + data: + {{/* Frontend */}} + THEME_LIGHT_PRIMARY: {{ $frontend.theme.light_primary | default "#E58325" | quote }} + THEME_LIGHT_ACCENT: {{ $frontend.theme.light_accent | default "#007A99" | quote }} + THEME_LIGHT_SECONDARY: {{ $frontend.theme.light_secondary | default "#973542" | quote }} + THEME_LIGHT_SUCCESS: {{ $frontend.theme.light_success | default "#43A047" | quote }} + THEME_LIGHT_INFO: {{ $frontend.theme.light_info | default "#1976D2" | quote }} + THEME_LIGHT_WARNING: {{ $frontend.theme.light_warning | default "#FF6D00" | quote }} + THEME_LIGHT_ERROR: {{ $frontend.theme.light_error | default "#EF5350" | quote }} + THEME_DARK_PRIMARY: {{ $frontend.theme.dark_primary | default "#E58325" | quote }} + THEME_DARK_ACCENT: {{ $frontend.theme.dark_accent | default "#007A99" | quote }} + THEME_DARK_SECONDARY: {{ $frontend.theme.dark_secondary | default "#973542" | quote }} + THEME_DARK_SUCCESS: {{ $frontend.theme.dark_success | default "#43A047" | quote }} + THEME_DARK_INFO: {{ $frontend.theme.dark_info | default "#1976D2" | quote }} + THEME_DARK_WARNING: {{ $frontend.theme.dark_warning | default "#FF6D00" | quote }} + THEME_DARK_ERROR: {{ $frontend.theme.dark_error | default "#EF5350" | quote }} + +api: + enabled: true + data: + API_PORT: {{ .Values.service.main.ports.main.port | quote }} + {{/* Database */}} + DB_ENGINE: "postgres" + POSTGRES_PORT: "5432" + POSTGRES_USER: {{ .Values.cnpg.main.user }} + POSTGRES_PASSWORD: {{ .Values.cnpg.main.creds.password | trimAll "\"" }} + POSTGRES_DB: {{ .Values.cnpg.main.database }} + POSTGRES_SERVER: {{ .Values.cnpg.main.creds.host }} + {{/* User Defined */}} + {{/* General */}} + ALLOW_SIGNUP: {{ $api.general.allow_signup | quote }} + DEFAULT_GROUP: {{ $api.general.default_group }} + DEFAULT_EMAIL: {{ $api.general.default_email }} + BASE_URL: {{ $api.general.base_url }} + TOKEN_TIME: {{ $api.general.token_time | quote }} + {{/* Security */}} + SECURITY_MAX_LOGIN_ATTEMPTS: {{ $api.security.max_login_attempts | quote }} + SECURITY_USER_LOCKOUT_TIME: {{ $api.security.user_lockout_time | quote }} + {{/* SMTP */}} + {{- if $api.smtp.host }} + SMTP_PORT: {{ $api.smtp.port | quote }} + SMTP_HOST: {{ $api.smtp.host | quote }} + SMTP_USER: {{ $api.smtp.user | quote }} + SMTP_PASSWORD: {{ $api.smtp.password | quote }} + SMTP_FROM_NAME: {{ $api.smtp.from_name | quote }} + SMTP_AUTH_STRATEGY: {{ $api.smtp.auth_strategy | quote }} + SMTP_FROM_EMAIL: {{ $api.smtp.from_email | quote }} + {{- end }} + {{/* Workers */}} + WORKERS_PER_CORE: {{ $api.webworkers.workers_per_core | quote }} + MAX_WORKERS: {{ $api.webworkers.max_workers | quote }} + WEB_CONCURRENCY: {{ $api.webworkers.web_concurrency | quote }} + {{/* LDAP */}} + {{- if $api.ldap.auth_enabled }} + LDAP_AUTH_ENABLED: {{ $api.ldap.auth_enabled | quote }} + {{- with $api.ldap.server_url }} + LDAP_SERVER_URL: {{ . }} + {{- end }} + LDAP_TLS_INSECURE: {{ $api.ldap.tls_insecure | quote }} + LDAP_ENABLE_STARTTLS: {{ $api.ldap.enable_starttls | quote }} + {{- with $api.ldap.tls_cacertfile }} + LDAP_TLS_CACERTFILE: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.base_dn }} + LDAP_BASE_DN: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.query_bind }} + LDAP_QUERY_BIND: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.query_password }} + LDAP_QUERY_PASSWORD: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.user_filter }} + LDAP_USER_FILTER: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.admin_filter }} + LDAP_ADMIN_FILTER: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.id_attribute }} + LDAP_ID_ATTRIBUTE: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.name_attribute }} + LDAP_NAME_ATTRIBUTE: {{ . | quote }} + {{- end -}} + {{- with $api.ldap.mail_attribute }} + LDAP_MAIL_ATTRIBUTE: {{ . | quote }} + {{- end -}} + {{- end -}} +{{- end -}} diff --git a/stable/mealie/20.2.0/templates/common.yaml b/stable/mealie/20.2.0/templates/common.yaml new file mode 100644 index 00000000000..fda2cdae013 --- /dev/null +++ b/stable/mealie/20.2.0/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for mealie */}} +{{- $secrets := include "mealie.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/mealie/20.2.0/values.yaml b/stable/mealie/20.2.0/values.yaml new file mode 100644 index 00000000000..e69de29bb2d