From 5e3914be5a36dbd9e89cfb750fb60d2454d4db54 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Sun, 4 Sep 2022 12:55:15 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/chronos/1.0.0/CHANGELOG.md | 99 + stable/chronos/1.0.0/Chart.lock | 6 + stable/chronos/1.0.0/Chart.yaml | 29 + stable/chronos/1.0.0/README.md | 109 + stable/chronos/1.0.0/app-readme.md | 8 + stable/chronos/1.0.0/charts/common-10.5.6.tgz | Bin 0 -> 48176 bytes stable/chronos/1.0.0/ix_values.yaml | 28 + stable/chronos/1.0.0/questions.yaml | 2487 +++++++++++++++ stable/chronos/1.0.0/templates/common.yaml | 2 + stable/chronos/1.0.0/values.yaml | 0 stable/chronos/item.yaml | 4 + stable/filerun/3.0.0/CHANGELOG.md | 99 + stable/filerun/3.0.0/Chart.lock | 9 + stable/filerun/3.0.0/Chart.yaml | 32 + stable/filerun/3.0.0/README.md | 110 + stable/filerun/3.0.0/app-readme.md | 8 + stable/filerun/3.0.0/charts/common-10.5.6.tgz | Bin 0 -> 48176 bytes .../filerun/3.0.0/charts/mariadb-3.0.66.tgz | Bin 0 -> 59036 bytes stable/filerun/3.0.0/ix_values.yaml | 54 + stable/filerun/3.0.0/questions.yaml | 2665 +++++++++++++++++ stable/filerun/3.0.0/templates/common.yaml | 1 + stable/filerun/3.0.0/values.yaml | 0 stable/filerun/item.yaml | 4 + stable/kitchenowl/1.0.0/CHANGELOG.md | 99 + stable/kitchenowl/1.0.0/Chart.lock | 6 + stable/kitchenowl/1.0.0/Chart.yaml | 30 + stable/kitchenowl/1.0.0/README.md | 108 + stable/kitchenowl/1.0.0/app-readme.md | 8 + .../kitchenowl/1.0.0/charts/common-10.5.6.tgz | Bin 0 -> 48176 bytes stable/kitchenowl/1.0.0/ix_values.yaml | 58 + stable/kitchenowl/1.0.0/questions.yaml | 2502 ++++++++++++++++ .../kitchenowl/1.0.0/templates/_secrets.tpl | 20 + stable/kitchenowl/1.0.0/templates/common.yaml | 5 + stable/kitchenowl/1.0.0/values.yaml | 0 stable/kitchenowl/item.yaml | 4 + 35 files changed, 8594 insertions(+) create mode 100644 stable/chronos/1.0.0/CHANGELOG.md create mode 100644 stable/chronos/1.0.0/Chart.lock create mode 100644 stable/chronos/1.0.0/Chart.yaml create mode 100644 stable/chronos/1.0.0/README.md create mode 100644 stable/chronos/1.0.0/app-readme.md create mode 100644 stable/chronos/1.0.0/charts/common-10.5.6.tgz create mode 100644 stable/chronos/1.0.0/ix_values.yaml create mode 100644 stable/chronos/1.0.0/questions.yaml create mode 100644 stable/chronos/1.0.0/templates/common.yaml create mode 100644 stable/chronos/1.0.0/values.yaml create mode 100644 stable/chronos/item.yaml create mode 100644 stable/filerun/3.0.0/CHANGELOG.md create mode 100644 stable/filerun/3.0.0/Chart.lock create mode 100644 stable/filerun/3.0.0/Chart.yaml create mode 100644 stable/filerun/3.0.0/README.md create mode 100644 stable/filerun/3.0.0/app-readme.md create mode 100644 stable/filerun/3.0.0/charts/common-10.5.6.tgz create mode 100644 stable/filerun/3.0.0/charts/mariadb-3.0.66.tgz create mode 100644 stable/filerun/3.0.0/ix_values.yaml create mode 100644 stable/filerun/3.0.0/questions.yaml create mode 100644 stable/filerun/3.0.0/templates/common.yaml create mode 100644 stable/filerun/3.0.0/values.yaml create mode 100644 stable/filerun/item.yaml create mode 100644 stable/kitchenowl/1.0.0/CHANGELOG.md create mode 100644 stable/kitchenowl/1.0.0/Chart.lock create mode 100644 stable/kitchenowl/1.0.0/Chart.yaml create mode 100644 stable/kitchenowl/1.0.0/README.md create mode 100644 stable/kitchenowl/1.0.0/app-readme.md create mode 100644 stable/kitchenowl/1.0.0/charts/common-10.5.6.tgz create mode 100644 stable/kitchenowl/1.0.0/ix_values.yaml create mode 100644 stable/kitchenowl/1.0.0/questions.yaml create mode 100644 stable/kitchenowl/1.0.0/templates/_secrets.tpl create mode 100644 stable/kitchenowl/1.0.0/templates/common.yaml create mode 100644 stable/kitchenowl/1.0.0/values.yaml create mode 100644 stable/kitchenowl/item.yaml diff --git a/stable/chronos/1.0.0/CHANGELOG.md b/stable/chronos/1.0.0/CHANGELOG.md new file mode 100644 index 0000000000..4ae3426326 --- /dev/null +++ b/stable/chronos/1.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [chronos-1.0.0](https://github.com/truecharts/charts/compare/chronos-0.0.22...chronos-1.0.0) (2022-09-04) + +### Feat + +- move to stable ([#3687](https://github.com/truecharts/charts/issues/3687)) + + + + +## [chronos-0.0.22](https://github.com/truecharts/charts/compare/chronos-0.0.21...chronos-0.0.22) (2022-08-30) + +### Chore + +- update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) + + + + +## [chronos-0.0.21](https://github.com/truecharts/charts/compare/chronos-0.0.20...chronos-0.0.21) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [chronos-0.0.20](https://github.com/truecharts/charts/compare/chronos-0.0.19...chronos-0.0.20) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + + + + +## [chronos-0.0.19](https://github.com/truecharts/charts/compare/chronos-0.0.17...chronos-0.0.19) (2022-08-26) + +### Fix + +- some cleanup ([#3586](https://github.com/truecharts/charts/issues/3586)) + + + + +## [chronos-0.0.17](https://github.com/truecharts/charts/compare/chronos-0.0.16...chronos-0.0.17) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + + + + +## [chronos-0.0.16](https://github.com/truecharts/charts/compare/chronos-0.0.15...chronos-0.0.16) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps + - update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + + ### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + + + + +## [chronos-0.0.15](https://github.com/truecharts/charts/compare/chronos-0.0.14...chronos-0.0.15) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) + - replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + + + + +## [chronos-0.0.14](https://github.com/truecharts/apps/compare/chronos-0.0.13...chronos-0.0.14) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) + - update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + + + + +## [chronos-0.0.13](https://github.com/truecharts/apps/compare/chronos-0.0.12...chronos-0.0.13) (2022-07-25) + +### Chore + +- update docker general non-major ([#3300](https://github.com/truecharts/apps/issues/3300)) + + ### Chore diff --git a/stable/chronos/1.0.0/Chart.lock b/stable/chronos/1.0.0/Chart.lock new file mode 100644 index 0000000000..bc4fa5318b --- /dev/null +++ b/stable/chronos/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 +digest: sha256:033cffd654878c0c1fcc6f4c236f81736e71491b2ad46a5dec9708ea6faf2b63 +generated: "2022-09-04T12:47:45.426148992Z" diff --git a/stable/chronos/1.0.0/Chart.yaml b/stable/chronos/1.0.0/Chart.yaml new file mode 100644 index 0000000000..fe0177eb4b --- /dev/null +++ b/stable/chronos/1.0.0/Chart.yaml @@ -0,0 +1,29 @@ +apiVersion: v2 +appVersion: "0.2" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 +deprecated: false +description: "Chronos is a small container to run and schedule Python 3.7 scripts. You can create virtual enviroments, edit your scripts, install Pip dependencies, view execution logs, and debug your scripts, all from the sleek web UI." +home: https://truecharts.org/docs/charts/stable/chronos +icon: https://truecharts.org/img/hotlink-ok/chart-icons/chronos.png +keywords: + - chronos + - Tools-Utilities +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: chronos +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/chronos + - https://github.com/simse/chronos + - https://hub.docker.com/r/simsemand/chronos +type: application +version: 1.0.0 +annotations: + truecharts.org/SCALE-support: "true" + truecharts.org/catagories: | + - Tools-Utilities diff --git a/stable/chronos/1.0.0/README.md b/stable/chronos/1.0.0/README.md new file mode 100644 index 0000000000..512003dfc2 --- /dev/null +++ b/stable/chronos/1.0.0/README.md @@ -0,0 +1,109 @@ +# chronos + +![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.2](https://img.shields.io/badge/AppVersion-0.2-informational?style=flat-square) + +Chronos is a small container to run and schedule Python 3.7 scripts. You can create virtual enviroments, edit your scripts, install Pip dependencies, view execution logs, and debug your scripts, all from the sleek web UI. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [chronos](https://truecharts.org/docs/charts/stable/chronos) + +**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)** + +## Source Code + +* +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.truecharts.org | common | 10.5.6 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Installing-an-App). + +### Helm + +To install the chart with the release name `chronos` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install chronos TrueCharts/chronos +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `chronos` deployment + +```console +helm uninstall chronos +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install chronos \ + --set env.TZ="America/New York" \ + TrueCharts/chronos +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install chronos TrueCharts/chronos -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/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/docs/about/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/chronos/1.0.0/app-readme.md b/stable/chronos/1.0.0/app-readme.md new file mode 100644 index 0000000000..bcac434484 --- /dev/null +++ b/stable/chronos/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +Chronos is a small container to run and schedule Python 3.7 scripts. You can create virtual enviroments, edit your scripts, install Pip dependencies, view execution logs, and debug your scripts, all from the sleek web UI. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/chronos](https://truecharts.org/docs/charts/stable/chronos) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/stable/chronos/1.0.0/charts/common-10.5.6.tgz b/stable/chronos/1.0.0/charts/common-10.5.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9e3f5a957f3fa92bc5b2d7cb2c16b0ab954235cf GIT binary patch literal 48176 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%0D#1AX%ulOWWbBnc9F790F-J%0)!zJSZ8b00| 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 literal 0 HcmV?d00001 diff --git a/stable/chronos/1.0.0/ix_values.yaml b/stable/chronos/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..fb755b86b9 --- /dev/null +++ b/stable/chronos/1.0.0/ix_values.yaml @@ -0,0 +1,28 @@ +image: + repository: tccr.io/truecharts/chronos + pullPolicy: IfNotPresent + tag: v0.2@sha256:f8dd4381e007a4fa1846c0bfa1691c7bd4f77720b79d3513ab293ecbcc5d1e36 + +podSecurityContext: + runAsGroup: 0 + runAsUser: 0 + +securityContext: + readOnlyRootFilesystem: false + runAsNonRoot: false + +service: + main: + ports: + main: + port: 10305 + protocol: HTTP + targetPort: 5000 + +persistence: + chronos: + enabled: true + mountPath: /chronos + +portal: + enabled: true diff --git a/stable/chronos/1.0.0/questions.yaml b/stable/chronos/1.0.0/questions.yaml new file mode 100644 index 0000000000..5ed3c30cb9 --- /dev/null +++ b/stable/chronos/1.0.0/questions.yaml @@ -0,0 +1,2487 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - 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: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - 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..." + group: Container Configuration + 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: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - 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: 10305 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 5000 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + 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: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + 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: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort + schema: + type: int + min: 9000 + max: 65535 + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: chronos + label: "chronos Storage" + 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: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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 + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: true + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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: 999Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - 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 + 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: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: false + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 0 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - 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 + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + 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: hostPath + 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" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - 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: +# additional_attrs: true +# type: dict +# attrs: +# - 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: 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: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: 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: Sock5 Server + 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: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: 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: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: NodePort + enum: + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: nodePort + description: Leave Empty to Disable + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail 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: 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/docs/about/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/docs/about/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/chronos/1.0.0/templates/common.yaml b/stable/chronos/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..cbf66c2081 --- /dev/null +++ b/stable/chronos/1.0.0/templates/common.yaml @@ -0,0 +1,2 @@ +{{/* Render the templates */}} +{{ include "tc.common.loader.all" . }} diff --git a/stable/chronos/1.0.0/values.yaml b/stable/chronos/1.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/chronos/item.yaml b/stable/chronos/item.yaml new file mode 100644 index 0000000000..4560a73087 --- /dev/null +++ b/stable/chronos/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/chronos.png +categories: +- Tools-Utilities + diff --git a/stable/filerun/3.0.0/CHANGELOG.md b/stable/filerun/3.0.0/CHANGELOG.md new file mode 100644 index 0000000000..610e36f2ef --- /dev/null +++ b/stable/filerun/3.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [filerun-3.0.0](https://github.com/truecharts/charts/compare/filerun-2.1.6...filerun-3.0.0) (2022-09-04) + +### Feat + +- move to stable ([#3687](https://github.com/truecharts/charts/issues/3687)) + + + + +## [filerun-2.1.6](https://github.com/truecharts/charts/compare/filerun-2.1.5...filerun-2.1.6) (2022-08-30) + +### Chore + +- update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) + + + + +## [filerun-2.1.5](https://github.com/truecharts/charts/compare/filerun-2.1.4...filerun-2.1.5) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [filerun-2.1.4](https://github.com/truecharts/charts/compare/filerun-2.1.2...filerun-2.1.4) (2022-08-29) + +### Chore + +- update helm general non-major ([#3621](https://github.com/truecharts/charts/issues/3621)) + - update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + + + + +## [filerun-2.1.2](https://github.com/truecharts/charts/compare/filerun-2.1.0...filerun-2.1.2) (2022-08-26) + +### Fix + +- some cleanup ([#3586](https://github.com/truecharts/charts/issues/3586)) + + + + +## [filerun-2.1.0](https://github.com/truecharts/charts/compare/filerun-2.0.30...filerun-2.1.0) (2022-08-25) + +### Feat + +- run app as apps user and set id and gid according to PUID and fsgroup ([#3568](https://github.com/truecharts/charts/issues/3568)) + + + + +## [filerun-2.0.30](https://github.com/truecharts/charts/compare/filerun-2.0.29...filerun-2.0.30) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + + + + +## [filerun-2.0.29](https://github.com/truecharts/charts/compare/filerun-2.0.28...filerun-2.0.29) (2022-08-17) + +### Chore + +- update helm general non-major helm releases ([#3484](https://github.com/truecharts/charts/issues/3484)) + + + + +## [filerun-2.0.28](https://github.com/truecharts/charts/compare/filerun-2.0.27...filerun-2.0.28) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps + - update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + + ### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + + + + +## [filerun-2.0.27](https://github.com/truecharts/charts/compare/filerun-2.0.26...filerun-2.0.27) (2022-08-09) + +### Chore + +- update helm general non-major helm releases to v10.4.9 ([#3413](https://github.com/truecharts/charts/issues/3413)) + + + diff --git a/stable/filerun/3.0.0/Chart.lock b/stable/filerun/3.0.0/Chart.lock new file mode 100644 index 0000000000..2ea072a9de --- /dev/null +++ b/stable/filerun/3.0.0/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 +- name: mariadb + repository: https://charts.truecharts.org/ + version: 3.0.66 +digest: sha256:ad3438017628a13d5791d7dbcc46c6f6e65eda54b043ad10b6796f702f527b88 +generated: "2022-09-04T12:47:53.829141923Z" diff --git a/stable/filerun/3.0.0/Chart.yaml b/stable/filerun/3.0.0/Chart.yaml new file mode 100644 index 0000000000..57c05ae7e8 --- /dev/null +++ b/stable/filerun/3.0.0/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +appVersion: "latest" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 + - condition: mariadb.enabled + name: mariadb + repository: https://charts.truecharts.org/ + version: 3.0.66 +description: FileRun is a full featured web based file manager with an easy to use user interface +home: https://truecharts.org/docs/charts/stable/filerun +icon: https://truecharts.org/img/hotlink-ok/chart-icons/filerun.png +keywords: + - filerun + - file +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: filerun +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/filerun + - https://hub.docker.com/r/filerun/filerun + - https://github.com/filerun/docker +version: 3.0.0 +annotations: + truecharts.org/catagories: | + - media + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/filerun/3.0.0/README.md b/stable/filerun/3.0.0/README.md new file mode 100644 index 0000000000..825ee5b1ed --- /dev/null +++ b/stable/filerun/3.0.0/README.md @@ -0,0 +1,110 @@ +# filerun + +![Version: 3.0.0](https://img.shields.io/badge/Version-3.0.0-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square) + +FileRun is a full featured web based file manager with an easy to use user interface + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [filerun](https://truecharts.org/docs/charts/stable/filerun) + +**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)** + +## Source Code + +* +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://charts.truecharts.org/ | mariadb | 3.0.66 | +| https://library-charts.truecharts.org | common | 10.5.6 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Installing-an-App). + +### Helm + +To install the chart with the release name `filerun` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install filerun TrueCharts/filerun +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `filerun` deployment + +```console +helm uninstall filerun +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install filerun \ + --set env.TZ="America/New York" \ + TrueCharts/filerun +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install filerun TrueCharts/filerun -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/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/docs/about/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/filerun/3.0.0/app-readme.md b/stable/filerun/3.0.0/app-readme.md new file mode 100644 index 0000000000..a1bd1aceaf --- /dev/null +++ b/stable/filerun/3.0.0/app-readme.md @@ -0,0 +1,8 @@ +FileRun is a full featured web based file manager with an easy to use user interface + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/filerun](https://truecharts.org/docs/charts/stable/filerun) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/stable/filerun/3.0.0/charts/common-10.5.6.tgz b/stable/filerun/3.0.0/charts/common-10.5.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9e3f5a957f3fa92bc5b2d7cb2c16b0ab954235cf GIT binary patch literal 48176 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%0D#1AX%ulOWWbBnc9F790F-J%0)!zJSZ8b00| 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 literal 0 HcmV?d00001 diff --git a/stable/filerun/3.0.0/charts/mariadb-3.0.66.tgz b/stable/filerun/3.0.0/charts/mariadb-3.0.66.tgz new file mode 100644 index 0000000000000000000000000000000000000000..71a537769c9033f48e984c7ec12f8e18003aa5b8 GIT binary patch literal 59036 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 N|Nm+pEuR1Y1^}UPG&TSL literal 0 HcmV?d00001 diff --git a/stable/filerun/3.0.0/ix_values.yaml b/stable/filerun/3.0.0/ix_values.yaml new file mode 100644 index 0000000000..108aad62db --- /dev/null +++ b/stable/filerun/3.0.0/ix_values.yaml @@ -0,0 +1,54 @@ +image: + repository: tccr.io/truecharts/filerun + tag: latest@sha256:8d0fb96cc91db060d912a3986dbecc0275f2e5d600b7731e7320e20e11e90f8b + pullPolicy: IfNotPresent + +securityContext: + readOnlyRootFilesystem: false + runAsNonRoot: false + +podSecurityContext: + runAsUser: 0 + runAsGroup: 0 + +env: + APACHE_RUN_USER: apps + APACHE_RUN_USER_ID: "{{ .Values.security.PUID }}" + APACHE_RUN_GROUP: apps + APACHE_RUN_GROUP_ID: "{{ .Values.podSecurityContext.fsGroup }}" + FR_DB_NAME: "filerun" + FR_DB_USER: "filerun" + FR_DB_PORT: "3306" + FR_DB_HOST: + secretKeyRef: + name: mariadbcreds + key: plainporthost + FR_DB_PASS: + secretKeyRef: + name: mariadbcreds + key: mariadb-password + +service: + main: + ports: + main: + port: 10199 + protocol: HTTP + targetPort: 80 + +persistence: + config: + enabled: true + mountPath: "/var/www/html" + userfile: + enabled: true + mountPath: "/user-files" + +mariadb: + enabled: true + mariadbUsername: filerun + mariadbDatabase: filerun + existingSecret: "mariadbcreds" + +portal: + enabled: true diff --git a/stable/filerun/3.0.0/questions.yaml b/stable/filerun/3.0.0/questions.yaml new file mode 100644 index 0000000000..b3aa471afc --- /dev/null +++ b/stable/filerun/3.0.0/questions.yaml @@ -0,0 +1,2665 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - 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: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - 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..." + group: Container Configuration + 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: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - 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: 10199 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 80 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + 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: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + 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: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort + schema: + type: int + min: 9000 + max: 65535 + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: config + label: "App Config Storage" + description: "Stores the Application Config." + 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: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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 + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: userfile + label: "App userfile Storage" + description: "Stores user's file" + 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: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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 + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: true + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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: 999Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - 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 + 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: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: false + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID this App of the user running the application" + schema: + type: int + default: 0 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - 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 + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + 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: hostPath + 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" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - 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: +# additional_attrs: true +# type: dict +# attrs: +# - 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: 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: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: 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: Sock5 Server + 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: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: 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: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: NodePort + enum: + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: nodePort + description: Leave Empty to Disable + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail 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: 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/docs/about/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/docs/about/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/filerun/3.0.0/templates/common.yaml b/stable/filerun/3.0.0/templates/common.yaml new file mode 100644 index 0000000000..c1a366e1cf --- /dev/null +++ b/stable/filerun/3.0.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.common.loader.all" . }} diff --git a/stable/filerun/3.0.0/values.yaml b/stable/filerun/3.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/filerun/item.yaml b/stable/filerun/item.yaml new file mode 100644 index 0000000000..65322e3bc5 --- /dev/null +++ b/stable/filerun/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/filerun.png +categories: +- media + diff --git a/stable/kitchenowl/1.0.0/CHANGELOG.md b/stable/kitchenowl/1.0.0/CHANGELOG.md new file mode 100644 index 0000000000..4cecd143d6 --- /dev/null +++ b/stable/kitchenowl/1.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [kitchenowl-1.0.0](https://github.com/truecharts/charts/compare/kitchenowl-0.0.13...kitchenowl-1.0.0) (2022-09-04) + +### Feat + +- move to stable ([#3687](https://github.com/truecharts/charts/issues/3687)) + + + + +## [kitchenowl-0.0.13](https://github.com/truecharts/charts/compare/kitchenowl-0.0.11...kitchenowl-0.0.13) (2022-08-30) + +### Chore + +- Auto-update chart README [skip ci] + - update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) + - update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [kitchenowl-0.0.12](https://github.com/truecharts/charts/compare/kitchenowl-0.0.11...kitchenowl-0.0.12) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [kitchenowl-0.0.11](https://github.com/truecharts/charts/compare/kitchenowl-0.0.10...kitchenowl-0.0.11) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + + + + +## [kitchenowl-0.0.10](https://github.com/truecharts/charts/compare/kitchenowl-0.0.8...kitchenowl-0.0.10) (2022-08-26) + +### Fix + +- some cleanup ([#3586](https://github.com/truecharts/charts/issues/3586)) + + + + +## [kitchenowl-0.0.8](https://github.com/truecharts/charts/compare/kitchenowl-0.0.7...kitchenowl-0.0.8) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + + + + +## [kitchenowl-0.0.7](https://github.com/truecharts/charts/compare/kitchenowl-0.0.6...kitchenowl-0.0.7) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps + - update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + + ### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + + + + +## [kitchenowl-0.0.6](https://github.com/truecharts/charts/compare/kitchenowl-0.0.5...kitchenowl-0.0.6) (2022-08-10) + +### Chore + +- update docker general non-major ([#3421](https://github.com/truecharts/charts/issues/3421)) + + + + +## [kitchenowl-0.0.5](https://github.com/truecharts/charts/compare/kitchenowl-0.0.4...kitchenowl-0.0.5) (2022-08-09) + +### Chore + +- update docker general non-major ([#3377](https://github.com/truecharts/charts/issues/3377)) + + + + +## [kitchenowl-0.0.4](https://github.com/truecharts/charts/compare/kitchenowl-0.0.2...kitchenowl-0.0.4) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) + - update docker general non-major ([#3356](https://github.com/truecharts/charts/issues/3356)) + - replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) diff --git a/stable/kitchenowl/1.0.0/Chart.lock b/stable/kitchenowl/1.0.0/Chart.lock new file mode 100644 index 0000000000..3e85b1edb2 --- /dev/null +++ b/stable/kitchenowl/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 +digest: sha256:033cffd654878c0c1fcc6f4c236f81736e71491b2ad46a5dec9708ea6faf2b63 +generated: "2022-09-04T12:47:45.294785967Z" diff --git a/stable/kitchenowl/1.0.0/Chart.yaml b/stable/kitchenowl/1.0.0/Chart.yaml new file mode 100644 index 0000000000..13e0de69db --- /dev/null +++ b/stable/kitchenowl/1.0.0/Chart.yaml @@ -0,0 +1,30 @@ +apiVersion: v2 +appVersion: "beta" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.5.6 +deprecated: false +description: KitchenOwl is a smart self-hosted grocery list and recipe manager. +home: https://truecharts.org/docs/charts/stable/kitchenowl +icon: https://truecharts.org/img/hotlink-ok/chart-icons/kitchenowl.png +keywords: + - recipes + - kitchen + - grocery +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: kitchenowl +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/kitchenowl + - https://tombursch.github.io/kitchenowl +type: application +version: 1.0.0 +annotations: + truecharts.org/catagories: | + - utilities + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/kitchenowl/1.0.0/README.md b/stable/kitchenowl/1.0.0/README.md new file mode 100644 index 0000000000..d028c33f89 --- /dev/null +++ b/stable/kitchenowl/1.0.0/README.md @@ -0,0 +1,108 @@ +# kitchenowl + +![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: beta](https://img.shields.io/badge/AppVersion-beta-informational?style=flat-square) + +KitchenOwl is a smart self-hosted grocery list and recipe manager. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [kitchenowl](https://truecharts.org/docs/charts/stable/kitchenowl) + +**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)** + +## Source Code + +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.truecharts.org | common | 10.5.6 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Installing-an-App). + +### Helm + +To install the chart with the release name `kitchenowl` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install kitchenowl TrueCharts/kitchenowl +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `kitchenowl` deployment + +```console +helm uninstall kitchenowl +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install kitchenowl \ + --set env.TZ="America/New York" \ + TrueCharts/kitchenowl +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install kitchenowl TrueCharts/kitchenowl -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/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/docs/about/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/kitchenowl/1.0.0/app-readme.md b/stable/kitchenowl/1.0.0/app-readme.md new file mode 100644 index 0000000000..2cdb3f0132 --- /dev/null +++ b/stable/kitchenowl/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +KitchenOwl is a smart self-hosted grocery list and recipe manager. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/kitchenowl](https://truecharts.org/docs/charts/stable/kitchenowl) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/stable/kitchenowl/1.0.0/charts/common-10.5.6.tgz b/stable/kitchenowl/1.0.0/charts/common-10.5.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9e3f5a957f3fa92bc5b2d7cb2c16b0ab954235cf GIT binary patch literal 48176 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%0D#1AX%ulOWWbBnc9F790F-J%0)!zJSZ8b00| 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 literal 0 HcmV?d00001 diff --git a/stable/kitchenowl/1.0.0/ix_values.yaml b/stable/kitchenowl/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..88cc52687d --- /dev/null +++ b/stable/kitchenowl/1.0.0/ix_values.yaml @@ -0,0 +1,58 @@ +image: + repository: tccr.io/truecharts/kitchenowl-web + pullPolicy: IfNotPresent + tag: beta@sha256:c4332c7471017c5347f6d7e5674ca33c561612a4878e3ed62711100b2927a48b + +backendImage: + repository: tccr.io/truecharts/kitchenowl-backend + pullPolicy: IfNotPresent + tag: beta@sha256:d9eeac19c922659a82bf977064acb74d8d08b2b2863e307a247512a10e9185a0 + +securityContext: + readOnlyRootFilesystem: false + runAsNonRoot: false + +podSecurityContext: + runAsUser: 0 + runAsGroup: 0 + +env: + FRONT_URL: "http://localhost:10246" + # Backend listens on 5000 websockets. + BACK_URL: "localhost:5000" + +service: + main: + ports: + main: + protocol: HTTP + targetPort: 80 + port: 10246 + +additionalContainers: + backend: + name: backend + image: "{{ .Values.backendImage.repository }}:{{ .Values.backendImage.tag }}" + env: + - name: FRONT_URL + value: "{{ .Values.env.FRONT_URL }}" + # Backend also listens on 80, but afaik there is no use as of now + # Changed port to 81 to avoid conflict with frontend + - name: HTTP_PORT + value: "81" + - name: JWT_SECRET_KEY + valueFrom: + secretKeyRef: + name: kitchenowl-secrets + key: JWT_SECRET_KEY + volumeMounts: + - name: data + mountPath: "/data" + +persistence: + data: + enabled: true + mountPath: "/data" + +portal: + enabled: true diff --git a/stable/kitchenowl/1.0.0/questions.yaml b/stable/kitchenowl/1.0.0/questions.yaml new file mode 100644 index 0000000000..95ccda8b5c --- /dev/null +++ b/stable/kitchenowl/1.0.0/questions.yaml @@ -0,0 +1,2502 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - 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: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + additional_attrs: true + type: dict + attrs: + - variable: FRONT_URL + label: "FRONT_URL" + description: "The url the instance will be accessed. eg. http://192.168.1.100:10246 or https://kitchen.mydomain.com" + schema: + type: string + required: true + default: "" + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - 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..." + group: Container Configuration + 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: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - 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: 10246 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 80 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + 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: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - 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, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + 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: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort + schema: + type: int + min: 9000 + max: 65535 + - 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: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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 + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - 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: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: true + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - 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: 999Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - 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: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + 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: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - 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 + 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: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: false + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID this App of the user running the application" + schema: + type: int + default: 0 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - 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 + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + 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: hostPath + 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" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - 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: +# additional_attrs: true +# type: dict +# attrs: +# - 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: 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: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: 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: Sock5 Server + 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: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: 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: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: NodePort + enum: + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: nodePort + description: Leave Empty to Disable + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail 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: 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/docs/about/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/docs/about/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/kitchenowl/1.0.0/templates/_secrets.tpl b/stable/kitchenowl/1.0.0/templates/_secrets.tpl new file mode 100644 index 0000000000..6b6c8897ec --- /dev/null +++ b/stable/kitchenowl/1.0.0/templates/_secrets.tpl @@ -0,0 +1,20 @@ +{{/* Define the secrets */}} +{{- define "kitchenowl.secrets" -}} +--- + +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: kitchenowl-secrets +{{- $kitchenowlprevious := lookup "v1" "Secret" .Release.Namespace "kitchenowl-secrets" }} +{{- $jwt_secret := "" }} +data: + {{- if $kitchenowlprevious}} + JWT_SECRET_KEY: {{ index $kitchenowlprevious.data "JWT_SECRET_KEY" }} + {{- else }} + {{- $jwt_secret := randAlphaNum 32 }} + JWT_SECRET_KEY: {{ $jwt_secret | b64enc }} + {{- end }} + +{{- end -}} diff --git a/stable/kitchenowl/1.0.0/templates/common.yaml b/stable/kitchenowl/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..b59eb1a0f0 --- /dev/null +++ b/stable/kitchenowl/1.0.0/templates/common.yaml @@ -0,0 +1,5 @@ +{{- include "tc.common.loader.init" . }} + +{{ include "kitchenowl.secrets" . }} + +{{ include "tc.common.loader.apply" . }} diff --git a/stable/kitchenowl/1.0.0/values.yaml b/stable/kitchenowl/1.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/kitchenowl/item.yaml b/stable/kitchenowl/item.yaml new file mode 100644 index 0000000000..b5dcbdbc56 --- /dev/null +++ b/stable/kitchenowl/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/kitchenowl.png +categories: +- utilities +