From e1b83d8cbf3d554474926cccba2b9cd92f267b88 Mon Sep 17 00:00:00 2001 From: Niborian <143342302+Niborian@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:26:30 +0000 Subject: [PATCH 1/5] Updated factorio server --- stable/factorio/8.1.0/.helmignore | 32 + stable/factorio/8.1.0/CHANGELOG.md | 3 + stable/factorio/8.1.0/Chart.yaml | 34 + stable/factorio/8.1.0/README.md | 61 + stable/factorio/8.1.0/app-readme.md | 8 + .../factorio/8.1.0/charts/common-23.0.10.tgz | Bin 0 -> 96939 bytes stable/factorio/8.1.0/icon-small.webp | Bin 0 -> 728 bytes stable/factorio/8.1.0/icon.webp | Bin 0 -> 3822 bytes stable/factorio/8.1.0/ix_values.yaml | 59 + stable/factorio/8.1.0/questions.yaml | 3241 ++++++++++ stable/factorio/8.1.0/templates/NOTES.txt | 1 + stable/factorio/8.1.0/templates/common.yaml | 2 + stable/factorio/8.1.0/values.yaml | 0 stable/factorio/app_versions.json | 5412 +++++++++++++++++ stable/rstudio/6.9.0/ix_values.yaml | Bin 875 -> 875 bytes 15 files changed, 8853 insertions(+) create mode 100644 stable/factorio/8.1.0/.helmignore create mode 100644 stable/factorio/8.1.0/CHANGELOG.md create mode 100644 stable/factorio/8.1.0/Chart.yaml create mode 100644 stable/factorio/8.1.0/README.md create mode 100644 stable/factorio/8.1.0/app-readme.md create mode 100644 stable/factorio/8.1.0/charts/common-23.0.10.tgz create mode 100644 stable/factorio/8.1.0/icon-small.webp create mode 100644 stable/factorio/8.1.0/icon.webp create mode 100644 stable/factorio/8.1.0/ix_values.yaml create mode 100644 stable/factorio/8.1.0/questions.yaml create mode 100644 stable/factorio/8.1.0/templates/NOTES.txt create mode 100644 stable/factorio/8.1.0/templates/common.yaml create mode 100644 stable/factorio/8.1.0/values.yaml diff --git a/stable/factorio/8.1.0/.helmignore b/stable/factorio/8.1.0/.helmignore new file mode 100644 index 0000000000..feb7464da6 --- /dev/null +++ b/stable/factorio/8.1.0/.helmignore @@ -0,0 +1,32 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png +icon.webp +icon-small.webp diff --git a/stable/factorio/8.1.0/CHANGELOG.md b/stable/factorio/8.1.0/CHANGELOG.md new file mode 100644 index 0000000000..941abb8a21 --- /dev/null +++ b/stable/factorio/8.1.0/CHANGELOG.md @@ -0,0 +1,3 @@ +*for the complete changelog, please refer to the website* + +**Important:** \ No newline at end of file diff --git a/stable/factorio/8.1.0/Chart.yaml b/stable/factorio/8.1.0/Chart.yaml new file mode 100644 index 0000000000..7480225445 --- /dev/null +++ b/stable/factorio/8.1.0/Chart.yaml @@ -0,0 +1,34 @@ +annotations: + truecharts.org/category: GameServers + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: stable +dependencies: + - name: common + version: 23.0.10 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: A game in which you build and maintain factories. +home: https://truecharts.org/charts/stable/factorio +icon: https://truecharts.org/img/hotlink-ok/chart-icons/factorio.webp +keywords: + - factorio + - GameServers +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: factorio +sources: + - https://github.com/factoriotools/factorio-docker + - https://github.com/truecharts/charts/tree/master/charts/stable/factorio + - https://hub.docker.com/r/factoriotools/factorio +type: application +version: 8.1.0 \ No newline at end of file diff --git a/stable/factorio/8.1.0/README.md b/stable/factorio/8.1.0/README.md new file mode 100644 index 0000000000..9a4aca1ab1 --- /dev/null +++ b/stable/factorio/8.1.0/README.md @@ -0,0 +1,61 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps. +Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible + +For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/factorio) + +**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)** + +## Installation + +### Helm-Chart installation + +To install TrueCharts Helm charts using Helm, you can use our OCI Repository. + +`helm install mychart oci://tccr.io/truecharts/CHARTNAME` + +For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/ + + +### TrueNAS SCALE Apps + +For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale). + +## Chart Specific Guides and information + +All our charts have dedicated documentation pages. +The documentation for this chart can be found here: +https://truecharts.org/charts/stable/factorio + +## Configuration Options + +Please note: For TrueNAS SCALE, only options available in the GUI are supported. +Hence most of these docs do not apply to TrueNAS SCALE + +To view the chart specific options, please view Values.yaml included in the chart. +The most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/factorio/values.yaml + +All our Charts use a shared "common" library chart that contains most of the templating and options. +For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/ + +For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml + +## Support + +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/general/sponsor) or contributing back to the project any way you can! + +_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/factorio/8.1.0/app-readme.md b/stable/factorio/8.1.0/app-readme.md new file mode 100644 index 0000000000..fee38bc012 --- /dev/null +++ b/stable/factorio/8.1.0/app-readme.md @@ -0,0 +1,8 @@ +A game in which you build and maintain factories. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/factorio](https://truecharts.org/charts/stable/factorio) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/stable/factorio/8.1.0/charts/common-23.0.10.tgz b/stable/factorio/8.1.0/charts/common-23.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5eefcb329be559e54998b5f211021daca81c39ef GIT binary patch literal 96939 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 literal 0 HcmV?d00001 diff --git a/stable/factorio/8.1.0/icon-small.webp b/stable/factorio/8.1.0/icon-small.webp new file mode 100644 index 0000000000000000000000000000000000000000..b27fda3437d8288c158b71ef62d33d48b7787389 GIT binary patch literal 728 zcmV;}0w?`aNk&G{0ssJ4MM6+kP&il$0000G0000V0018V06|PpNJ0Ss00DqoYuno9 zt$b9Q?TT8qcVIip@haf~m`31PI2nTTM`4EQE%beVqzxis0$@LGetyh2LYyYa=`hxO z>p>KD(*T^_sqd`k07&l?EGl=rti_g}sXi~qY8Uh>O2H%f`9$ld50YL%+GF5*Qsy$K z%Z!BjXE2|2sPQLdf68^I_LZl&wnFi?4Y7SIa7A&Rh1)#T{H^fpNCS#(ShfTX0E}if z&V+qf?+a%eGb4}cl--m-()-g~J6HP)&(o&urZvx<)y}l?fL>Utrg!OR*2p zc@|7jD;VL~k+3B2t|#>j#U-e*M}a(^8;xdfqtqVtd1<9xJoPE&%O+e`t7v`>5|?FfM6W)1yQGbWMweUC@n8vvx$U5{Q?YRT7DedsF?-CT~4!`f;3jnSP}5 zJmB)GeT<&OQ{Up;N&OA;-@!+Jx8`mq!!ij|67Sz9ul-4M2$q_ zt#BNITEI1LTg~KenWMX~s2&94wol5h90Q;n1!V+2VRaOE27JZ{%Nl&s!+h@Bk#97U Kni53=KmY*G=3r+4 literal 0 HcmV?d00001 diff --git a/stable/factorio/8.1.0/icon.webp b/stable/factorio/8.1.0/icon.webp new file mode 100644 index 0000000000000000000000000000000000000000..98b3d75174aef260eb29f5f3771b1f8659fa2475 GIT binary patch literal 3822 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 literal 0 HcmV?d00001 diff --git a/stable/factorio/8.1.0/ix_values.yaml b/stable/factorio/8.1.0/ix_values.yaml new file mode 100644 index 0000000000..9b4580c36e --- /dev/null +++ b/stable/factorio/8.1.0/ix_values.yaml @@ -0,0 +1,59 @@ +image: + pullPolicy: IfNotPresent + repository: factoriotools/factorio + tag: stable + +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsGroup: 0 + runAsUser: 0 + +service: + main: + ports: + main: + port: 34197 + protocol: udp + rcon: + enabled: true + ports: + rcon: + enabled: true + port: 27015 + protocol: tcp + +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + readiness: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + startup: + type: tcp + port: "{{ .Values.service.rcon.ports.rcon.port }}" + env: + PORT: "{{ .Values.service.main.ports.main.port }}" + RCON_PORT: "{{ .Values.service.rcon.ports.rcon.port }}" + GENERATE_NEW_SAVE: false + LOAD_LATEST_SAVE: true + SAVE_NAME: "_autosave1" + TOKEN: "" + UPDATE_MODS_ON_START: "" + USERNAME: "" + +persistence: + config: + enabled: true + mountPath: /factorio + +portal: + open: + enabled: false diff --git a/stable/factorio/8.1.0/questions.yaml b/stable/factorio/8.1.0/questions.yaml new file mode 100644 index 0000000000..5af676517c --- /dev/null +++ b/stable/factorio/8.1.0/questions.yaml @@ -0,0 +1,3241 @@ +groups: + - name: Image + description: | + Configured the images to be used for the Chart. + It's wise to use "digest pinned" tags and to avoid using "latest". + + Checkout the following documentation for more information: + - https://truecharts.org/common/#images + + + - name: General + description: | + For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general. + + Checkout the following documentation for more information: + - https://truecharts.org/common/global/ + - https://truecharts.org/common/#tz + - https://truecharts.org/common/podoptions/ + - Image Pull Secrets + + + - name: Workload + description: | + These settings configure how the actual Pods and containers are running. + Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container. + + Checkout the following documentation for more information: + - https://truecharts.org/common/workload/ + - https://truecharts.org/common/container/ + + + - name: App Configuration + description: | + Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application. + Most options should have a Tooltip (Circled Question Mark) to further describe said option. + + To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/ + + - name: Services + description: | + Service and Networking options for any applications are contained here. + Some applications may have complicated networking setups with multiple options or some may have no options here at all. + + Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes. + + Checkout the following documentation for more information: + - https://truecharts.org/common/service/ + + - name: Networking + description: | + Contains advanced networking options that are not actively supported by the TrueCharts team. + Currently only contains scaleExternalInterfaces. + + Checkout the following documentation for more information: + - https://truecharts.org/common/scaleexternalinterface/ + + - name: Persistence + description: | + Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types. + This storage is called Persistence since it is not deleted upon restart or upgrade of an application. + + Checkout the following documentation for more information: + - https://truecharts.org/common/persistence/ + - https://truecharts.org/scale/guides/nfs-share/ + - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath + + + - name: Ingress + description: | + Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names). + If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/) + It also requiresa DNS service to actually resolve the DNS name of the FQDN specified. + + Checkout the following documentation for more information: + - https://truecharts.org/common/ingress/ + + + - name: SecurityContext + description: | + The security settings for each application and/or permissions that each application may have for the files/directories created. + Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities. + + Unless necessary users are advised to keep this section mostly to defaults. + + Checkout the following documentation for more information: + - https://truecharts.org/common/securitycontext/ + + + - name: Resources + description: | + Resources limits that have been defined by each application are in this section. + Most will have a specific default that some users may want to change based on their specific hardware or needs. + + This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted. + + Checkout the following documentation for more information: + - https://truecharts.org/common/resources/ + + - name: Devices + description: | + These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts. + For clearity we've decided to seperate this from persistence on SCALE. + + Checkout the following documentation for more information: + - https://truecharts.org/common/persistence/device/ + - https://truecharts.org/scale/guides/pci-passthrough/ + + - name: Middlewares + description: Traefik Middlewares + + - name: StorageClass + description: | + StorageClasses define where to storage Storage. + + Checkout the following documentation for more information: + + - name: Metrics + description: | + Contains options to configure Prometheus metrics for the application. + + Checkout the following documentation for more information: + - https://truecharts.org/common/metrics/ + + + - name: Addons + description: | + Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults. + Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc. + + Generally not required for use but may be necessary or usefull at times for specific applications. + + Checkout the following documentation for more information: + - https://truecharts.org/common/addons/ + - https://truecharts.org/scale/guides/vpn-setup/ + + + - name: Experimental + description: | + Experimental Configuration Options + Often these are not fully flushed-out, could randomly break or might not work at-all. + + - name: Postgresql + description: | + For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first. + + Checkout the following documentation for more information: + - https://truecharts.org/common/cnpg/ + - https://truecharts.org/scale/guides/sql-export/ + - https://truecharts.org/scale/guides/recover-cnpg/ + + - name: Dependencies + description: | + contains dependency setting for which we, currently, do not have seperate catagories (yet) + + + - name: Documentation + description: | + We added this section to make everyone aware that OpenSource isn't always easy. + It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects. + + Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/ + We would also advice going over our https://truecharts.org/scale/guides/scale-intro/ + and many of the other documentation pages... + +portals: {} +questions: + - variable: global + group: General + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: credentialsList + group: General + label: "Credentials (Experimental)" + schema: + type: list + default: [] + items: + - variable: credentialsEntry + label: "Enter Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: "Name" + schema: + type: string + required: true + default: "" + - variable: type + label: Type + description: "Type of Credential" + schema: + type: string + default: "s3" + enum: + - value: s3 + description: s3 Storage + - variable: url + label: "url" + schema: + type: string + default: "" + required: true + - variable: path + label: "path" + description: "Path Prefix not needed for most cases" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + show_if: [["type", "=", "s3"]] + type: string + default: "" + required: true + - variable: accessKey + label: "accessKey" + schema: + show_if: [["type", "=", "s3"]] + type: string + default: "" + required: true + - variable: secretKey + label: "secretKey" + schema: + show_if: [["type", "=", "s3"]] + type: string + default: "" + required: true + - variable: encrKey + label: "encrKey" + description: "The Encryption key is needed for tools like volsync if not needed it will be ignored" + schema: + show_if: [["type", "=", "s3"]] + type: string + default: "MYSECRETPASSPHRASE" + required: true + + - variable: workload + group: "Workload" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: env + group: App Configuration + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: GENERATE_NEW_SAVE + label: Generate new save on startup + description: Generate a new save if one does not exist before starting the server + schema: + type: boolean + default: false + - variable: LOAD_LATEST_SAVE + label: Load latest save game + description: Load latest when true. Otherwise load SAVE_NAME + schema: + type: boolean + default: true + - variable: SAVE_NAME + label: Game save name (change this to use multiple saves) + description: Name to use for the save file + schema: + type: string + default: _autosave1 + - variable: TOKEN + label: Factorio.com Token + description: Import your factorio.com token + schema: + type: string + default: "" + - variable: UPDATE_MODS_ON_START + label: Update server mods BEFORE starting the server + description: If mods should be updated before starting the server + schema: + type: boolean + default: false + - variable: USERNAME + label: Factorio.com Username + description: Import your factorio.com username + schema: + type: string + default: "" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: TZ + label: Timezone + group: "General" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + + - variable: podOptions + group: "General" + label: "Global Pod Options (Advanced)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: expertPodOpts + label: "Expert - Pod Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + label: "Host Networking" + schema: + type: boolean + default: false + - variable: dnsConfig + label: "DNS Configuration" + schema: + type: dict + additional_attrs: true + attrs: + - variable: options + label: "Options" + schema: + type: list + default: [{"name": "ndots", "value": "1"}] + items: + - variable: optionsEntry + label: "Option Entry" + schema: + type: dict + additional_attrs: true + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + - variable: nameservers + label: "Nameservers" + schema: + type: list + default: [] + items: + - variable: nsEntry + label: "Nameserver Entry" + schema: + type: string + required: true + - variable: searches + label: "Searches" + schema: + type: list + default: [] + items: + - variable: searchEntry + label: "Search Entry" + schema: + type: string + required: true + + - variable: imagePullSecretList + group: "General" + label: "Image Pull Secrets" + schema: + type: list + default: [] + items: + - variable: pullsecretentry + label: "Pull Secret" + schema: + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + - variable: data + label: Data + schema: + type: dict + additional_attrs: true + attrs: + - variable: registry + label: "Registry" + schema: + type: string + required: true + default: "https://index.docker.io/v1/" + - variable: username + label: "Username" + schema: + type: string + required: true + default: "" + - variable: password + label: "Password" + schema: + type: string + required: true + private: true + default: "" + - variable: email + label: "Email" + schema: + type: string + required: true + default: "" + + - variable: service + group: Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Service + description: The Primary service on which the healthcheck runs, often the webUI + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: UDP port the server listens on + schema: + type: int + default: 34197 + required: true + - variable: rcon + label: Rcon Port + description: TCP port the rcon server listens on + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: rcon + label: Rcon Server 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: 27015 + required: true + - variable: scaleExternalInterface + description: 'Add External Interfaces (Experimental, might change or be removed without further notice)' + label: Add external Interfaces (Experimental) + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + additional_attrs: true + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + additional_attrs: true + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + + + - variable: serviceList + label: Add Manual Custom Services + group: Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: tcp + enum: + - value: http + description: HTTP + - value: https + description: HTTPS + - value: tcp + description: TCP + - value: udp + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: 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: pvc + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - value: iscsi + description: iSCSI Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage (Do NOT REDUCE after installation) + description: This value can ONLY be INCREASED after the installation + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: volsync + label: 'VolSync (Experimental)' + description: Backup, Restore and Synchronise PVC storage + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: VolSyncEntry + label: VolSync Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: "Name of backup configuration" + schema: + type: string + default: "" + required: true + - variable: type + label: Type VolSync/Backup + description: Sets the VolSync Type + schema: + type: string + default: "restic" + enum: + - value: restic + description: Restic + - variable: credentials + label: Credentials + description: "Name of credentials in the credentials section" + schema: + type: string + default: "" + required: true + - variable: dest + label: VolSync Destination (Restore) + description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: src + label: VolSync Source (Backup) + description: VolSYnc Source is the location where data is the sender and creates backups to storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + + - variable: persistenceList + label: Additional App Storage + group: Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: volsync + label: 'VolSync (Experimental)' + description: Backup, Restore and Synchronise PVC storage + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: VolSyncEntry + label: VolSync Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: "Name of backup configuration" + schema: + type: string + default: "" + required: true + - variable: type + label: Type VolSync/Backup + description: Sets the VolSync Type + schema: + type: string + default: "restic" + enum: + - value: restic + description: Restic + - variable: credentials + label: Credentials + description: "Name of credentials in the credentials section" + schema: + type: string + default: "" + required: true + - variable: dest + label: VolSync Destination (Restore) + description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: src + label: VolSync Source (Backup) + description: VolSYnc Source is the location where data is the sender and creates backups to storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name (Optional) + description: Defaults to chart name + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description (Optional) + description: Defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: icon + label: Icon (Optional) + description: Defaults to chart icon + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: widget + label: Widget Settings + schema: + type: dict + additional_attrs: true + show_if: [["enabled", "=", true]] + attrs: + - variable: enabled + label: Enable Widget + description: When disabled all widget annotations are skipped. + schema: + type: boolean + default: true + - variable: custom + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: API-key (key) + schema: + type: string + default: "" + - variable: customkv + label: Custom Options + schema: + type: list + default: [] + items: + - variable: option + label: Option + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + default: "" + required: true + - variable: value + label: Value + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: overrideService + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: namespace + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + + - variable: securityContext + group: SecurityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + + - variable: runAsUser + label: runAsUser + description: The UserID of the user running the application + schema: + type: int + default: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID of the user running the application + schema: + type: int + default: 0 + # Settings from questions.yaml get appended here on a per-app basis + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + show_if: [["runAsUser", "=", 0]] + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "0022" + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + # Settings from questions.yaml get appended here on a per-app basis + + - variable: fsGroup + label: fsGroup + description: The group that should own ALL storage. + schema: + type: int + default: 568 + - variable: resources + group: Resources + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + +# - variable: horizontalPodAutoscaler +# group: Experimental +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 + - variable: networkPolicy + group: Experimental + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: ingress + label: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: gluetun + description: Gluetun + - value: tailscale + description: Tailscale + - value: openvpn + description: OpenVPN (Deprecated) + - value: wireguard + description: Wireguard (Deprecated) + - variable: openvpn + label: OpenVPN Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + show_if: [["username", "!=", ""]] + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: string + show_if: [["type", "!=", "disabled"]] + default: "" + + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + max_length: 10240 + + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true + diff --git a/stable/factorio/8.1.0/templates/NOTES.txt b/stable/factorio/8.1.0/templates/NOTES.txt new file mode 100644 index 0000000000..efcb74cb77 --- /dev/null +++ b/stable/factorio/8.1.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/factorio/8.1.0/templates/common.yaml b/stable/factorio/8.1.0/templates/common.yaml new file mode 100644 index 0000000000..78d963fb16 --- /dev/null +++ b/stable/factorio/8.1.0/templates/common.yaml @@ -0,0 +1,2 @@ +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/factorio/8.1.0/values.yaml b/stable/factorio/8.1.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/factorio/app_versions.json b/stable/factorio/app_versions.json index 008301351b..05715ceb75 100644 --- a/stable/factorio/app_versions.json +++ b/stable/factorio/app_versions.json @@ -1,4 +1,5416 @@ { + "8.1.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/_work/catalog/catalog/stable/factorio/8.1.0", + "last_update": "2024-05-29 12:35:14", + "required_features": [ + "definitions/timezone", + "normalize/interfaceConfiguration", + "definitions/certificate", + "definitions/interface" + ], + "human_version": "stable_8.1.0", + "version": "8.1.0", + "chart_metadata": { + "annotations": { + "truecharts.org/category": "GameServers", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "stable", + "dependencies": [ + { + "name": "common", + "version": "23.0.10", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "A game in which you build and maintain factories.", + "home": "https://truecharts.org/charts/stable/factorio", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/factorio.webp", + "keywords": [ + "factorio", + "GameServers" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "factorio", + "sources": [ + "https://github.com/factoriotools/factorio-docker", + "https://github.com/truecharts/charts/tree/master/charts/stable/factorio", + "https://hub.docker.com/r/factoriotools/factorio" + ], + "type": "application", + "version": "8.1.0" + }, + "app_metadata": null, + "schema": { + "groups": [ + { + "name": "Image", + "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n" + }, + { + "name": "General", + "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n" + }, + { + "name": "Workload", + "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n" + }, + { + "name": "App Configuration", + "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n" + }, + { + "name": "Services", + "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n" + }, + { + "name": "Networking", + "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n" + }, + { + "name": "Persistence", + "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n" + }, + { + "name": "Ingress", + "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n" + }, + { + "name": "SecurityContext", + "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n" + }, + { + "name": "Resources", + "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n" + }, + { + "name": "Devices", + "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n" + }, + { + "name": "Middlewares", + "description": "Traefik Middlewares" + }, + { + "name": "StorageClass", + "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n" + }, + { + "name": "Metrics", + "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n" + }, + { + "name": "Addons", + "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n" + }, + { + "name": "Experimental", + "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n" + }, + { + "name": "Postgresql", + "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n" + }, + { + "name": "Dependencies", + "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n" + }, + { + "name": "Documentation", + "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n" + } + ], + "portals": {}, + "questions": [ + { + "variable": "global", + "group": "General", + "label": "Global Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "stopAll", + "label": "Stop All", + "description": "Stops All Running pods and hibernates cnpg", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "credentialsList", + "group": "General", + "label": "Credentials (Experimental)", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "credentialsEntry", + "label": "Enter Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "type", + "label": "Type", + "description": "Type of Credential", + "schema": { + "type": "string", + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "s3 Storage" + } + ] + } + }, + { + "variable": "url", + "label": "url", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "path", + "label": "path", + "description": "Path Prefix not needed for most cases", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "encrKey", + "label": "encrKey", + "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "MYSECRETPASSPHRASE", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "workload", + "group": "Workload", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "DaemonSet", + "description": "DaemonSet" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "DaemonSet" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "env", + "group": "App Configuration", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "GENERATE_NEW_SAVE", + "label": "Generate new save on startup", + "description": "Generate a new save if one does not exist before starting the server", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "LOAD_LATEST_SAVE", + "label": "Load latest save game", + "description": "Load latest when true. Otherwise load SAVE_NAME", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "SAVE_NAME", + "label": "Game save name (change this to use multiple saves)", + "description": "Name to use for the save file", + "schema": { + "type": "string", + "default": "_autosave1" + } + }, + { + "variable": "TOKEN", + "label": "Factorio.com Token", + "description": "Import your factorio.com token", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "UPDATE_MODS_ON_START", + "label": "Update server mods BEFORE starting the server", + "description": "If mods should be updated before starting the server", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "USERNAME", + "label": "Factorio.com Username", + "description": "Import your factorio.com username", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Extra Args", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "command", + "label": "Command", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "param", + "label": "Param", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "TZ", + "label": "Timezone", + "group": "General", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "podOptions", + "group": "General", + "label": "Global Pod Options (Advanced)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "expertPodOpts", + "label": "Expert - Pod Options", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostNetwork", + "label": "Host Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "options", + "label": "Options", + "schema": { + "type": "list", + "default": [ + { + "name": "ndots", + "value": "1" + } + ], + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "nameservers", + "label": "Nameservers", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "nsEntry", + "label": "Nameserver Entry", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "searches", + "label": "Searches", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "searchEntry", + "label": "Search Entry", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "imagePullSecretList", + "group": "General", + "label": "Image Pull Secrets", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "pullsecretentry", + "label": "Pull Secret", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "data", + "label": "Data", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "registry", + "label": "Registry", + "schema": { + "type": "string", + "required": true, + "default": "https://index.docker.io/v1/" + } + }, + { + "variable": "username", + "label": "Username", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "" + } + }, + { + "variable": "email", + "label": "Email", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "service", + "group": "Services", + "label": "Configure Service(s)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Service", + "description": "The Primary service on which the healthcheck runs, often the webUI", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Service Port Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "description": "UDP port the server listens on", + "schema": { + "type": "int", + "default": 34197, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rcon", + "label": "Rcon Port", + "description": "TCP port the rcon server listens on", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "rcon", + "label": "Rcon Server 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": 27015, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "scaleExternalInterface", + "description": "Add External Interfaces (Experimental, might change or be removed without further notice)", + "label": "Add external Interfaces (Experimental)", + "group": "Networking", + "schema": { + "type": "list", + "items": [ + { + "variable": "interfaceConfiguration", + "description": "Interface Configuration", + "label": "Interface Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "$ref": [ + "normalize/interfaceConfiguration" + ], + "attrs": [ + { + "variable": "hostInterface", + "description": "Please Specify Host Interface", + "label": "Host Interface", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/interface" + ], + "enum": [] + } + }, + { + "variable": "ipam", + "description": "Define how IP Address will be managed", + "label": "IP Address Management", + "schema": { + "additional_attrs": true, + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "type", + "description": "Specify type for IPAM", + "label": "IPAM Type", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "dhcp", + "description": "Use DHCP" + }, + { + "value": "static", + "description": "Use Static IP" + } + ] + } + }, + { + "variable": "staticIPConfigurations", + "label": "Static IP Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "=", + "static" + ] + ], + "items": [ + { + "variable": "staticIP", + "label": "Static IP", + "schema": { + "type": "ipaddr", + "cidr": true + } + } + ] + } + }, + { + "variable": "staticRoutes", + "label": "Static Routes", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "=", + "static" + ] + ], + "items": [ + { + "variable": "staticRouteConfiguration", + "label": "Static Route Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "destination", + "label": "Destination", + "schema": { + "type": "ipaddr", + "cidr": true, + "required": true + } + }, + { + "variable": "gateway", + "label": "Gateway", + "schema": { + "type": "ipaddr", + "cidr": false, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "serviceList", + "label": "Add Manual Custom Services", + "group": "Services", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "serviceListEntry", + "label": "Custom Service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + }, + { + "value": "Simple", + "description": "Deprecated CHANGE THIS" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "advancedsvcset", + "label": "Show Advanced Service Settings", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "externalIPs", + "label": "External IP's", + "description": "External IP's", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "externalIP", + "label": "External IP", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "ipFamilyPolicy", + "label": "IP Family Policy", + "description": "Specify the IP Policy", + "schema": { + "type": "string", + "default": "SingleStack", + "enum": [ + { + "value": "SingleStack", + "description": "SingleStack" + }, + { + "value": "PreferDualStack", + "description": "PreferDualStack" + }, + { + "value": "RequireDualStack", + "description": "RequireDualStack" + } + ] + } + }, + { + "variable": "ipFamilies", + "label": "IP Families", + "description": "(Advanced) The IP Families that should be used", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ipFamily", + "label": "IP Family", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "portsList", + "label": "Additional Service Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsListEntry", + "label": "Custom ports", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Port", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Port Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "protocol", + "label": "Port Type", + "schema": { + "type": "string", + "default": "tcp", + "enum": [ + { + "value": "http", + "description": "HTTP" + }, + { + "value": "https", + "description": "HTTPS" + }, + { + "value": "tcp", + "description": "TCP" + }, + { + "value": "udp", + "description": "UDP" + } + ] + } + }, + { + "variable": "targetPort", + "label": "Target Port", + "description": "This port exposes the container port on the service", + "schema": { + "type": "int", + "required": true + } + }, + { + "variable": "port", + "label": "Container Port", + "schema": { + "type": "int", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "persistence", + "label": "Integrated Persistent Storage", + "description": "Integrated Persistent Storage", + "group": "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": "pvc", + "enum": [ + { + "value": "pvc", + "description": "PVC" + }, + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "emptyDir", + "description": "emptyDir" + }, + { + "value": "nfs", + "description": "NFS Share" + }, + { + "value": "iscsi", + "description": "iSCSI Share" + } + ] + } + }, + { + "variable": "server", + "label": "NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "Path on NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "iscsi", + "label": "iSCSI Options", + "schema": { + "show_if": [ + [ + "type", + "=", + "iscsi" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "targetPortal", + "label": "targetPortal", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "iqn", + "label": "iqn", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "lun", + "label": "lun", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "authSession", + "label": "authSession", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "authDiscovery", + "label": "authDiscovery", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "autoPermissions", + "label": "Automatic Permissions Configuration", + "description": "Automatically set permissions", + "schema": { + "show_if": [ + [ + "type", + "!=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "chown", + "label": "Run CHOWN", + "description": "It will run CHOWN on the path with the given fsGroup\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "chmod", + "label": "Run CHMOD", + "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", + "schema": { + "type": "string", + "valid_chars": "[0-9]{3}", + "default": "" + } + }, + { + "variable": "recursive", + "label": "Recursive", + "description": "It will run CHOWN and CHMOD recursively\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "type": "hostpath" + } + }, + { + "variable": "medium", + "label": "EmptyDir Medium", + "schema": { + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "Memory", + "description": "Memory" + } + ] + } + }, + { + "variable": "size", + "label": "Size quotum of Storage (Do NOT REDUCE after installation)", + "description": "This value can ONLY be INCREASED after the installation", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "256Gi" + } + }, + { + "variable": "storageClass", + "label": "storageClass (Advanced)", + "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "volsync", + "label": "VolSync (Experimental)", + "description": "Backup, Restore and Synchronise PVC storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "VolSyncEntry", + "label": "VolSync Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name of backup configuration", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "type", + "label": "Type VolSync/Backup", + "description": "Sets the VolSync Type", + "schema": { + "type": "string", + "default": "restic", + "enum": [ + { + "value": "restic", + "description": "Restic" + } + ] + } + }, + { + "variable": "credentials", + "label": "Credentials", + "description": "Name of credentials in the credentials section", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "dest", + "label": "VolSync Destination (Restore)", + "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "src", + "label": "VolSync Source (Backup)", + "description": "VolSYnc Source is the location where data is the sender and creates backups to storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "static", + "label": "Static Fixed PVC Bindings (Experimental)", + "description": "Link a PVC to a specific storage location", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "mode", + "label": "mode", + "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "smb", + "description": "smb" + }, + { + "value": "nfs", + "description": "nfs" + } + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "server to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "myserver" + } + }, + { + "variable": "share", + "label": "Share", + "description": "share to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "/myshare" + } + }, + { + "variable": "user", + "label": "User", + "description": "connecting user", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "myuser" + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "user domain", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "description": "connecting password", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "volumeSnapshots", + "label": "Volume Snapshots (Experimental)", + "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "volumeSnapshotEntry", + "label": "Custom volumeSnapshot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", + "schema": { + "type": "string", + "default": "mysnapshot", + "required": true + } + }, + { + "variable": "volumeSnapshotClassName", + "label": "volumeSnapshot Class Name (Advanced)", + "description": "For use with PVCs using a non-default storageClass", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "persistenceList", + "label": "Additional App Storage", + "group": "Persistence", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "persistenceListEntry", + "label": "Custom Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the storage", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Type of Storage", + "description": "Sets the persistence type, Anything other than PVC could break rollback!", + "schema": { + "type": "string", + "default": "hostPath", + "enum": [ + { + "value": "pvc", + "description": "PVC" + }, + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "emptyDir", + "description": "emptyDir" + }, + { + "value": "nfs", + "description": "NFS Share" + } + ] + } + }, + { + "variable": "server", + "label": "NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "Path on NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "iscsi", + "label": "iSCSI Options", + "schema": { + "show_if": [ + [ + "type", + "=", + "iscsi" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "targetPortal", + "label": "targetPortal", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "iqn", + "label": "iqn", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "lun", + "label": "lun", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "authSession", + "label": "authSession", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "authDiscovery", + "label": "authDiscovery", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "autoPermissions", + "label": "Automatic Permissions Configuration", + "description": "Automatically set permissions", + "schema": { + "show_if": [ + [ + "type", + "!=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "chown", + "label": "Run CHOWN", + "description": "It will run CHOWN on the path with the given fsGroup\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "chmod", + "label": "Run CHMOD", + "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", + "schema": { + "type": "string", + "valid_chars": "[0-9]{3}", + "default": "" + } + }, + { + "variable": "recursive", + "label": "Recursive", + "description": "It will run CHOWN and CHMOD recursively\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "type": "hostpath" + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "type": "string", + "default": "", + "required": true, + "valid_chars": "^\\/([a-zA-Z0-9._-]+(\\s?[a-zA-Z0-9._-]+|\\/?))+$" + } + }, + { + "variable": "medium", + "label": "EmptyDir Medium", + "schema": { + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "Memory", + "description": "Memory" + } + ] + } + }, + { + "variable": "size", + "label": "Size Quotum of Storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "256Gi" + } + }, + { + "variable": "storageClass", + "label": "storageClass (Advanced)", + "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "volsync", + "label": "VolSync (Experimental)", + "description": "Backup, Restore and Synchronise PVC storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "VolSyncEntry", + "label": "VolSync Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name of backup configuration", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "type", + "label": "Type VolSync/Backup", + "description": "Sets the VolSync Type", + "schema": { + "type": "string", + "default": "restic", + "enum": [ + { + "value": "restic", + "description": "Restic" + } + ] + } + }, + { + "variable": "credentials", + "label": "Credentials", + "description": "Name of credentials in the credentials section", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "dest", + "label": "VolSync Destination (Restore)", + "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "src", + "label": "VolSync Source (Backup)", + "description": "VolSYnc Source is the location where data is the sender and creates backups to storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "static", + "label": "Static Fixed PVC Bindings (Experimental)", + "description": "Link a PVC to a specific storage location", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "mode", + "label": "mode", + "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "smb", + "description": "smb" + }, + { + "value": "nfs", + "description": "nfs" + } + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "server to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "myserver" + } + }, + { + "variable": "share", + "label": "Share", + "description": "share to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "/myshare" + } + }, + { + "variable": "user", + "label": "User", + "description": "connecting user", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "myuser" + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "user domain", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "description": "connecting password", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "volumeSnapshots", + "label": "Volume Snapshots (Experimental)", + "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "volumeSnapshotEntry", + "label": "Custom volumeSnapshot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", + "schema": { + "type": "string", + "default": "mysnapshot", + "required": true + } + }, + { + "variable": "volumeSnapshotClassName", + "label": "volumeSnapshot Class Name (Advanced)", + "description": "For use with PVCs using a non-default storageClass", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "", + "group": "Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [ + { + "path": "/", + "pathType": "Prefix" + } + ], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests (advanced)", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace (optional)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + }, + { + "variable": "homepage", + "label": "Homepage", + "description": "Connect ingress with Homepage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "name", + "label": "Name (Optional)", + "description": "Defaults to chart name", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "description", + "label": "Description (Optional)", + "description": "Defaults to chart description", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "icon", + "label": "Icon (Optional)", + "description": "Defaults to chart icon", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "group", + "label": "Group", + "schema": { + "type": "string", + "required": true, + "default": "default", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "widget", + "label": "Widget Settings", + "schema": { + "type": "dict", + "additional_attrs": true, + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "attrs": [ + { + "variable": "enabled", + "label": "Enable Widget", + "description": "When disabled all widget annotations are skipped.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "custom", + "label": "Options", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "key", + "label": "API-key (key)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "customkv", + "label": "Custom Options", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "option", + "label": "Option", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "ingressClassName", + "label": "(Advanced/Optional) IngressClass Name", + "schema": { + "type": "string", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": [], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Certificate Secret (Advanced)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingressList", + "label": "Add Manual Custom Ingresses", + "group": "Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ingressListEntry", + "label": "Custom Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "ingressClassName", + "label": "IngressClass Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + }, + { + "variable": "overrideService", + "label": "Linked Service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Service Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "port", + "label": "Service Port", + "schema": { + "type": "int" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Secret (Advanced)", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + }, + { + "variable": "homepage", + "label": "Homepage", + "description": "Connect ingress with Homepage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "name", + "label": "Name", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "description", + "label": "Description", + "description": "defaults to chart description", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "group", + "label": "Group", + "schema": { + "type": "string", + "required": true, + "default": "default", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "securityContext", + "group": "SecurityContext", + "label": "Security Context", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "container", + "label": "Container", + "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 of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "PUID", + "label": "Process User ID - PUID", + "description": "When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps", + "schema": { + "type": "int", + "show_if": [ + [ + "runAsUser", + "=", + 0 + ] + ], + "default": 568 + } + }, + { + "variable": "UMASK", + "label": "UMASK", + "description": "When supported by the container, this sets the UMASK for the App. Not supported by all Apps", + "schema": { + "type": "string", + "default": "0022" + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "privileged", + "label": "Privileged mode", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "readOnlyRootFilesystem", + "label": "ReadOnly Root Filesystem", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + }, + { + "variable": "pod", + "label": "Pod", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "fsGroupChangePolicy", + "label": "When should we take ownership?", + "schema": { + "type": "string", + "default": "OnRootMismatch", + "enum": [ + { + "value": "OnRootMismatch", + "description": "OnRootMismatch" + }, + { + "value": "Always", + "description": "Always" + } + ] + } + }, + { + "variable": "supplementalGroups", + "label": "Supplemental Groups", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "supplementalGroupsEntry", + "label": "Supplemental Group", + "schema": { + "type": "int" + } + } + ] + } + } + ] + } + }, + { + "variable": "fsGroup", + "label": "fsGroup", + "description": "The group that should own ALL storage.", + "schema": { + "type": "int", + "default": 568 + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "networkPolicy", + "group": "Experimental", + "label": "(Advanced) Network Policy", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "netPolicyEntry", + "label": "Network Policy Entry", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "policyType", + "label": "Policy Type", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "ingress", + "description": "Ingress" + }, + { + "value": "egress", + "description": "Egress" + }, + { + "value": "ingress-egress", + "description": "Ingress and Egress" + } + ] + } + }, + { + "variable": "egress", + "label": "Egress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "egressEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "to", + "label": "To", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "toEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ipBlock", + "label": "IP Block", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cidr", + "label": "CIDR", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "except", + "label": "Except", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "exceptint", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "namespaceSelector", + "label": "Namespace Selector", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "podSelector", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ports", + "label": "Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int" + } + }, + { + "variable": "endPort", + "label": "End Port", + "schema": { + "type": "int" + } + }, + { + "variable": "protocol", + "label": "Protocol", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "TCP", + "description": "TCP" + }, + { + "value": "UDP", + "description": "UDP" + }, + { + "value": "SCTP", + "description": "SCTP" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ingressEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "from", + "label": "From", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "fromEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ipBlock", + "label": "IP Block", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cidr", + "label": "CIDR", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "except", + "label": "Except", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "exceptint", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "namespaceSelector", + "label": "Namespace Selector", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "podSelector", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ports", + "label": "Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int" + } + }, + { + "variable": "endPort", + "label": "End Port", + "schema": { + "type": "int" + } + }, + { + "variable": "protocol", + "label": "Protocol", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "TCP", + "description": "TCP" + }, + { + "value": "UDP", + "description": "UDP" + }, + { + "value": "SCTP", + "description": "SCTP" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "addons", + "group": "Addons", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "codeserver", + "label": "Codeserver", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "service", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "NodePort", + "description": "Deprecated CHANGE THIS" + }, + { + "value": "ClusterIP", + "description": "ClusterIP" + }, + { + "value": "LoadBalancer", + "description": "LoadBalancer" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "codeserver", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int", + "default": 36107 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [ + { + "path": "/", + "pathType": "Prefix" + } + ], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests (advanced)", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace (optional)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "ingressClassName", + "label": "(Advanced/Optional) IngressClass Name", + "schema": { + "type": "string", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": [], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Certificate Secret (Advanced)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "scaleCert", + "label": "Use TrueNAS SCALE Certificate (Deprecated)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "envList", + "label": "Codeserver Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "netshoot", + "label": "Netshoot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "envList", + "label": "Netshoot Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "vpn", + "label": "VPN", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "gluetun", + "description": "Gluetun" + }, + { + "value": "tailscale", + "description": "Tailscale" + }, + { + "value": "openvpn", + "description": "OpenVPN (Deprecated)" + }, + { + "value": "wireguard", + "description": "Wireguard (Deprecated)" + } + ] + } + }, + { + "variable": "openvpn", + "label": "OpenVPN Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "type", + "=", + "openvpn" + ] + ], + "attrs": [ + { + "variable": "username", + "label": "Authentication Username (Optional)", + "description": "Authentication Username, Optional", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "Authentication Password", + "description": "Authentication Credentials", + "schema": { + "type": "string", + "show_if": [ + [ + "username", + "!=", + "" + ] + ], + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "tailscale", + "label": "Tailscale Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "type", + "=", + "tailscale" + ] + ], + "attrs": [ + { + "variable": "authkey", + "label": "Authentication Key", + "description": "Provide an auth key to automatically authenticate the node as your user account.", + "schema": { + "type": "string", + "private": true, + "default": "" + } + }, + { + "variable": "auth_once", + "label": "Auth Once", + "description": "Only attempt to log in if not already logged in.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "accept_dns", + "label": "Accept DNS", + "description": "Accept DNS configuration from the admin console.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "userspace", + "label": "Userspace", + "description": "Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "routes", + "label": "Routes", + "description": "Expose physical subnet routes to your entire Tailscale network.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "dest_ip", + "label": "Destination IP", + "description": "Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "sock5_server", + "label": "Sock5 Server", + "description": "The address on which to listen for SOCKS5 proxying into the tailscale net.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "outbound_http_proxy_listen", + "label": "Outbound HTTP Proxy Listen", + "description": "The address on which to listen for HTTP proxying into the tailscale net.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "extra_args", + "label": "Extra Args", + "description": "Extra Args", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "daemon_extra_args", + "label": "Tailscale Daemon Extra Args", + "description": "Tailscale Daemon Extra Args", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "killSwitch", + "label": "Enable Killswitch", + "schema": { + "type": "boolean", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": true + } + }, + { + "variable": "excludedNetworks_IPv4", + "label": "Killswitch Excluded IPv4 networks", + "description": "List of Killswitch Excluded IPv4 Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "networkv4", + "label": "IPv4 Network", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "excludedNetworks_IPv6", + "label": "Killswitch Excluded IPv6 networks", + "description": "List of Killswitch Excluded IPv6 Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "networkv6", + "label": "IPv6 Network", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "configFile", + "label": "VPN Config File Location", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": "" + } + }, + { + "variable": "envList", + "label": "VPN Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true, + "max_length": 10240 + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "docs", + "group": "Documentation", + "label": "Please read the documentation at https://truecharts.org", + "description": "Please read the documentation at
https://truecharts.org", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "confirmDocs", + "label": "I have checked the documentation", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "donateNag", + "group": "Documentation", + "label": "Please consider supporting TrueCharts, see https://truecharts.org/sponsor", + "description": "Please consider supporting TrueCharts, see
https://truecharts.org/sponsor", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "confirmDonate", + "label": "I have considered donating", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + } + ] + } + } + ] + }, + "app_readme": "

A game in which you build and maintain factories.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/factorio

\n
\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

", + "detailed_readme": "
\n

title: README

\n

General Info

\n

TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible

\n

For more information about this Chart, please check the docs on the TrueCharts website

\n

This chart is not maintained by the upstream project and any issues with the chart should be raised here

\n

Installation

\n

Helm-Chart installation

\n

To install TrueCharts Helm charts using Helm, you can use our OCI Repository.

\n

helm install mychart oci://tccr.io/truecharts/CHARTNAME

\n

For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/

\n

TrueNAS SCALE Apps

\n

For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.

\n

Chart Specific Guides and information

\n

All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/factorio

\n

Configuration Options

\n

Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE

\n

To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/factorio/values.yaml

\n

All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/

\n

For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml

\n

Support

\n\n
\n

Sponsor TrueCharts

\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

\n

All Rights Reserved - The TrueCharts Project

", + "changelog": "

for the complete changelog, please refer to the website

\n

Important:

" + }, "8.0.9": { "healthy": true, "supported": true, diff --git a/stable/rstudio/6.9.0/ix_values.yaml b/stable/rstudio/6.9.0/ix_values.yaml index ceab2c9a42568da90907b113783334af12b30525..c7c99838416b80dcf4fc0c10a3eefe597c607c1d 100644 GIT binary patch literal 875 Scmc~~7zLvtFd71M2mt_UT>xqT literal 875 zcmb7CU2mH(6n)RHu=)cCA!LA`#@4ipR4oXa?Qt^ZlAs!2WSeeL)&D*lD`cH2O?%Clpf9Vv-} zI0!%L6N@$xDh~};npwG5! zPf5#!_NCM)bA7LH94HB=niF!+*1`hz_T2dzz4i63E}8a^gj`{_HAhjBCTTKxO^`x^ z90esOV}=vu(7U*8%Oc~yPim)7C>zxu=7 hwcPI?t@mC2P;KAN9ja~l{)}V(m1y2ZFn_cu*>58x0%-sM From e7e2415fdcde900c181160f9b7edea852a530b02 Mon Sep 17 00:00:00 2001 From: Niborian <143342302+Niborian@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:38:03 +0000 Subject: [PATCH 2/5] fixed version --- catalog.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/catalog.json b/catalog.json index 6d5d14aa09..7cf8990eb1 100644 --- a/catalog.json +++ b/catalog.json @@ -7046,8 +7046,8 @@ "location": "/home/runner/_work/catalog/catalog/stable/factorio", "latest_version": "8.0.9", "latest_app_version": "stable", - "latest_human_version": "stable_8.0.9", - "last_update": "2024-05-29 12:35:14", + "latest_human_version": "stable_8.1.0", + "last_update": "2024-08-26 19:32:14", "name": "factorio", "recommended": false, "title": "Factorio", From 82ca6fc75eb6464b732bfde3cad9946345f4842e Mon Sep 17 00:00:00 2001 From: Niborian <143342302+Niborian@users.noreply.github.com> Date: Mon, 26 Aug 2024 19:01:58 +0000 Subject: [PATCH 3/5] Removed rstudio version 6.9.0 due to it having issues --- stable/rstudio/6.9.0/.helmignore | 30 - stable/rstudio/6.9.0/CHANGELOG.md | 3 - stable/rstudio/6.9.0/Chart.yaml | 36 - stable/rstudio/6.9.0/README.md | 56 - stable/rstudio/6.9.0/app-changelog.md | 63 - stable/rstudio/6.9.0/app-readme.md | 8 - .../rstudio/6.9.0/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/rstudio/6.9.0/icon-small.webp | Bin 694 -> 0 bytes stable/rstudio/6.9.0/icon.webp | Bin 3250 -> 0 bytes stable/rstudio/6.9.0/ix_values.yaml | Bin 875 -> 0 bytes stable/rstudio/6.9.0/questions.yaml | 3087 ---------- stable/rstudio/6.9.0/templates/common.yaml | 2 - stable/rstudio/6.9.0/values.yaml | 0 stable/rstudio/app_versions.json | 5200 ----------------- 14 files changed, 8485 deletions(-) delete mode 100644 stable/rstudio/6.9.0/.helmignore delete mode 100644 stable/rstudio/6.9.0/CHANGELOG.md delete mode 100644 stable/rstudio/6.9.0/Chart.yaml delete mode 100644 stable/rstudio/6.9.0/README.md delete mode 100644 stable/rstudio/6.9.0/app-changelog.md delete mode 100644 stable/rstudio/6.9.0/app-readme.md delete mode 100644 stable/rstudio/6.9.0/charts/common-20.3.11.tgz delete mode 100644 stable/rstudio/6.9.0/icon-small.webp delete mode 100644 stable/rstudio/6.9.0/icon.webp delete mode 100644 stable/rstudio/6.9.0/ix_values.yaml delete mode 100644 stable/rstudio/6.9.0/questions.yaml delete mode 100644 stable/rstudio/6.9.0/templates/common.yaml delete mode 100644 stable/rstudio/6.9.0/values.yaml diff --git a/stable/rstudio/6.9.0/.helmignore b/stable/rstudio/6.9.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/rstudio/6.9.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/rstudio/6.9.0/CHANGELOG.md b/stable/rstudio/6.9.0/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/rstudio/6.9.0/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/rstudio/6.9.0/Chart.yaml b/stable/rstudio/6.9.0/Chart.yaml deleted file mode 100644 index 11a46c79b4..0000000000 --- a/stable/rstudio/6.9.0/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: Productivity - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.11" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 4.4.0 -dependencies: - - name: common - version: 20.3.11 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Integrated development environment for R, a programming language for statistical computing and graphics. -home: https://truecharts.org/charts/stable/rstudio -icon: https://truecharts.org/img/hotlink-ok/chart-icons/rstudio.webp -keywords: - - rstudio - - Productivity -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: rstudio -sources: - - https://github.com/rocker-org/rocker-versioned2 - - https://github.com/truecharts/charts/tree/master/charts/stable/rstudio - - https://hub.docker.com/r/rocker/rstudio -type: application -version: 6.9.0 diff --git a/stable/rstudio/6.9.0/README.md b/stable/rstudio/6.9.0/README.md deleted file mode 100644 index 53b64b1399..0000000000 --- a/stable/rstudio/6.9.0/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps. -Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible - -For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/rstudio) - -**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)** - -## Installation - -### Helm-Chart installation - -To install TrueCharts Helm charts using Helm, you can use our OCI Repository. - -`helm install mychart oci://tccr.io/truecharts/CHARTNAME` - -For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/ - - -### TrueNAS SCALE Apps - -For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -All our Charts use a shared "common" library chart that contains most of the templating and options. -For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/ - -## Chart Specific Guides and information - -All our charts have dedicated documentation pages. -The documentation for this chart can be found here: -https://truecharts.org/charts/stable/rstudio - -## Support - - -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/general/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/rstudio/6.9.0/app-changelog.md b/stable/rstudio/6.9.0/app-changelog.md deleted file mode 100644 index 55b496b4a5..0000000000 --- a/stable/rstudio/6.9.0/app-changelog.md +++ /dev/null @@ -1,63 +0,0 @@ - - -## [rstudio-6.9.0](https://github.com/truecharts/charts/compare/rstudio-6.6.0...rstudio-6.9.0) (2024-04-26) - -### Chore - - - -- bump everything to regenerate readme's and site index - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image rocker/rstudio to v[@a0c5844](https://github.com/a0c5844) by renovate ([#21285](https://github.com/truecharts/charts/issues/21285)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image rocker/rstudio to v4.4.0[@499d717](https://github.com/499d717) by renovate ([#21292](https://github.com/truecharts/charts/issues/21292)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image rocker/rstudio to 4.3.3[@a2c1143](https://github.com/a2c1143) by renovate ([#19973](https://github.com/truecharts/charts/issues/19973)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image rocker/rstudio to 4.3.3[@223204c](https://github.com/223204c) by renovate ([#19283](https://github.com/truecharts/charts/issues/19283)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/rstudio/6.9.0/app-readme.md b/stable/rstudio/6.9.0/app-readme.md deleted file mode 100644 index 36c41d7394..0000000000 --- a/stable/rstudio/6.9.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Integrated development environment for R, a programming language for statistical computing and graphics. - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/rstudio](https://truecharts.org/charts/stable/rstudio) - ---- - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/stable/rstudio/6.9.0/charts/common-20.3.11.tgz b/stable/rstudio/6.9.0/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/rstudio/6.9.0/icon-small.webp b/stable/rstudio/6.9.0/icon-small.webp deleted file mode 100644 index 0f6fd7085e48e950041657ef21fb7fa5cd661aaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 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 diff --git a/stable/rstudio/6.9.0/ix_values.yaml b/stable/rstudio/6.9.0/ix_values.yaml deleted file mode 100644 index c7c99838416b80dcf4fc0c10a3eefe597c607c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 Scmc~~7zLvtFd71M2mt_UT>xqT diff --git a/stable/rstudio/6.9.0/questions.yaml b/stable/rstudio/6.9.0/questions.yaml deleted file mode 100644 index a3dda83c1c..0000000000 --- a/stable/rstudio/6.9.0/questions.yaml +++ /dev/null @@ -1,3087 +0,0 @@ -groups: - - name: Image - description: | - Configured the images to be used for the Chart. - It's wise to use "digest pinned" tags and to avoid using "latest". - - Checkout the following documentation for more information: - - https://truecharts.org/common/#images - - - - name: General - description: | - For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general. - - Checkout the following documentation for more information: - - https://truecharts.org/common/global/ - - https://truecharts.org/common/#tz - - https://truecharts.org/common/podoptions/ - - Image Pull Secrets - - - - name: Workload - description: | - These settings configure how the actual Pods and containers are running. - Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container. - - Checkout the following documentation for more information: - - https://truecharts.org/common/workload/ - - https://truecharts.org/common/container/ - - - - name: App Configuration - description: | - Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application. - Most options should have a Tooltip (Circled Question Mark) to further describe said option. - - To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/ - - - name: Services - description: | - Service and Networking options for any applications are contained here. - Some applications may have complicated networking setups with multiple options or some may have no options here at all. - - Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes. - - Checkout the following documentation for more information: - - https://truecharts.org/common/service/ - - - name: Networking - description: | - Contains advanced networking options that are not actively supported by the TrueCharts team. - Currently only contains scaleExternalInterfaces. - - Checkout the following documentation for more information: - - https://truecharts.org/common/scaleexternalinterface/ - - - name: Persistence - description: | - Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types. - This storage is called Persistence since it is not deleted upon restart or upgrade of an application. - - Checkout the following documentation for more information: - - https://truecharts.org/common/persistence/ - - https://truecharts.org/scale/guides/nfs-share/ - - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath - - - - name: Ingress - description: | - Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names). - If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/) - It also requiresa DNS service to actually resolve the DNS name of the FQDN specified. - - Checkout the following documentation for more information: - - https://truecharts.org/common/ingress/ - - - - name: SecurityContext - description: | - The security settings for each application and/or permissions that each application may have for the files/directories created. - Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities. - - Unless necessary users are advised to keep this section mostly to defaults. - - Checkout the following documentation for more information: - - https://truecharts.org/common/securitycontext/ - - - - name: Resources - description: | - Resources limits that have been defined by each application are in this section. - Most will have a specific default that some users may want to change based on their specific hardware or needs. - - This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted. - - Checkout the following documentation for more information: - - https://truecharts.org/common/resources/ - - - name: Devices - description: | - These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts. - For clearity we've decided to seperate this from persistence on SCALE. - - Checkout the following documentation for more information: - - https://truecharts.org/common/persistence/device/ - - https://truecharts.org/scale/guides/pci-passthrough/ - - - name: Middlewares - description: Traefik Middlewares - - - name: StorageClass - description: | - StorageClasses define where to storage Storage. - - Checkout the following documentation for more information: - - - name: Metrics - description: | - Contains options to configure Prometheus metrics for the application. - - Checkout the following documentation for more information: - - https://truecharts.org/common/metrics/ - - - - name: Addons - description: | - Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults. - Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc. - - Generally not required for use but may be necessary or usefull at times for specific applications. - - Checkout the following documentation for more information: - - https://truecharts.org/common/addons/ - - https://truecharts.org/scale/guides/vpn-setup/ - - - - name: Experimental - description: | - Experimental Configuration Options - Often these are not fully flushed-out, could randomly break or might not work at-all. - - - name: Postgresql - description: | - For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first. - - Checkout the following documentation for more information: - - https://truecharts.org/common/cnpg/ - - https://truecharts.org/scale/guides/sql-export/ - - https://truecharts.org/scale/guides/recover-cnpg/ - - - name: Dependencies - description: | - contains dependency setting for which we, currently, do not have seperate catagories (yet) - - - - name: Documentation - description: | - We added this section to make everyone aware that OpenSource isn't always easy. - It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects. - - Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/ - We would also advice going over our https://truecharts.org/scale/guides/scale-intro/ - and many of the other documentation pages... - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: USER - label: User Name - description: Optionally set a User Name - schema: - type: string - default: "" - - variable: PASSWORD - label: User Password - description: Optionally set a Password - schema: - type: string - private: true - default: "" - - variable: DISABLE_AUTH - label: Disable Auth - description: Disable authentication for RStudio Server. - schema: - type: boolean - default: false - - variable: ROOT - label: Root - description: If set to true, the default non-root user will be added to the sudoers group when the server init process. - schema: - type: boolean - default: false - - variable: service - group: Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Service" - description: "The Primary service on which the healthcheck runs, often the webUI" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Service - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "Service's Port(s) Configuration" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Service Port Configuration" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: "Port" - description: "This port exposes the container port on the service" - schema: - type: int - default: 8787 - required: true - - variable: scaleExternalInterface - description: 'Add External Interfaces (Experimental, might change or be removed without further notice)' - label: Add external Interfaces (Experimental) - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - - variable: serviceList - label: Add Manual Custom Services - group: Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Persistence - schema: - additional_attrs: true - type: dict - attrs: - - - variable: config - label: "App Config Storage" - description: "Stores the Application Configuration." - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: pvc - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - value: iscsi - description: iSCSI Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size quotum of Storage (Do NOT REDUCE after installation) - description: This value can ONLY be INCREASED after the installation - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: disabled - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: workspace - label: "App WorkSpace Storage" - description: "Stores the Application WorkSpace." - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: pvc - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - value: iscsi - description: iSCSI Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size quotum of Storage (Do NOT REDUCE after installation) - description: This value can ONLY be INCREASED after the installation - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: disabled - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: persistenceList - label: Additional App Storage - group: Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: SecurityContext - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 0 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID of the user running the application" - schema: - type: int - default: 0 - # Settings from questions.yaml get appended here on a per-app basis - - variable: PUID - label: Process User ID - PUID - description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps - schema: - type: int - show_if: [["runAsUser", "=", 0]] - default: 568 - - variable: UMASK - label: UMASK - description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps - schema: - type: string - default: "0022" - - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: privileged - label: "Privileged mode" - schema: - type: boolean - default: false - - variable: readOnlyRootFilesystem - label: "ReadOnly Root Filesystem" - schema: - type: boolean - default: true - - - variable: pod - label: Pod - schema: - additional_attrs: true - type: dict - attrs: - - variable: fsGroupChangePolicy - label: "When should we take ownership?" - schema: - type: string - default: OnRootMismatch - enum: - - value: OnRootMismatch - description: OnRootMismatch - - value: Always - description: Always - - variable: supplementalGroups - label: Supplemental Groups - schema: - type: list - default: [] - items: - - variable: supplementalGroupsEntry - label: Supplemental Group - schema: - type: int - # Settings from questions.yaml get appended here on a per-app basis - - - variable: fsGroup - label: "fsGroup" - description: "The group that should own ALL storage." - schema: - type: int - default: 568 - - variable: resources - group: Resources - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - -# - variable: horizontalPodAutoscaler -# group: Experimental -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Experimental - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/rstudio/6.9.0/templates/common.yaml b/stable/rstudio/6.9.0/templates/common.yaml deleted file mode 100644 index 78d963fb16..0000000000 --- a/stable/rstudio/6.9.0/templates/common.yaml +++ /dev/null @@ -1,2 +0,0 @@ -{{/* Render the templates */}} -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/rstudio/6.9.0/values.yaml b/stable/rstudio/6.9.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/rstudio/app_versions.json b/stable/rstudio/app_versions.json index 1e653a4f6e..356397dd09 100644 --- a/stable/rstudio/app_versions.json +++ b/stable/rstudio/app_versions.json @@ -16459,5206 +16459,6 @@ "detailed_readme": "
\n

title: README

\n

General Info

\n

TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible

\n

For more information about this Chart, please check the docs on the TrueCharts website

\n

This chart is not maintained by the upstream project and any issues with the chart should be raised here

\n

Installation

\n

Helm-Chart installation

\n

To install TrueCharts Helm charts using Helm, you can use our OCI Repository.

\n

helm install mychart oci://tccr.io/truecharts/CHARTNAME

\n

For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/

\n

TrueNAS SCALE Apps

\n

For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.

\n

Configuration Options

\n

To view the chart specific options, please view Values.yaml included in the chart.

\n

All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/

\n

Chart Specific Guides and information

\n

All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/rstudio

\n

Support

\n\n
\n

Sponsor TrueCharts

\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

\n

All Rights Reserved - The TrueCharts Project

", "changelog": "

for the complete changelog, please refer to the website

\n

Important:

" }, - "6.9.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/rstudio/6.9.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "4.4.0_6.9.0", - "version": "6.9.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "Productivity", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.11", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "4.4.0", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Integrated development environment for R, a programming language for statistical computing and graphics.", - "home": "https://truecharts.org/charts/stable/rstudio", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/rstudio.webp", - "keywords": [ - "rstudio", - "Productivity" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "rstudio", - "sources": [ - "https://github.com/rocker-org/rocker-versioned2", - "https://github.com/truecharts/charts/tree/master/charts/stable/rstudio", - "https://hub.docker.com/r/rocker/rstudio" - ], - "type": "application", - "version": "6.9.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Image", - "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n" - }, - { - "name": "General", - "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n" - }, - { - "name": "Workload", - "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n" - }, - { - "name": "App Configuration", - "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n" - }, - { - "name": "Services", - "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n" - }, - { - "name": "Networking", - "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n" - }, - { - "name": "Persistence", - "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n" - }, - { - "name": "Ingress", - "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n" - }, - { - "name": "SecurityContext", - "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n" - }, - { - "name": "Resources", - "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n" - }, - { - "name": "Devices", - "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "StorageClass", - "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n" - }, - { - "name": "Metrics", - "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n" - }, - { - "name": "Addons", - "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n" - }, - { - "name": "Experimental", - "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n" - }, - { - "name": "Postgresql", - "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n" - }, - { - "name": "Dependencies", - "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n" - }, - { - "name": "Documentation", - "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "USER", - "label": "User Name", - "description": "Optionally set a User Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "PASSWORD", - "label": "User Password", - "description": "Optionally set a Password", - "schema": { - "type": "string", - "private": true, - "default": "" - } - }, - { - "variable": "DISABLE_AUTH", - "label": "Disable Auth", - "description": "Disable authentication for RStudio Server.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ROOT", - "label": "Root", - "description": "If set to true, the default non-root user will be added to the sudoers group when the server init process.", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Service", - "description": "The Primary service on which the healthcheck runs, often the webUI", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "Service's Port(s) Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Service Port Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "default": 8787, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces (Experimental, might change or be removed without further notice)", - "label": "Add external Interfaces (Experimental)", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "enum": [] - } - }, - { - "variable": "ipam", - "description": "Define how IP Address will be managed", - "label": "IP Address Management", - "schema": { - "additional_attrs": true, - "type": "dict", - "required": true, - "attrs": [ - { - "variable": "type", - "description": "Specify type for IPAM", - "label": "IPAM Type", - "schema": { - "type": "string", - "required": true, - "enum": [ - { - "value": "dhcp", - "description": "Use DHCP" - }, - { - "value": "static", - "description": "Use Static IP" - } - ] - } - }, - { - "variable": "staticIPConfigurations", - "label": "Static IP Addresses", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "=", - "static" - ] - ], - "items": [ - { - "variable": "staticIP", - "label": "Static IP", - "schema": { - "type": "ipaddr", - "cidr": true - } - } - ] - } - }, - { - "variable": "staticRoutes", - "label": "Static Routes", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "=", - "static" - ] - ], - "items": [ - { - "variable": "staticRouteConfiguration", - "label": "Static Route Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "destination", - "label": "Destination", - "schema": { - "type": "ipaddr", - "cidr": true, - "required": true - } - }, - { - "variable": "gateway", - "label": "Gateway", - "schema": { - "type": "ipaddr", - "cidr": false, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceList", - "label": "Add Manual Custom Services", - "group": "Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Persistence", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "config", - "label": "App Config Storage", - "description": "Stores the Application Configuration.", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "pvc", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - }, - { - "value": "iscsi", - "description": "iSCSI Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\n", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "chmod", - "label": "Run CHMOD", - "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", - "schema": { - "type": "string", - "valid_chars": "[0-9]{3}", - "default": "" - } - }, - { - "variable": "recursive", - "label": "Recursive", - "description": "It will run CHOWN and CHMOD recursively\n", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - } - ] - } - }, - { - "variable": "readOnly", - "label": "Read Only", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Path", - "description": "Path inside the container the storage is mounted", - "schema": { - "show_if": [ - [ - "type", - "=", - "hostPath" - ] - ], - "type": "hostpath" - } - }, - { - "variable": "medium", - "label": "EmptyDir Medium", - "schema": { - "show_if": [ - [ - "type", - "=", - "emptyDir" - ] - ], - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "Memory", - "description": "Memory" - } - ] - } - }, - { - "variable": "size", - "label": "Size quotum of Storage (Do NOT REDUCE after installation)", - "description": "This value can ONLY be INCREASED after the installation", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "256Gi" - } - }, - { - "variable": "storageClass", - "label": "storageClass (Advanced)", - "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "static", - "label": "Static Fixed PVC Bindings (Experimental)", - "description": "Link a PVC to a specific storage location", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "mode", - "label": "mode", - "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", - "schema": { - "type": "string", - "default": "disabled", - "enum": [ - { - "value": "disabled", - "description": "disabled" - }, - { - "value": "smb", - "description": "smb" - }, - { - "value": "nfs", - "description": "nfs" - } - ] - } - }, - { - "variable": "server", - "label": "Server", - "description": "server to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "myserver" - } - }, - { - "variable": "share", - "label": "Share", - "description": "share to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "/myshare" - } - }, - { - "variable": "user", - "label": "User", - "description": "connecting user", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "myuser" - } - }, - { - "variable": "domain", - "label": "Domain", - "description": "user domain", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "description": "connecting password", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - } - ] - } - }, - { - "variable": "volumeSnapshots", - "label": "Volume Snapshots (Experimental)", - "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "list", - "default": [], - "items": [ - { - "variable": "volumeSnapshotEntry", - "label": "Custom volumeSnapshot", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", - "schema": { - "type": "string", - "default": "mysnapshot", - "required": true - } - }, - { - "variable": "volumeSnapshotClassName", - "label": "volumeSnapshot Class Name (Advanced)", - "description": "For use with PVCs using a non-default storageClass", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "workspace", - "label": "App WorkSpace Storage", - "description": "Stores the Application WorkSpace.", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "pvc", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - }, - { - "value": "iscsi", - "description": "iSCSI Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\n", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "chmod", - "label": "Run CHMOD", - "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", - "schema": { - "type": "string", - "valid_chars": "[0-9]{3}", - "default": "" - } - }, - { - "variable": "recursive", - "label": "Recursive", - "description": "It will run CHOWN and CHMOD recursively\n", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - } - ] - } - }, - { - "variable": "readOnly", - "label": "Read Only", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Path", - "description": "Path inside the container the storage is mounted", - "schema": { - "show_if": [ - [ - "type", - "=", - "hostPath" - ] - ], - "type": "hostpath" - } - }, - { - "variable": "medium", - "label": "EmptyDir Medium", - "schema": { - "show_if": [ - [ - "type", - "=", - "emptyDir" - ] - ], - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "Memory", - "description": "Memory" - } - ] - } - }, - { - "variable": "size", - "label": "Size quotum of Storage (Do NOT REDUCE after installation)", - "description": "This value can ONLY be INCREASED after the installation", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "256Gi" - } - }, - { - "variable": "storageClass", - "label": "storageClass (Advanced)", - "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "static", - "label": "Static Fixed PVC Bindings (Experimental)", - "description": "Link a PVC to a specific storage location", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "mode", - "label": "mode", - "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", - "schema": { - "type": "string", - "default": "disabled", - "enum": [ - { - "value": "disabled", - "description": "disabled" - }, - { - "value": "smb", - "description": "smb" - }, - { - "value": "nfs", - "description": "nfs" - } - ] - } - }, - { - "variable": "server", - "label": "Server", - "description": "server to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "myserver" - } - }, - { - "variable": "share", - "label": "Share", - "description": "share to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "/myshare" - } - }, - { - "variable": "user", - "label": "User", - "description": "connecting user", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "myuser" - } - }, - { - "variable": "domain", - "label": "Domain", - "description": "user domain", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "description": "connecting password", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - } - ] - } - }, - { - "variable": "volumeSnapshots", - "label": "Volume Snapshots (Experimental)", - "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "list", - "default": [], - "items": [ - { - "variable": "volumeSnapshotEntry", - "label": "Custom volumeSnapshot", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", - "schema": { - "type": "string", - "default": "mysnapshot", - "required": true - } - }, - { - "variable": "volumeSnapshotClassName", - "label": "volumeSnapshot Class Name (Advanced)", - "description": "For use with PVCs using a non-default storageClass", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistenceList", - "label": "Additional App Storage", - "group": "Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\n", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "chmod", - "label": "Run CHMOD", - "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", - "schema": { - "type": "string", - "valid_chars": "[0-9]{3}", - "default": "" - } - }, - { - "variable": "recursive", - "label": "Recursive", - "description": "It will run CHOWN and CHMOD recursively\n", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - } - ] - } - }, - { - "variable": "readOnly", - "label": "Read Only", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Path", - "description": "Path inside the container the storage is mounted", - "schema": { - "show_if": [ - [ - "type", - "=", - "hostPath" - ] - ], - "type": "hostpath" - } - }, - { - "variable": "mountPath", - "label": "Mount Path", - "description": "Path inside the container the storage is mounted", - "schema": { - "type": "string", - "default": "", - "required": true, - "valid_chars": "^\\/([a-zA-Z0-9._-]+(\\s?[a-zA-Z0-9._-]+|\\/?))+$" - } - }, - { - "variable": "medium", - "label": "EmptyDir Medium", - "schema": { - "show_if": [ - [ - "type", - "=", - "emptyDir" - ] - ], - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "Memory", - "description": "Memory" - } - ] - } - }, - { - "variable": "size", - "label": "Size Quotum of Storage", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "256Gi" - } - }, - { - "variable": "storageClass", - "label": "storageClass (Advanced)", - "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "static", - "label": "Static Fixed PVC Bindings (Experimental)", - "description": "Link a PVC to a specific storage location", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "mode", - "label": "mode", - "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", - "schema": { - "type": "string", - "default": "disabled", - "enum": [ - { - "value": "disabled", - "description": "disabled" - }, - { - "value": "smb", - "description": "smb" - }, - { - "value": "nfs", - "description": "nfs" - } - ] - } - }, - { - "variable": "server", - "label": "Server", - "description": "server to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "myserver" - } - }, - { - "variable": "share", - "label": "Share", - "description": "share to connect to", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "!=", - "disabled" - ] - ], - "default": "/myshare" - } - }, - { - "variable": "user", - "label": "User", - "description": "connecting user", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "myuser" - } - }, - { - "variable": "domain", - "label": "Domain", - "description": "user domain", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "description": "connecting password", - "schema": { - "type": "string", - "show_if": [ - [ - "mode", - "=", - "smb" - ] - ], - "default": "" - } - } - ] - } - }, - { - "variable": "volumeSnapshots", - "label": "Volume Snapshots (Experimental)", - "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", - "schema": { - "show_if": [ - [ - "type", - "=", - "pvc" - ] - ], - "type": "list", - "default": [], - "items": [ - { - "variable": "volumeSnapshotEntry", - "label": "Custom volumeSnapshot", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", - "schema": { - "type": "string", - "default": "mysnapshot", - "required": true - } - }, - { - "variable": "volumeSnapshotClassName", - "label": "volumeSnapshot Class Name (Advanced)", - "description": "For use with PVCs using a non-default storageClass", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "", - "group": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - }, - { - "variable": "homepage", - "label": "Homepage", - "description": "Connect ingress with Homepage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "name", - "label": "Name (Optional)", - "description": "Defaults to chart name", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "description", - "label": "Description (Optional)", - "description": "Defaults to chart description", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "icon", - "label": "Icon (Optional)", - "description": "Defaults to chart icon", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "group", - "label": "Group", - "schema": { - "type": "string", - "required": true, - "default": "default", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "widget", - "label": "Widget Settings", - "schema": { - "type": "dict", - "additional_attrs": true, - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "attrs": [ - { - "variable": "enabled", - "label": "Enable Widget", - "description": "When disabled all widget annotations are skipped.", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "custom", - "label": "Options", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "key", - "label": "API-key (key)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "customkv", - "label": "Custom Options", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "option", - "label": "Option", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingressList", - "label": "Add Manual Custom Ingresses", - "group": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressListEntry", - "label": "Custom Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "ingressClassName", - "label": "IngressClass Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - }, - { - "variable": "overrideService", - "label": "Linked Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Service Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "port", - "label": "Service Port", - "schema": { - "type": "int" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Secret (Advanced)", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - }, - { - "variable": "homepage", - "label": "Homepage", - "description": "Connect ingress with Homepage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "name", - "label": "Name", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "description", - "label": "Description", - "description": "defaults to chart description", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "group", - "label": "Group", - "schema": { - "type": "string", - "required": true, - "default": "default", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "securityContext", - "group": "SecurityContext", - "label": "Security Context", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "container", - "label": "Container", - "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 of the user running the application", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "PUID", - "label": "Process User ID - PUID", - "description": "When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps", - "schema": { - "type": "int", - "show_if": [ - [ - "runAsUser", - "=", - 0 - ] - ], - "default": 568 - } - }, - { - "variable": "UMASK", - "label": "UMASK", - "description": "When supported by the container, this sets the UMASK for the App. Not supported by all Apps", - "schema": { - "type": "string", - "default": "0022" - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "privileged", - "label": "Privileged mode", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "readOnlyRootFilesystem", - "label": "ReadOnly Root Filesystem", - "schema": { - "type": "boolean", - "default": true - } - } - ] - } - } - ] - } - }, - { - "variable": "pod", - "label": "Pod", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "fsGroupChangePolicy", - "label": "When should we take ownership?", - "schema": { - "type": "string", - "default": "OnRootMismatch", - "enum": [ - { - "value": "OnRootMismatch", - "description": "OnRootMismatch" - }, - { - "value": "Always", - "description": "Always" - } - ] - } - }, - { - "variable": "supplementalGroups", - "label": "Supplemental Groups", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "supplementalGroupsEntry", - "label": "Supplemental Group", - "schema": { - "type": "int" - } - } - ] - } - }, - { - "variable": "fsGroup", - "label": "fsGroup", - "description": "The group that should own ALL storage.", - "schema": { - "type": "int", - "default": 568 - } - } - ] - } - } - ] - } - }, - { - "variable": "resources", - "group": "Resources", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "networkPolicy", - "group": "Experimental", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "enum": [ - { - "value": null, - "description": "No Certificate" - } - ], - "default": null, - "null": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "envList", - "label": "Codeserver Environment Variables", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": [], - "items": [ - { - "variable": "envItem", - "label": "Environment Variable", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "netshoot", - "label": "Netshoot", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "envList", - "label": "Netshoot Environment Variables", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": [], - "items": [ - { - "variable": "envItem", - "label": "Environment Variable", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "vpn", - "label": "VPN", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type", - "schema": { - "type": "string", - "default": "disabled", - "enum": [ - { - "value": "disabled", - "description": "disabled" - }, - { - "value": "gluetun", - "description": "Gluetun" - }, - { - "value": "tailscale", - "description": "Tailscale" - }, - { - "value": "openvpn", - "description": "OpenVPN (Deprecated)" - }, - { - "value": "wireguard", - "description": "Wireguard (Deprecated)" - } - ] - } - }, - { - "variable": "openvpn", - "label": "OpenVPN Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "show_if": [ - [ - "type", - "=", - "openvpn" - ] - ], - "attrs": [ - { - "variable": "username", - "label": "Authentication Username (Optional)", - "description": "Authentication Username, Optional", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "Authentication Password", - "description": "Authentication Credentials", - "schema": { - "type": "string", - "show_if": [ - [ - "username", - "!=", - "" - ] - ], - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "tailscale", - "label": "Tailscale Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "show_if": [ - [ - "type", - "=", - "tailscale" - ] - ], - "attrs": [ - { - "variable": "authkey", - "label": "Authentication Key", - "description": "Provide an auth key to automatically authenticate the node as your user account.", - "schema": { - "type": "string", - "private": true, - "default": "" - } - }, - { - "variable": "auth_once", - "label": "Auth Once", - "description": "Only attempt to log in if not already logged in.", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "accept_dns", - "label": "Accept DNS", - "description": "Accept DNS configuration from the admin console.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "userspace", - "label": "Userspace", - "description": "Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "routes", - "label": "Routes", - "description": "Expose physical subnet routes to your entire Tailscale network.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "dest_ip", - "label": "Destination IP", - "description": "Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "sock5_server", - "label": "Sock5 Server", - "description": "The address on which to listen for SOCKS5 proxying into the tailscale net.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "outbound_http_proxy_listen", - "label": "Outbound HTTP Proxy Listen", - "description": "The address on which to listen for HTTP proxying into the tailscale net.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "extra_args", - "label": "Extra Args", - "description": "Extra Args", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "daemon_extra_args", - "label": "Tailscale Daemon Extra Args", - "description": "Tailscale Daemon Extra Args", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "killSwitch", - "label": "Enable Killswitch", - "schema": { - "type": "boolean", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": true - } - }, - { - "variable": "excludedNetworks_IPv4", - "label": "Killswitch Excluded IPv4 networks", - "description": "List of Killswitch Excluded IPv4 Addresses", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": [], - "items": [ - { - "variable": "networkv4", - "label": "IPv4 Network", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "excludedNetworks_IPv6", - "label": "Killswitch Excluded IPv6 networks", - "description": "List of Killswitch Excluded IPv6 Addresses", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": [], - "items": [ - { - "variable": "networkv6", - "label": "IPv6 Network", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "configFile", - "label": "VPN Config File Location", - "schema": { - "type": "string", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": "" - } - }, - { - "variable": "envList", - "label": "VPN Environment Variables", - "schema": { - "type": "list", - "show_if": [ - [ - "type", - "!=", - "disabled" - ] - ], - "default": [], - "items": [ - { - "variable": "envItem", - "label": "Environment Variable", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string", - "required": true, - "max_length": 10240 - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "docs", - "group": "Documentation", - "label": "Please read the documentation at https://truecharts.org", - "description": "Please read the documentation at
https://truecharts.org", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "confirmDocs", - "label": "I have checked the documentation", - "schema": { - "type": "boolean", - "default": true - } - } - ] - } - }, - { - "variable": "donateNag", - "group": "Documentation", - "label": "Please consider supporting TrueCharts, see https://truecharts.org/sponsor", - "description": "Please consider supporting TrueCharts, see
https://truecharts.org/sponsor", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "confirmDonate", - "label": "I have considered donating", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - } - ] - } - } - ] - }, - "app_readme": "

Integrated development environment for R, a programming language for statistical computing and graphics.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/rstudio

\n
\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

", - "detailed_readme": "
\n

title: README

\n

General Info

\n

TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible

\n

For more information about this Chart, please check the docs on the TrueCharts website

\n

This chart is not maintained by the upstream project and any issues with the chart should be raised here

\n

Installation

\n

Helm-Chart installation

\n

To install TrueCharts Helm charts using Helm, you can use our OCI Repository.

\n

helm install mychart oci://tccr.io/truecharts/CHARTNAME

\n

For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/

\n

TrueNAS SCALE Apps

\n

For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.

\n

Configuration Options

\n

To view the chart specific options, please view Values.yaml included in the chart.

\n

All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/

\n

Chart Specific Guides and information

\n

All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/rstudio

\n

Support

\n\n
\n

Sponsor TrueCharts

\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

\n

All Rights Reserved - The TrueCharts Project

", - "changelog": "

for the complete changelog, please refer to the website

\n

Important:

" - }, "5.3.0": { "healthy": true, "supported": true, From ae9b77ecb7ac2ff916cdcadd932819c007682c19 Mon Sep 17 00:00:00 2001 From: Niborian <143342302+Niborian@users.noreply.github.com> Date: Mon, 26 Aug 2024 20:14:44 +0000 Subject: [PATCH 4/5] Fixed version --- catalog.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catalog.json b/catalog.json index 7cf8990eb1..1f7fee1524 100644 --- a/catalog.json +++ b/catalog.json @@ -7044,7 +7044,7 @@ "healthy_error": null, "home": "https://truecharts.org/charts/stable/factorio", "location": "/home/runner/_work/catalog/catalog/stable/factorio", - "latest_version": "8.0.9", + "latest_version": "8.1.0", "latest_app_version": "stable", "latest_human_version": "stable_8.1.0", "last_update": "2024-08-26 19:32:14", From 10ac893d5ba5a3d062c20bca480e9608947ee8f3 Mon Sep 17 00:00:00 2001 From: Niborian <143342302+Niborian@users.noreply.github.com> Date: Tue, 27 Aug 2024 13:35:38 +0000 Subject: [PATCH 5/5] Maintainerr use latest instead og specific version --- stable/maintainerr/3.1.0/.helmignore | 32 + stable/maintainerr/3.1.0/CHANGELOG.md | 3 + stable/maintainerr/3.1.0/Chart.yaml | 34 + stable/maintainerr/3.1.0/README.md | 61 + stable/maintainerr/3.1.0/app-readme.md | 8 + .../3.1.0/charts/common-23.0.10.tgz | Bin 0 -> 96939 bytes stable/maintainerr/3.1.0/icon-small.webp | Bin 0 -> 544 bytes stable/maintainerr/3.1.0/icon.webp | Bin 0 -> 3268 bytes stable/maintainerr/3.1.0/ix_values.yaml | 27 + stable/maintainerr/3.1.0/questions.yaml | 3155 ++++++++++ stable/maintainerr/3.1.0/templates/NOTES.txt | 1 + .../maintainerr/3.1.0/templates/common.yaml | 1 + stable/maintainerr/3.1.0/values.yaml | 0 stable/maintainerr/app_versions.json | 5274 +++++++++++++++++ 14 files changed, 8596 insertions(+) create mode 100644 stable/maintainerr/3.1.0/.helmignore create mode 100644 stable/maintainerr/3.1.0/CHANGELOG.md create mode 100644 stable/maintainerr/3.1.0/Chart.yaml create mode 100644 stable/maintainerr/3.1.0/README.md create mode 100644 stable/maintainerr/3.1.0/app-readme.md create mode 100644 stable/maintainerr/3.1.0/charts/common-23.0.10.tgz create mode 100644 stable/maintainerr/3.1.0/icon-small.webp create mode 100644 stable/maintainerr/3.1.0/icon.webp create mode 100644 stable/maintainerr/3.1.0/ix_values.yaml create mode 100644 stable/maintainerr/3.1.0/questions.yaml create mode 100644 stable/maintainerr/3.1.0/templates/NOTES.txt create mode 100644 stable/maintainerr/3.1.0/templates/common.yaml create mode 100644 stable/maintainerr/3.1.0/values.yaml diff --git a/stable/maintainerr/3.1.0/.helmignore b/stable/maintainerr/3.1.0/.helmignore new file mode 100644 index 0000000000..feb7464da6 --- /dev/null +++ b/stable/maintainerr/3.1.0/.helmignore @@ -0,0 +1,32 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png +icon.webp +icon-small.webp diff --git a/stable/maintainerr/3.1.0/CHANGELOG.md b/stable/maintainerr/3.1.0/CHANGELOG.md new file mode 100644 index 0000000000..941abb8a21 --- /dev/null +++ b/stable/maintainerr/3.1.0/CHANGELOG.md @@ -0,0 +1,3 @@ +*for the complete changelog, please refer to the website* + +**Important:** \ No newline at end of file diff --git a/stable/maintainerr/3.1.0/Chart.yaml b/stable/maintainerr/3.1.0/Chart.yaml new file mode 100644 index 0000000000..ebd4d91280 --- /dev/null +++ b/stable/maintainerr/3.1.0/Chart.yaml @@ -0,0 +1,34 @@ +annotations: + truecharts.org/category: media + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 2.0.3 +dependencies: + - name: common + version: 23.0.10 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Looks and smells like Overseerr, does the opposite. Maintenance tool for the Plex ecosystem. +home: https://truecharts.org/charts/stable/maintainerr +icon: https://truecharts.org/img/hotlink-ok/chart-icons/maintainerr.webp +keywords: + - maintainerr + - media +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: maintainerr +sources: + - https://github.com/jorenn92/Maintainerr + - https://github.com/truecharts/charts/tree/master/charts/stable/maintainerr + - https://hub.docker.com/r/jorenn92/maintainerr +type: application +version: 3.1.0 diff --git a/stable/maintainerr/3.1.0/README.md b/stable/maintainerr/3.1.0/README.md new file mode 100644 index 0000000000..6d80e50423 --- /dev/null +++ b/stable/maintainerr/3.1.0/README.md @@ -0,0 +1,61 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps. +Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible + +For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/maintainerr) + +**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)** + +## Installation + +### Helm-Chart installation + +To install TrueCharts Helm charts using Helm, you can use our OCI Repository. + +`helm install mychart oci://tccr.io/truecharts/CHARTNAME` + +For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/ + + +### TrueNAS SCALE Apps + +For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale). + +## Chart Specific Guides and information + +All our charts have dedicated documentation pages. +The documentation for this chart can be found here: +https://truecharts.org/charts/stable/maintainerr + +## Configuration Options + +Please note: For TrueNAS SCALE, only options available in the GUI are supported. +Hence most of these docs do not apply to TrueNAS SCALE + +To view the chart specific options, please view Values.yaml included in the chart. +The most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/maintainerr/values.yaml + +All our Charts use a shared "common" library chart that contains most of the templating and options. +For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/ + +For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml + +## Support + +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/general/sponsor) or contributing back to the project any way you can! + +_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/maintainerr/3.1.0/app-readme.md b/stable/maintainerr/3.1.0/app-readme.md new file mode 100644 index 0000000000..5ca831b615 --- /dev/null +++ b/stable/maintainerr/3.1.0/app-readme.md @@ -0,0 +1,8 @@ +Looks and smells like Overseerr, does the opposite. Maintenance tool for the Plex ecosystem. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/maintainerr](https://truecharts.org/charts/stable/maintainerr) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/stable/maintainerr/3.1.0/charts/common-23.0.10.tgz b/stable/maintainerr/3.1.0/charts/common-23.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..5eefcb329be559e54998b5f211021daca81c39ef GIT binary patch literal 96939 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 literal 0 HcmV?d00001 diff --git a/stable/maintainerr/3.1.0/icon-small.webp b/stable/maintainerr/3.1.0/icon-small.webp new file mode 100644 index 0000000000000000000000000000000000000000..f86c36ade75f88335e9fa3b6624a8575e6be4e28 GIT binary patch literal 544 zcmV+*0^j{oNk&E(0ssJ4MM6+kP&il$0000G0000V0018V06|PpNTmP(00D4S+ji7E z42&iq3XlSdpcb;?D6!G;FJGNoX2@|65e(e6Z6vj~_r-mLY?#;D-rnz<)lDt|D&zYN zy-|C_-M!!O-o={~t`E=^8&tC%w80axk%Z7;`tqkzt5sTG`FMyBnhC*F7Xcb43HGD3=E zx|dxU`b5L;vaMs(ZO^VeR5k6Bc>SFIllRtF8J-Eg@Jaq(?g^vo>s7buC>_b+xRLg{ zu+6H=;cdo)6j>&(SF@16@mMu`S%^Fun_~ i80<_Aq}z#Z;s+ox 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 + Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage (Do NOT REDUCE after installation) + description: This value can ONLY be INCREASED after the installation + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: volsync + label: 'VolSync (Experimental)' + description: Backup, Restore and Synchronise PVC storage + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: VolSyncEntry + label: VolSync Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: "Name of backup configuration" + schema: + type: string + default: "" + required: true + - variable: type + label: Type VolSync/Backup + description: Sets the VolSync Type + schema: + type: string + default: "restic" + enum: + - value: restic + description: Restic + - variable: credentials + label: Credentials + description: "Name of credentials in the credentials section" + schema: + type: string + default: "" + required: true + - variable: dest + label: VolSync Destination (Restore) + description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: src + label: VolSync Source (Backup) + description: VolSYnc Source is the location where data is the sender and creates backups to storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + + - variable: persistenceList + label: Additional App Storage + group: Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: volsync + label: 'VolSync (Experimental)' + description: Backup, Restore and Synchronise PVC storage + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: VolSyncEntry + label: VolSync Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: "Name of backup configuration" + schema: + type: string + default: "" + required: true + - variable: type + label: Type VolSync/Backup + description: Sets the VolSync Type + schema: + type: string + default: "restic" + enum: + - value: restic + description: Restic + - variable: credentials + label: Credentials + description: "Name of credentials in the credentials section" + schema: + type: string + default: "" + required: true + - variable: dest + label: VolSync Destination (Restore) + description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: src + label: VolSync Source (Backup) + description: VolSYnc Source is the location where data is the sender and creates backups to storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: true + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name (Optional) + description: Defaults to chart name + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description (Optional) + description: Defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: icon + label: Icon (Optional) + description: Defaults to chart icon + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: widget + label: Widget Settings + schema: + type: dict + additional_attrs: true + show_if: [["enabled", "=", true]] + attrs: + - variable: enabled + label: Enable Widget + description: When disabled all widget annotations are skipped. + schema: + type: boolean + default: true + - variable: custom + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: API-key (key) + schema: + type: string + default: "" + - variable: customkv + label: Custom Options + schema: + type: list + default: [] + items: + - variable: option + label: Option + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + default: "" + required: true + - variable: value + label: Value + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: overrideService + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: namespace + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + + - variable: securityContext + group: SecurityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # Settings from questions.yaml get appended here on a per-app basis + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + show_if: [["runAsUser", "=", 0]] + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "0022" + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + # Settings from questions.yaml get appended here on a per-app basis + + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: resources + group: Resources + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + +# - variable: horizontalPodAutoscaler +# group: Experimental +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 + - variable: networkPolicy + group: Experimental + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: ingress + label: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: gluetun + description: Gluetun + - value: tailscale + description: Tailscale + - value: openvpn + description: OpenVPN (Deprecated) + - value: wireguard + description: Wireguard (Deprecated) + - variable: openvpn + label: OpenVPN Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + show_if: [["username", "!=", ""]] + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: string + show_if: [["type", "!=", "disabled"]] + default: "" + + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + max_length: 10240 + + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true + diff --git a/stable/maintainerr/3.1.0/templates/NOTES.txt b/stable/maintainerr/3.1.0/templates/NOTES.txt new file mode 100644 index 0000000000..efcb74cb77 --- /dev/null +++ b/stable/maintainerr/3.1.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/maintainerr/3.1.0/templates/common.yaml b/stable/maintainerr/3.1.0/templates/common.yaml new file mode 100644 index 0000000000..b51394e00a --- /dev/null +++ b/stable/maintainerr/3.1.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/maintainerr/3.1.0/values.yaml b/stable/maintainerr/3.1.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/maintainerr/app_versions.json b/stable/maintainerr/app_versions.json index 7c76475add..d917367592 100644 --- a/stable/maintainerr/app_versions.json +++ b/stable/maintainerr/app_versions.json @@ -1,4 +1,5278 @@ { + "3.1.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/_work/catalog/catalog/stable/maintainerr/3.1.0", + "last_update": "2024-05-29 12:35:14", + "required_features": [ + "definitions/timezone", + "normalize/interfaceConfiguration", + "definitions/certificate", + "definitions/interface" + ], + "human_version": "latest_3.1.0", + "version": "3.1.0", + "chart_metadata": { + "annotations": { + "truecharts.org/category": "media", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "2.0.3", + "dependencies": [ + { + "name": "common", + "version": "23.0.10", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Looks and smells like Overseerr, does the opposite. Maintenance tool for the Plex ecosystem.", + "home": "https://truecharts.org/charts/stable/maintainerr", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/maintainerr.webp", + "keywords": [ + "maintainerr", + "media" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "maintainerr", + "sources": [ + "https://github.com/jorenn92/Maintainerr", + "https://github.com/truecharts/charts/tree/master/charts/stable/maintainerr", + "https://hub.docker.com/r/jorenn92/maintainerr" + ], + "type": "application", + "version": "3.1.0" + }, + "app_metadata": null, + "schema": { + "groups": [ + { + "name": "Image", + "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n" + }, + { + "name": "General", + "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n" + }, + { + "name": "Workload", + "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n" + }, + { + "name": "App Configuration", + "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n" + }, + { + "name": "Services", + "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n" + }, + { + "name": "Networking", + "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n" + }, + { + "name": "Persistence", + "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n" + }, + { + "name": "Ingress", + "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n" + }, + { + "name": "SecurityContext", + "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n" + }, + { + "name": "Resources", + "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n" + }, + { + "name": "Devices", + "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n" + }, + { + "name": "Middlewares", + "description": "Traefik Middlewares" + }, + { + "name": "StorageClass", + "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n" + }, + { + "name": "Metrics", + "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n" + }, + { + "name": "Addons", + "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n" + }, + { + "name": "Experimental", + "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n" + }, + { + "name": "Postgresql", + "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n" + }, + { + "name": "Dependencies", + "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n" + }, + { + "name": "Documentation", + "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n" + } + ], + "portals": { + "open": { + "protocols": [ + "$kubernetes-resource_configmap_tcportal-open_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_tcportal-open_host" + ], + "ports": [ + "$kubernetes-resource_configmap_tcportal-open_port" + ] + } + }, + "questions": [ + { + "variable": "global", + "group": "General", + "label": "Global Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "stopAll", + "label": "Stop All", + "description": "Stops All Running pods and hibernates cnpg", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "credentialsList", + "group": "General", + "label": "Credentials (Experimental)", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "credentialsEntry", + "label": "Enter Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "type", + "label": "Type", + "description": "Type of Credential", + "schema": { + "type": "string", + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "s3 Storage" + } + ] + } + }, + { + "variable": "url", + "label": "url", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "path", + "label": "path", + "description": "Path Prefix not needed for most cases", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "encrKey", + "label": "encrKey", + "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored", + "schema": { + "show_if": [ + [ + "type", + "=", + "s3" + ] + ], + "type": "string", + "default": "MYSECRETPASSPHRASE", + "required": true + } + } + ] + } + } + ] + } + }, + { + "variable": "workload", + "group": "Workload", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "DaemonSet", + "description": "DaemonSet" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "DaemonSet" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Extra Args", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "command", + "label": "Command", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "param", + "label": "Param", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "TZ", + "label": "Timezone", + "group": "General", + "schema": { + "type": "string", + "default": "America/Los_Angeles", + "$ref": [ + "definitions/timezone" + ], + "enum": [ + { + "value": "Asia/Damascus", + "description": "'Asia/Damascus' timezone" + }, + { + "value": "Asia/Saigon", + "description": "'Asia/Saigon' timezone" + } + ] + } + }, + { + "variable": "podOptions", + "group": "General", + "label": "Global Pod Options (Advanced)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "expertPodOpts", + "label": "Expert - Pod Options", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostNetwork", + "label": "Host Networking", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "dnsConfig", + "label": "DNS Configuration", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "options", + "label": "Options", + "schema": { + "type": "list", + "default": [ + { + "name": "ndots", + "value": "1" + } + ], + "items": [ + { + "variable": "optionsEntry", + "label": "Option Entry", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "nameservers", + "label": "Nameservers", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "nsEntry", + "label": "Nameserver Entry", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "searches", + "label": "Searches", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "searchEntry", + "label": "Search Entry", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "imagePullSecretList", + "group": "General", + "label": "Image Pull Secrets", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "pullsecretentry", + "label": "Pull Secret", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "data", + "label": "Data", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "registry", + "label": "Registry", + "schema": { + "type": "string", + "required": true, + "default": "https://index.docker.io/v1/" + } + }, + { + "variable": "username", + "label": "Username", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "" + } + }, + { + "variable": "email", + "label": "Email", + "schema": { + "type": "string", + "required": true, + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "service", + "group": "Services", + "label": "Configure Service(s)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Service", + "description": "The Primary service on which the healthcheck runs, often the webUI", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Service Port Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "description": "This port exposes the container port on the service", + "schema": { + "type": "int", + "default": 6246, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "scaleExternalInterface", + "description": "Add External Interfaces (Experimental, might change or be removed without further notice)", + "label": "Add external Interfaces (Experimental)", + "group": "Networking", + "schema": { + "type": "list", + "items": [ + { + "variable": "interfaceConfiguration", + "description": "Interface Configuration", + "label": "Interface Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "$ref": [ + "normalize/interfaceConfiguration" + ], + "attrs": [ + { + "variable": "hostInterface", + "description": "Please Specify Host Interface", + "label": "Host Interface", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/interface" + ], + "enum": [] + } + }, + { + "variable": "ipam", + "description": "Define how IP Address will be managed", + "label": "IP Address Management", + "schema": { + "additional_attrs": true, + "type": "dict", + "required": true, + "attrs": [ + { + "variable": "type", + "description": "Specify type for IPAM", + "label": "IPAM Type", + "schema": { + "type": "string", + "required": true, + "enum": [ + { + "value": "dhcp", + "description": "Use DHCP" + }, + { + "value": "static", + "description": "Use Static IP" + } + ] + } + }, + { + "variable": "staticIPConfigurations", + "label": "Static IP Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "=", + "static" + ] + ], + "items": [ + { + "variable": "staticIP", + "label": "Static IP", + "schema": { + "type": "ipaddr", + "cidr": true + } + } + ] + } + }, + { + "variable": "staticRoutes", + "label": "Static Routes", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "=", + "static" + ] + ], + "items": [ + { + "variable": "staticRouteConfiguration", + "label": "Static Route Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "destination", + "label": "Destination", + "schema": { + "type": "ipaddr", + "cidr": true, + "required": true + } + }, + { + "variable": "gateway", + "label": "Gateway", + "schema": { + "type": "ipaddr", + "cidr": false, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "serviceList", + "label": "Add Manual Custom Services", + "group": "Services", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "serviceListEntry", + "label": "Custom Service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + }, + { + "value": "Simple", + "description": "Deprecated CHANGE THIS" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "advancedsvcset", + "label": "Show Advanced Service Settings", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "externalIPs", + "label": "External IP's", + "description": "External IP's", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "externalIP", + "label": "External IP", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "ipFamilyPolicy", + "label": "IP Family Policy", + "description": "Specify the IP Policy", + "schema": { + "type": "string", + "default": "SingleStack", + "enum": [ + { + "value": "SingleStack", + "description": "SingleStack" + }, + { + "value": "PreferDualStack", + "description": "PreferDualStack" + }, + { + "value": "RequireDualStack", + "description": "RequireDualStack" + } + ] + } + }, + { + "variable": "ipFamilies", + "label": "IP Families", + "description": "(Advanced) The IP Families that should be used", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ipFamily", + "label": "IP Family", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "portsList", + "label": "Additional Service Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsListEntry", + "label": "Custom ports", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Port", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Port Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "protocol", + "label": "Port Type", + "schema": { + "type": "string", + "default": "tcp", + "enum": [ + { + "value": "http", + "description": "HTTP" + }, + { + "value": "https", + "description": "HTTPS" + }, + { + "value": "tcp", + "description": "TCP" + }, + { + "value": "udp", + "description": "UDP" + } + ] + } + }, + { + "variable": "targetPort", + "label": "Target Port", + "description": "This port exposes the container port on the service", + "schema": { + "type": "int", + "required": true + } + }, + { + "variable": "port", + "label": "Container Port", + "schema": { + "type": "int", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "persistence", + "label": "Integrated Persistent Storage", + "description": "Integrated Persistent Storage", + "group": "Persistence", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "App Data Storage", + "description": "Stores the Application Data.", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type of Storage", + "description": "Sets the persistence type, Anything other than PVC could break rollback!", + "schema": { + "type": "string", + "default": "pvc", + "enum": [ + { + "value": "pvc", + "description": "PVC" + }, + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "emptyDir", + "description": "emptyDir" + }, + { + "value": "nfs", + "description": "NFS Share" + }, + { + "value": "iscsi", + "description": "iSCSI Share" + } + ] + } + }, + { + "variable": "server", + "label": "NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "Path on NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "iscsi", + "label": "iSCSI Options", + "schema": { + "show_if": [ + [ + "type", + "=", + "iscsi" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "targetPortal", + "label": "targetPortal", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "iqn", + "label": "iqn", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "lun", + "label": "lun", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "authSession", + "label": "authSession", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "authDiscovery", + "label": "authDiscovery", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "autoPermissions", + "label": "Automatic Permissions Configuration", + "description": "Automatically set permissions", + "schema": { + "show_if": [ + [ + "type", + "!=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "chown", + "label": "Run CHOWN", + "description": "It will run CHOWN on the path with the given fsGroup\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "chmod", + "label": "Run CHMOD", + "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", + "schema": { + "type": "string", + "valid_chars": "[0-9]{3}", + "default": "" + } + }, + { + "variable": "recursive", + "label": "Recursive", + "description": "It will run CHOWN and CHMOD recursively\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "type": "hostpath" + } + }, + { + "variable": "medium", + "label": "EmptyDir Medium", + "schema": { + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "Memory", + "description": "Memory" + } + ] + } + }, + { + "variable": "size", + "label": "Size quotum of Storage (Do NOT REDUCE after installation)", + "description": "This value can ONLY be INCREASED after the installation", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "256Gi" + } + }, + { + "variable": "storageClass", + "label": "storageClass (Advanced)", + "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "volsync", + "label": "VolSync (Experimental)", + "description": "Backup, Restore and Synchronise PVC storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "VolSyncEntry", + "label": "VolSync Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name of backup configuration", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "type", + "label": "Type VolSync/Backup", + "description": "Sets the VolSync Type", + "schema": { + "type": "string", + "default": "restic", + "enum": [ + { + "value": "restic", + "description": "Restic" + } + ] + } + }, + { + "variable": "credentials", + "label": "Credentials", + "description": "Name of credentials in the credentials section", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "dest", + "label": "VolSync Destination (Restore)", + "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "src", + "label": "VolSync Source (Backup)", + "description": "VolSYnc Source is the location where data is the sender and creates backups to storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "static", + "label": "Static Fixed PVC Bindings (Experimental)", + "description": "Link a PVC to a specific storage location", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "mode", + "label": "mode", + "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "smb", + "description": "smb" + }, + { + "value": "nfs", + "description": "nfs" + } + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "server to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "myserver" + } + }, + { + "variable": "share", + "label": "Share", + "description": "share to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "/myshare" + } + }, + { + "variable": "user", + "label": "User", + "description": "connecting user", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "myuser" + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "user domain", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "description": "connecting password", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "volumeSnapshots", + "label": "Volume Snapshots (Experimental)", + "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "volumeSnapshotEntry", + "label": "Custom volumeSnapshot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", + "schema": { + "type": "string", + "default": "mysnapshot", + "required": true + } + }, + { + "variable": "volumeSnapshotClassName", + "label": "volumeSnapshot Class Name (Advanced)", + "description": "For use with PVCs using a non-default storageClass", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "persistenceList", + "label": "Additional App Storage", + "group": "Persistence", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "persistenceListEntry", + "label": "Custom Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the storage", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Type of Storage", + "description": "Sets the persistence type, Anything other than PVC could break rollback!", + "schema": { + "type": "string", + "default": "hostPath", + "enum": [ + { + "value": "pvc", + "description": "PVC" + }, + { + "value": "hostPath", + "description": "Host Path" + }, + { + "value": "emptyDir", + "description": "emptyDir" + }, + { + "value": "nfs", + "description": "NFS Share" + } + ] + } + }, + { + "variable": "server", + "label": "NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "Path on NFS Server", + "schema": { + "show_if": [ + [ + "type", + "=", + "nfs" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "iscsi", + "label": "iSCSI Options", + "schema": { + "show_if": [ + [ + "type", + "=", + "iscsi" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "targetPortal", + "label": "targetPortal", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "iqn", + "label": "iqn", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "lun", + "label": "lun", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "authSession", + "label": "authSession", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "authDiscovery", + "label": "authDiscovery", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "usernameInitiator", + "label": "usernameInitiator", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "passwordInitiator", + "label": "passwordInitiator", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "autoPermissions", + "label": "Automatic Permissions Configuration", + "description": "Automatically set permissions", + "schema": { + "show_if": [ + [ + "type", + "!=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "chown", + "label": "Run CHOWN", + "description": "It will run CHOWN on the path with the given fsGroup\n", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "chmod", + "label": "Run CHMOD", + "description": "It will run CHMOD on the path with the given value
\nFormat should be 3 digits, e.g. 770\n", + "schema": { + "type": "string", + "valid_chars": "[0-9]{3}", + "default": "" + } + }, + { + "variable": "recursive", + "label": "Recursive", + "description": "It will run CHOWN and CHMOD recursively\n", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "readOnly", + "label": "Read Only", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "type": "hostpath" + } + }, + { + "variable": "mountPath", + "label": "Mount Path", + "description": "Path inside the container the storage is mounted", + "schema": { + "type": "string", + "default": "", + "required": true, + "valid_chars": "^\\/([a-zA-Z0-9._-]+(\\s?[a-zA-Z0-9._-]+|\\/?))+$" + } + }, + { + "variable": "medium", + "label": "EmptyDir Medium", + "schema": { + "show_if": [ + [ + "type", + "=", + "emptyDir" + ] + ], + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "Memory", + "description": "Memory" + } + ] + } + }, + { + "variable": "size", + "label": "Size Quotum of Storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "256Gi" + } + }, + { + "variable": "storageClass", + "label": "storageClass (Advanced)", + "description": "sets the storageClass to something other than iX default. Only for advanced usecases!", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "volsync", + "label": "VolSync (Experimental)", + "description": "Backup, Restore and Synchronise PVC storage", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "VolSyncEntry", + "label": "VolSync Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "Name of backup configuration", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "type", + "label": "Type VolSync/Backup", + "description": "Sets the VolSync Type", + "schema": { + "type": "string", + "default": "restic", + "enum": [ + { + "value": "restic", + "description": "Restic" + } + ] + } + }, + { + "variable": "credentials", + "label": "Credentials", + "description": "Name of credentials in the credentials section", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "dest", + "label": "VolSync Destination (Restore)", + "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "src", + "label": "VolSync Source (Backup)", + "description": "VolSYnc Source is the location where data is the sender and creates backups to storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "static", + "label": "Static Fixed PVC Bindings (Experimental)", + "description": "Link a PVC to a specific storage location", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "mode", + "label": "mode", + "description": "disabled: use normal dynamic PVCs\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "smb", + "description": "smb" + }, + { + "value": "nfs", + "description": "nfs" + } + ] + } + }, + { + "variable": "server", + "label": "Server", + "description": "server to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "myserver" + } + }, + { + "variable": "share", + "label": "Share", + "description": "share to connect to", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "!=", + "disabled" + ] + ], + "default": "/myshare" + } + }, + { + "variable": "user", + "label": "User", + "description": "connecting user", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "myuser" + } + }, + { + "variable": "domain", + "label": "Domain", + "description": "user domain", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + }, + { + "variable": "password", + "label": "Password", + "description": "connecting password", + "schema": { + "type": "string", + "show_if": [ + [ + "mode", + "=", + "smb" + ] + ], + "default": "" + } + } + ] + } + }, + { + "variable": "volumeSnapshots", + "label": "Volume Snapshots (Experimental)", + "description": "Add an entry to the list to force creation of a volumeSnapshot of this PVC", + "schema": { + "show_if": [ + [ + "type", + "=", + "pvc" + ] + ], + "type": "list", + "default": [], + "items": [ + { + "variable": "volumeSnapshotEntry", + "label": "Custom volumeSnapshot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "description": "WARNING: renaming this, means deletion of the snapshot with the old name!", + "schema": { + "type": "string", + "default": "mysnapshot", + "required": true + } + }, + { + "variable": "volumeSnapshotClassName", + "label": "volumeSnapshot Class Name (Advanced)", + "description": "For use with PVCs using a non-default storageClass", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "", + "group": "Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [ + { + "path": "/", + "pathType": "Prefix" + } + ], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests (advanced)", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace (optional)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + }, + { + "variable": "homepage", + "label": "Homepage", + "description": "Connect ingress with Homepage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "name", + "label": "Name (Optional)", + "description": "Defaults to chart name", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "description", + "label": "Description (Optional)", + "description": "Defaults to chart description", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "icon", + "label": "Icon (Optional)", + "description": "Defaults to chart icon", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "group", + "label": "Group", + "schema": { + "type": "string", + "required": true, + "default": "default", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "widget", + "label": "Widget Settings", + "schema": { + "type": "dict", + "additional_attrs": true, + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "attrs": [ + { + "variable": "enabled", + "label": "Enable Widget", + "description": "When disabled all widget annotations are skipped.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "custom", + "label": "Options", + "schema": { + "type": "dict", + "additional_attrs": true, + "attrs": [ + { + "variable": "key", + "label": "API-key (key)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "customkv", + "label": "Custom Options", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "option", + "label": "Option", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "ingressClassName", + "label": "(Advanced/Optional) IngressClass Name", + "schema": { + "type": "string", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": [], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Certificate Secret (Advanced)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingressList", + "label": "Add Manual Custom Ingresses", + "group": "Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ingressListEntry", + "label": "Custom Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "ingressClassName", + "label": "IngressClass Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + }, + { + "variable": "overrideService", + "label": "Linked Service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Service Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "port", + "label": "Service Port", + "schema": { + "type": "int" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Secret (Advanced)", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + }, + { + "variable": "homepage", + "label": "Homepage", + "description": "Connect ingress with Homepage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "name", + "label": "Name", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "description", + "label": "Description", + "description": "defaults to chart description", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "group", + "label": "Group", + "schema": { + "type": "string", + "required": true, + "default": "default", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "securityContext", + "group": "SecurityContext", + "label": "Security Context", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "container", + "label": "Container", + "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 of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "PUID", + "label": "Process User ID - PUID", + "description": "When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps", + "schema": { + "type": "int", + "show_if": [ + [ + "runAsUser", + "=", + 0 + ] + ], + "default": 568 + } + }, + { + "variable": "UMASK", + "label": "UMASK", + "description": "When supported by the container, this sets the UMASK for the App. Not supported by all Apps", + "schema": { + "type": "string", + "default": "0022" + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "privileged", + "label": "Privileged mode", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "readOnlyRootFilesystem", + "label": "ReadOnly Root Filesystem", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + }, + { + "variable": "pod", + "label": "Pod", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "fsGroupChangePolicy", + "label": "When should we take ownership?", + "schema": { + "type": "string", + "default": "OnRootMismatch", + "enum": [ + { + "value": "OnRootMismatch", + "description": "OnRootMismatch" + }, + { + "value": "Always", + "description": "Always" + } + ] + } + }, + { + "variable": "supplementalGroups", + "label": "Supplemental Groups", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "supplementalGroupsEntry", + "label": "Supplemental Group", + "schema": { + "type": "int" + } + } + ] + } + }, + { + "variable": "fsGroup", + "label": "fsGroup", + "description": "The group that should own ALL storage.", + "schema": { + "type": "int", + "default": 568 + } + } + ] + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "networkPolicy", + "group": "Experimental", + "label": "(Advanced) Network Policy", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "netPolicyEntry", + "label": "Network Policy Entry", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true, + "default": "" + } + }, + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "policyType", + "label": "Policy Type", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "Default" + }, + { + "value": "ingress", + "description": "Ingress" + }, + { + "value": "egress", + "description": "Egress" + }, + { + "value": "ingress-egress", + "description": "Ingress and Egress" + } + ] + } + }, + { + "variable": "egress", + "label": "Egress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "egressEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "to", + "label": "To", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "toEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ipBlock", + "label": "IP Block", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cidr", + "label": "CIDR", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "except", + "label": "Except", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "exceptint", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "namespaceSelector", + "label": "Namespace Selector", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "podSelector", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ports", + "label": "Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int" + } + }, + { + "variable": "endPort", + "label": "End Port", + "schema": { + "type": "int" + } + }, + { + "variable": "protocol", + "label": "Protocol", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "TCP", + "description": "TCP" + }, + { + "value": "UDP", + "description": "UDP" + }, + { + "value": "SCTP", + "description": "SCTP" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "ingressEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "from", + "label": "From", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "fromEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ipBlock", + "label": "IP Block", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cidr", + "label": "CIDR", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "except", + "label": "Except", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "exceptint", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "namespaceSelector", + "label": "Namespace Selector", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "podSelector", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "matchExpressions", + "label": "Match Expressions", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "expressionEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "key", + "label": "Key", + "schema": { + "type": "string" + } + }, + { + "variable": "operator", + "label": "Operator", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "In", + "description": "In" + }, + { + "value": "NotIn", + "description": "NotIn" + }, + { + "value": "Exists", + "description": "Exists" + }, + { + "value": "DoesNotExist", + "description": "DoesNotExist" + } + ] + } + }, + { + "variable": "values", + "label": "Values", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "value", + "label": "", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ports", + "label": "Ports", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "portsEntry", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int" + } + }, + { + "variable": "endPort", + "label": "End Port", + "schema": { + "type": "int" + } + }, + { + "variable": "protocol", + "label": "Protocol", + "schema": { + "type": "string", + "default": "TCP", + "enum": [ + { + "value": "TCP", + "description": "TCP" + }, + { + "value": "UDP", + "description": "UDP" + }, + { + "value": "SCTP", + "description": "SCTP" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "addons", + "group": "Addons", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "codeserver", + "label": "Codeserver", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "service", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "NodePort", + "description": "Deprecated CHANGE THIS" + }, + { + "value": "ClusterIP", + "description": "ClusterIP" + }, + { + "value": "LoadBalancer", + "description": "LoadBalancer" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "codeserver", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "port", + "label": "Port", + "schema": { + "type": "int", + "default": 36107 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ingress", + "label": "Ingress", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Ingress", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hosts", + "label": "Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "hostEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "host", + "label": "HostName", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "paths", + "label": "Paths", + "schema": { + "type": "list", + "default": [ + { + "path": "/", + "pathType": "Prefix" + } + ], + "items": [ + { + "variable": "pathEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "path", + "label": "Path", + "schema": { + "type": "string", + "required": true, + "default": "/" + } + }, + { + "variable": "pathType", + "label": "Path Type", + "schema": { + "type": "string", + "required": true, + "default": "Prefix" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "integrations", + "label": "Integrations", + "description": "Connect ingress with other charts", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "traefik", + "label": "Traefik", + "description": "Connect ingress with Traefik", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "allowCors", + "label": "Allow Cross Origin Requests (advanced)", + "schema": { + "type": "boolean", + "default": false, + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + }, + { + "variable": "entrypoints", + "label": "Entrypoints", + "schema": { + "type": "list", + "default": [ + "websecure" + ], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "entrypoint", + "label": "Entrypoint", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "middlewares", + "label": "Middlewares", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "middleware", + "label": "Middleware", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + }, + { + "variable": "namespace", + "label": "namespace (optional)", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "certManager", + "label": "certManager", + "description": "Connect ingress with certManager", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "certificateIssuer", + "label": "certificateIssuer", + "description": "defaults to chartname", + "schema": { + "type": "string", + "default": "", + "show_if": [ + [ + "enabled", + "=", + true + ] + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "ingressClassName", + "label": "(Advanced/Optional) IngressClass Name", + "schema": { + "type": "string", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "show_if": [ + [ + "advanced", + "=", + true + ] + ], + "default": [], + "items": [ + { + "variable": "tlsEntry", + "label": "Host", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hosts", + "label": "Certificate Hosts", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "host", + "label": "Host", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "certificateIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "clusterCertificate", + "label": "Cluster Certificate (Advanced)", + "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", + "schema": { + "type": "string", + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "default": "" + } + }, + { + "variable": "secretName", + "label": "Use Custom Certificate Secret (Advanced)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "scaleCert", + "label": "Use TrueNAS SCALE Certificate (Deprecated)", + "schema": { + "show_if": [ + [ + "certificateIssuer", + "=", + "" + ] + ], + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "envList", + "label": "Codeserver Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "netshoot", + "label": "Netshoot", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "envList", + "label": "Netshoot Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "vpn", + "label": "VPN", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type", + "schema": { + "type": "string", + "default": "disabled", + "enum": [ + { + "value": "disabled", + "description": "disabled" + }, + { + "value": "gluetun", + "description": "Gluetun" + }, + { + "value": "tailscale", + "description": "Tailscale" + }, + { + "value": "openvpn", + "description": "OpenVPN (Deprecated)" + }, + { + "value": "wireguard", + "description": "Wireguard (Deprecated)" + } + ] + } + }, + { + "variable": "openvpn", + "label": "OpenVPN Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "type", + "=", + "openvpn" + ] + ], + "attrs": [ + { + "variable": "username", + "label": "Authentication Username (Optional)", + "description": "Authentication Username, Optional", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "password", + "label": "Authentication Password", + "description": "Authentication Credentials", + "schema": { + "type": "string", + "show_if": [ + [ + "username", + "!=", + "" + ] + ], + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "tailscale", + "label": "Tailscale Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "type", + "=", + "tailscale" + ] + ], + "attrs": [ + { + "variable": "authkey", + "label": "Authentication Key", + "description": "Provide an auth key to automatically authenticate the node as your user account.", + "schema": { + "type": "string", + "private": true, + "default": "" + } + }, + { + "variable": "auth_once", + "label": "Auth Once", + "description": "Only attempt to log in if not already logged in.", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "accept_dns", + "label": "Accept DNS", + "description": "Accept DNS configuration from the admin console.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "userspace", + "label": "Userspace", + "description": "Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "routes", + "label": "Routes", + "description": "Expose physical subnet routes to your entire Tailscale network.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "dest_ip", + "label": "Destination IP", + "description": "Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "sock5_server", + "label": "Sock5 Server", + "description": "The address on which to listen for SOCKS5 proxying into the tailscale net.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "outbound_http_proxy_listen", + "label": "Outbound HTTP Proxy Listen", + "description": "The address on which to listen for HTTP proxying into the tailscale net.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "extra_args", + "label": "Extra Args", + "description": "Extra Args", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "daemon_extra_args", + "label": "Tailscale Daemon Extra Args", + "description": "Tailscale Daemon Extra Args", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "killSwitch", + "label": "Enable Killswitch", + "schema": { + "type": "boolean", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": true + } + }, + { + "variable": "excludedNetworks_IPv4", + "label": "Killswitch Excluded IPv4 networks", + "description": "List of Killswitch Excluded IPv4 Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "networkv4", + "label": "IPv4 Network", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "excludedNetworks_IPv6", + "label": "Killswitch Excluded IPv6 networks", + "description": "List of Killswitch Excluded IPv6 Addresses", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "networkv6", + "label": "IPv6 Network", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "configFile", + "label": "VPN Config File Location", + "schema": { + "type": "string", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": "" + } + }, + { + "variable": "envList", + "label": "VPN Environment Variables", + "schema": { + "type": "list", + "show_if": [ + [ + "type", + "!=", + "disabled" + ] + ], + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string", + "required": true, + "max_length": 10240 + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "docs", + "group": "Documentation", + "label": "Please read the documentation at https://truecharts.org", + "description": "Please read the documentation at
https://truecharts.org", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "confirmDocs", + "label": "I have checked the documentation", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + }, + { + "variable": "donateNag", + "group": "Documentation", + "label": "Please consider supporting TrueCharts, see https://truecharts.org/sponsor", + "description": "Please consider supporting TrueCharts, see
https://truecharts.org/sponsor", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "confirmDonate", + "label": "I have considered donating", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + } + ] + } + } + ] + }, + "app_readme": "

Looks and smells like Overseerr, does the opposite. Maintenance tool for the Plex ecosystem.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/maintainerr

\n
\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

", + "detailed_readme": "
\n

title: README

\n

General Info

\n

TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible

\n

For more information about this Chart, please check the docs on the TrueCharts website

\n

This chart is not maintained by the upstream project and any issues with the chart should be raised here

\n

Installation

\n

Helm-Chart installation

\n

To install TrueCharts Helm charts using Helm, you can use our OCI Repository.

\n

helm install mychart oci://tccr.io/truecharts/CHARTNAME

\n

For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/

\n

TrueNAS SCALE Apps

\n

For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.

\n

Chart Specific Guides and information

\n

All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/maintainerr

\n

Configuration Options

\n

Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE

\n

To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/maintainerr/values.yaml

\n

All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/

\n

For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml

\n

Support

\n\n
\n

Sponsor TrueCharts

\n

TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!

\n

All Rights Reserved - The TrueCharts Project

", + "changelog": "

for the complete changelog, please refer to the website

\n

Important:

" + }, "3.0.9": { "healthy": true, "supported": true,