From 734c2403b1c2fc62a595376eed2dc79bf5fef608 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 30 Aug 2022 20:15:56 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/owncloud-ocis/8.0.0/CHANGELOG.md | 99 + stable/owncloud-ocis/8.0.0/Chart.lock | 6 + stable/owncloud-ocis/8.0.0/Chart.yaml | 34 + stable/owncloud-ocis/8.0.0/README.md | 109 + stable/owncloud-ocis/8.0.0/app-readme.md | 8 + .../8.0.0/charts/common-10.5.5.tgz | Bin 0 -> 48151 bytes stable/owncloud-ocis/8.0.0/ix_values.yaml | 61 + stable/owncloud-ocis/8.0.0/questions.yaml | 2710 ++++++++++++ .../8.0.0/templates/_secrets.tpl | 28 + .../owncloud-ocis/8.0.0/templates/common.yaml | 8 + stable/owncloud-ocis/8.0.0/values.yaml | 0 stable/sdtd/1.0.0/CHANGELOG.md | 99 + stable/sdtd/1.0.0/Chart.lock | 6 + stable/sdtd/1.0.0/Chart.yaml | 29 + stable/sdtd/1.0.0/README.md | 109 + stable/sdtd/1.0.0/app-readme.md | 8 + stable/sdtd/1.0.0/charts/common-10.5.5.tgz | Bin 0 -> 48151 bytes stable/sdtd/1.0.0/ix_values.yaml | 105 + stable/sdtd/1.0.0/questions.yaml | 3662 +++++++++++++++++ stable/sdtd/1.0.0/templates/common.yaml | 2 + stable/sdtd/1.0.0/values.yaml | 0 stable/sdtd/item.yaml | 4 + 22 files changed, 7087 insertions(+) create mode 100644 stable/owncloud-ocis/8.0.0/CHANGELOG.md create mode 100644 stable/owncloud-ocis/8.0.0/Chart.lock create mode 100644 stable/owncloud-ocis/8.0.0/Chart.yaml create mode 100644 stable/owncloud-ocis/8.0.0/README.md create mode 100644 stable/owncloud-ocis/8.0.0/app-readme.md create mode 100644 stable/owncloud-ocis/8.0.0/charts/common-10.5.5.tgz create mode 100644 stable/owncloud-ocis/8.0.0/ix_values.yaml create mode 100644 stable/owncloud-ocis/8.0.0/questions.yaml create mode 100644 stable/owncloud-ocis/8.0.0/templates/_secrets.tpl create mode 100644 stable/owncloud-ocis/8.0.0/templates/common.yaml create mode 100644 stable/owncloud-ocis/8.0.0/values.yaml create mode 100644 stable/sdtd/1.0.0/CHANGELOG.md create mode 100644 stable/sdtd/1.0.0/Chart.lock create mode 100644 stable/sdtd/1.0.0/Chart.yaml create mode 100644 stable/sdtd/1.0.0/README.md create mode 100644 stable/sdtd/1.0.0/app-readme.md create mode 100644 stable/sdtd/1.0.0/charts/common-10.5.5.tgz create mode 100644 stable/sdtd/1.0.0/ix_values.yaml create mode 100644 stable/sdtd/1.0.0/questions.yaml create mode 100644 stable/sdtd/1.0.0/templates/common.yaml create mode 100644 stable/sdtd/1.0.0/values.yaml create mode 100644 stable/sdtd/item.yaml diff --git a/stable/owncloud-ocis/8.0.0/CHANGELOG.md b/stable/owncloud-ocis/8.0.0/CHANGELOG.md new file mode 100644 index 0000000000..bad9b82410 --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [owncloud-ocis-8.0.0](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.27...owncloud-ocis-8.0.0) (2022-08-30) + +### Chore + +- Auto-update chart README [skip ci] + - update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + ### Fix + +- Fix init ([#3630](https://github.com/truecharts/charts/issues/3630)) + + + + +## [owncloud-ocis-7.0.28](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.27...owncloud-ocis-7.0.28) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [owncloud-ocis-7.0.27](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.26...owncloud-ocis-7.0.27) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + + + + +## [owncloud-ocis-7.0.26](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.25...owncloud-ocis-7.0.26) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + + + + +## [owncloud-ocis-7.0.25](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.24...owncloud-ocis-7.0.25) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps + - update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + + ### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + + + + +## [owncloud-ocis-7.0.24](https://github.com/truecharts/charts/compare/owncloud-ocis-7.0.23...owncloud-ocis-7.0.24) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) + - replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + + + + +## [owncloud-ocis-7.0.23](https://github.com/truecharts/apps/compare/owncloud-ocis-7.0.22...owncloud-ocis-7.0.23) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) + - update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + + + + +## [owncloud-ocis-7.0.22](https://github.com/truecharts/apps/compare/owncloud-ocis-7.0.21...owncloud-ocis-7.0.22) (2022-07-25) + +### Chore + +- Auto-update chart README [skip ci] + - update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + + + + +## [owncloud-ocis-7.0.22](https://github.com/truecharts/apps/compare/owncloud-ocis-7.0.21...owncloud-ocis-7.0.22) (2022-07-25) + +### Chore + +- update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + + + + +## [owncloud-ocis-7.0.21](https://github.com/truecharts/apps/compare/owncloud-ocis-7.0.20...owncloud-ocis-7.0.21) (2022-07-23) diff --git a/stable/owncloud-ocis/8.0.0/Chart.lock b/stable/owncloud-ocis/8.0.0/Chart.lock new file mode 100644 index 0000000000..555a16077b --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.5.5 +digest: sha256:963edb7ce093210268f3c23a53bbcecb104580bac0fcad298c8e68b833b0837d +generated: "2022-08-30T20:10:13.156921118Z" diff --git a/stable/owncloud-ocis/8.0.0/Chart.yaml b/stable/owncloud-ocis/8.0.0/Chart.yaml new file mode 100644 index 0000000000..fae11fb611 --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/Chart.yaml @@ -0,0 +1,34 @@ +apiVersion: v2 +appVersion: "2.0.0" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.5.5 +description: ownCloud Infinite Scale is a self-hosted file sync and share server. +home: https://truecharts.org/docs/charts/stable/owncloud-ocis +icon: https://truecharts.org/img/hotlink-ok/chart-icons/owncloud-ocis.png +keywords: + - owncloud + - ocis + - infinite + - scale + - self-hosted + - sync + - share + - server +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: owncloud-ocis +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/owncloud-ocis + - https://hub.docker.com/r/owncloud/ocis + - https://owncloud.dev/ocis/ +version: 8.0.0 +annotations: + truecharts.org/catagories: | + - media + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/owncloud-ocis/8.0.0/README.md b/stable/owncloud-ocis/8.0.0/README.md new file mode 100644 index 0000000000..a410ae27a3 --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/README.md @@ -0,0 +1,109 @@ +# owncloud-ocis + +![Version: 8.0.0](https://img.shields.io/badge/Version-8.0.0-informational?style=flat-square) ![AppVersion: 2.0.0](https://img.shields.io/badge/AppVersion-2.0.0-informational?style=flat-square) + +ownCloud Infinite Scale is a self-hosted file sync and share server. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [owncloud-ocis](https://truecharts.org/docs/charts/stable/owncloud-ocis) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Source Code + +* +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.truecharts.org | common | 10.5.5 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Installing-an-App). + +### Helm + +To install the chart with the release name `owncloud-ocis` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install owncloud-ocis TrueCharts/owncloud-ocis +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `owncloud-ocis` deployment + +```console +helm uninstall owncloud-ocis +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install owncloud-ocis \ + --set env.TZ="America/New York" \ + TrueCharts/owncloud-ocis +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install owncloud-ocis TrueCharts/owncloud-ocis -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/owncloud-ocis/8.0.0/app-readme.md b/stable/owncloud-ocis/8.0.0/app-readme.md new file mode 100644 index 0000000000..a0756cbc9d --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/app-readme.md @@ -0,0 +1,8 @@ +ownCloud Infinite Scale is a self-hosted file sync and share server. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/owncloud-ocis](https://truecharts.org/docs/charts/stable/owncloud-ocis) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/stable/owncloud-ocis/8.0.0/charts/common-10.5.5.tgz b/stable/owncloud-ocis/8.0.0/charts/common-10.5.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..00d7f8ae51e9f7e53006ab68dca02b5d45e6e4d3 GIT binary patch literal 48151 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 T@ACf#00960Ki%>D0NexssP*FC literal 0 HcmV?d00001 diff --git a/stable/owncloud-ocis/8.0.0/ix_values.yaml b/stable/owncloud-ocis/8.0.0/ix_values.yaml new file mode 100644 index 0000000000..1fe2bd3583 --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/ix_values.yaml @@ -0,0 +1,61 @@ +image: + repository: tccr.io/truecharts/ocis + tag: 2.0.0@sha256:208f181966b2ef710633e17c27d143e866f40e186c67dd1c3f78748f6f871e82 + pullPolicy: IfNotPresent + +securityContext: + readOnlyRootFilesystem: false + +env: + OCIS_INSECURE: true + ACCOUNTS_DEMO_USERS_AND_GROUPS: false + OCIS_LOG_PRETTY: true + OCIS_LOG_COLOR: true + PROXY_TLS: false + PROXY_HTTP_ADDR: "0.0.0.0:{{ .Values.service.main.ports.main.port }}" + OCIS_URL: "https://localhost:{{ .Values.service.main.ports.main.port }}" + OCIS_JWT_SECRET: + secretKeyRef: + name: ocis-secrets + key: OCIS_JWT_SECRET + STORAGE_TRANSFER_SECRET: + secretKeyRef: + name: ocis-secrets + key: STORAGE_TRANSFER_SECRET + OCIS_MACHINE_AUTH_API_KEY: + secretKeyRef: + name: ocis-secrets + key: OCIS_MACHINE_AUTH_API_KEY + +service: + main: + ports: + main: + protocol: HTTPS + port: 9200 + targetPort: 9200 + +initContainers: + init: + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + volumeMounts: + - name: config + mountPath: "/etc/ocis" + command: + - "/bin/sh" + - "-c" + - | + /usr/bin/ocis init <<'EOF' + yes + EOF + +persistence: + data: + enabled: true + mountPath: "/var/lib/ocis" + config: + enabled: true + mountPath: "/etc/ocis" + +portal: + enabled: true diff --git a/stable/owncloud-ocis/8.0.0/questions.yaml b/stable/owncloud-ocis/8.0.0/questions.yaml new file mode 100644 index 0000000000..82b6fb1555 --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/questions.yaml @@ -0,0 +1,2710 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + additional_attrs: true + type: dict + attrs: + - variable: OCIS_INSECURE + label: "OCIS_INSECURE" + description: "Set to true if you are using self signed certs" + schema: + type: boolean + default: false + - variable: PROXY_TLS + label: "PROXY_TLS" + description: "Set to true if you are traefik" + schema: + type: boolean + default: true + - variable: ACCOUNTS_DEMO_USERS_AND_GROUPS + label: "ACCOUNTS_DEMO_USERS_AND_GROUPS" + description: "Set to false to skip the generation of demo users in the first place" + schema: + type: boolean + default: false + - variable: OCIS_LOG_PRETTY + label: "OCIS_LOG_PRETTY" + description: "OCIS_LOG_PRETTY" + schema: + type: boolean + default: true + - variable: OCIS_LOG_COLOR + label: "OCIS_LOG_COLOR" + description: "OCIS_LOG_COLOR" + schema: + type: boolean + default: true + - variable: PROXY_HTTP_ADDR + label: "PROXY_HTTP_ADDR" + description: "PROXY_HTTP_ADDR" + schema: + type: string + default: "0.0.0.0:9200" + - variable: OCIS_URL + label: "OCIS_URL" + description: "OCIS_URL" + schema: + type: string + default: "https://localhost:9200" + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: Container Configuration + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 9200 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTPS + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 9200 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort + schema: + type: int + min: 9000 + max: 65535 + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: data + label: "App Data Storage" + description: "Stores the Application Data." + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: 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: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: true + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID this App of the user running the application" + schema: + type: int + default: 568 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: hostPath + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: networkPolicy +# group: Advanced +# label: (Advanced) Network Policy +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: policyType +# label: Policy Type +# schema: +# type: string +# default: "" +# enum: +# - value: "" +# description: Default +# - value: ingress +# description: Ingress +# - value: egress +# description: Egress +# - value: ingress-egress +# description: Ingress and Egress +# - variable: egress +# label: Egress +# schema: +# type: list +# default: [] +# items: +# - variable: egressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: to +# label: To +# schema: +# type: list +# default: [] +# items: +# - variable: toEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP +# - variable: ingress +# label: Ingress +# schema: +# type: list +# default: [] +# items: +# - variable: ingressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: from +# label: From +# schema: +# type: list +# default: [] +# items: +# - variable: fromEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP + + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: Sock5 Server + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: NodePort + enum: + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: nodePort + description: Leave Empty to Disable + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: docs + group: Documentation + label: "Please read the documentation at https://truecharts.org" + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: "Please consider supporting TrueCharts, see: https://truecharts.org/docs/about/sponsor" + 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/owncloud-ocis/8.0.0/templates/_secrets.tpl b/stable/owncloud-ocis/8.0.0/templates/_secrets.tpl new file mode 100644 index 0000000000..deea14a33f --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/templates/_secrets.tpl @@ -0,0 +1,28 @@ +{{/* Define the secrets */}} +{{- define "ocis.secrets" -}} +--- + +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: ocis-secrets +{{- $ocisprevious := lookup "v1" "Secret" .Release.Namespace "ocis-secrets" }} +{{- $ocis_jwt_secret := "" }} +{{- $storage_transfer_secret := "" }} +{{- $ocis_machine_auth_api_Key := "" }} +data: + {{- if $ocisprevious}} + OCIS_JWT_SECRET: {{ index $ocisprevious.data "OCIS_JWT_SECRET" }} + STORAGE_TRANSFER_SECRET: {{ index $ocisprevious.data "STORAGE_TRANSFER_SECRET" }} + OCIS_MACHINE_AUTH_API_KEY: {{ index $ocisprevious.data "OCIS_MACHINE_AUTH_API_KEY" }} + {{- else }} + {{- $ocis_jwt_secret := randAlphaNum 32 }} + {{- $storage_transfer_secret := randAlphaNum 32 }} + {{- $ocis_machine_auth_api_Key := randAlphaNum 32 }} + OCIS_JWT_SECRET: {{ $ocis_jwt_secret | b64enc }} + STORAGE_TRANSFER_SECRET: {{ $storage_transfer_secret | b64enc }} + OCIS_MACHINE_AUTH_API_KEY: {{ $ocis_machine_auth_api_Key | b64enc }} + {{- end }} + +{{- end -}} diff --git a/stable/owncloud-ocis/8.0.0/templates/common.yaml b/stable/owncloud-ocis/8.0.0/templates/common.yaml new file mode 100644 index 0000000000..f8dc48fa8d --- /dev/null +++ b/stable/owncloud-ocis/8.0.0/templates/common.yaml @@ -0,0 +1,8 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.common.loader.init" . }} + +{{/* Render secrets for fireflyiii */}} +{{- include "ocis.secrets" . }} + +{{/* Render the templates */}} +{{ include "tc.common.loader.apply" . }} diff --git a/stable/owncloud-ocis/8.0.0/values.yaml b/stable/owncloud-ocis/8.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/sdtd/1.0.0/CHANGELOG.md b/stable/sdtd/1.0.0/CHANGELOG.md new file mode 100644 index 0000000000..598d056a14 --- /dev/null +++ b/stable/sdtd/1.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [sdtd-1.0.0](https://github.com/truecharts/charts/compare/sdtd-0.0.21...sdtd-1.0.0) (2022-08-30) + +### Feat + +- move to stable ([#3633](https://github.com/truecharts/charts/issues/3633)) + + + + +## [sdtd-0.0.22](https://github.com/truecharts/charts/compare/sdtd-0.0.21...sdtd-0.0.22) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + + + + +## [sdtd-0.0.21](https://github.com/truecharts/charts/compare/sdtd-0.0.20...sdtd-0.0.21) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + + + + +## [sdtd-0.0.20](https://github.com/truecharts/charts/compare/sdtd-0.0.18...sdtd-0.0.20) (2022-08-26) + +### Fix + +- some cleanup ([#3586](https://github.com/truecharts/charts/issues/3586)) + + + + +## [sdtd-0.0.18](https://github.com/truecharts/charts/compare/sdtd-0.0.17...sdtd-0.0.18) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + + + + +## [sdtd-0.0.17]sdtd-0.0.17 (2022-08-22) + +### Fix + +- rename 7daystodie to stdt and cleanup ([#3529](https://github.com/truecharts/charts/issues/3529)) + + + + +## [server-7daystodie-0.0.16](https://github.com/truecharts/charts/compare/server-7daystodie-0.0.15...server-7daystodie-0.0.16) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps + - update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + + ### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + + + + +## [server-7daystodie-0.0.15](https://github.com/truecharts/charts/compare/server-7daystodie-0.0.14...server-7daystodie-0.0.15) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) + - replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + + + + +## [server-7daystodie-0.0.14](https://github.com/truecharts/apps/compare/server-7daystodie-0.0.13...server-7daystodie-0.0.14) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) + - update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + + + + +## [server-7daystodie-0.0.13](https://github.com/truecharts/apps/compare/server-7daystodie-0.0.12...server-7daystodie-0.0.13) (2022-07-25) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] diff --git a/stable/sdtd/1.0.0/Chart.lock b/stable/sdtd/1.0.0/Chart.lock new file mode 100644 index 0000000000..d1dbebbe5c --- /dev/null +++ b/stable/sdtd/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.5.5 +digest: sha256:963edb7ce093210268f3c23a53bbcecb104580bac0fcad298c8e68b833b0837d +generated: "2022-08-30T20:10:13.152943232Z" diff --git a/stable/sdtd/1.0.0/Chart.yaml b/stable/sdtd/1.0.0/Chart.yaml new file mode 100644 index 0000000000..40232438dc --- /dev/null +++ b/stable/sdtd/1.0.0/Chart.yaml @@ -0,0 +1,29 @@ +apiVersion: v2 +appVersion: "latest" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.5.5 +deprecated: false +description: "This chart will download and install SteamCMD. It will also install 7 Days to Die and run it." +home: https://truecharts.org/docs/charts/stable/sdtd +icon: https://truecharts.org/img/hotlink-ok/chart-icons/sdtd.png +keywords: + - sevendaystodie + - game-servers +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: sdtd +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/sdtd + - https://www.steampowered.com/ + - https://hub.docker.com/r/ich777/steamcmd/ +type: application +version: 1.0.0 +annotations: + truecharts.org/SCALE-support: "true" + truecharts.org/catagories: | + - games diff --git a/stable/sdtd/1.0.0/README.md b/stable/sdtd/1.0.0/README.md new file mode 100644 index 0000000000..96966e9172 --- /dev/null +++ b/stable/sdtd/1.0.0/README.md @@ -0,0 +1,109 @@ +# sdtd + +![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square) + +This chart will download and install SteamCMD. It will also install 7 Days to Die and run it. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [sdtd](https://truecharts.org/docs/charts/stable/sdtd) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Source Code + +* +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.truecharts.org | common | 10.5.5 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Installing-an-App). + +### Helm + +To install the chart with the release name `sdtd` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install sdtd TrueCharts/sdtd +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `sdtd` deployment + +```console +helm uninstall sdtd +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the [values.yaml](./values.yaml) file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install sdtd \ + --set env.TZ="America/New York" \ + TrueCharts/sdtd +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install sdtd TrueCharts/sdtd -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Quick-Start%20Guides/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/sdtd/1.0.0/app-readme.md b/stable/sdtd/1.0.0/app-readme.md new file mode 100644 index 0000000000..d2ebcdd3dc --- /dev/null +++ b/stable/sdtd/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +This chart will download and install SteamCMD. It will also install 7 Days to Die and run it. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/sdtd](https://truecharts.org/docs/charts/stable/sdtd) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/stable/sdtd/1.0.0/charts/common-10.5.5.tgz b/stable/sdtd/1.0.0/charts/common-10.5.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..00d7f8ae51e9f7e53006ab68dca02b5d45e6e4d3 GIT binary patch literal 48151 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 T@ACf#00960Ki%>D0NexssP*FC literal 0 HcmV?d00001 diff --git a/stable/sdtd/1.0.0/ix_values.yaml b/stable/sdtd/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..a4e8b2a88e --- /dev/null +++ b/stable/sdtd/1.0.0/ix_values.yaml @@ -0,0 +1,105 @@ +image: + pullPolicy: IfNotPresent + repository: tccr.io/truecharts/7daystodie + tag: latest@sha256:37b1541f166de431eae46bf63dff1fe147c91070e257d92f8b342d07dd1c26a2 + +podSecurityContext: + runAsGroup: 0 + runAsUser: 0 + +securityContext: + readOnlyRootFilesystem: false + runAsNonRoot: false + +secretEnv: + USERNAME: "" + PASSWRD: "" + +env: + ENABLE_BEPINEX: false + BACKUP_FILES: false + BACKUP_INTERVAL: 60 + BACKUP_TO_KEEP: 12 + GAME_ID: "294420" + GAME_PARAMS: "-logfile 7DaysToDie_Data/output_log.txt $@" + SERVERCONFIG: serverconfig.xml + VALIDATE: false + +probes: + startup: + failureThreshold: 360 + +service: + main: + ports: + main: + port: 26900 + protocol: TCP + targetPort: 26900 + steammasterser: + enabled: true + ports: + steammasterser: + enabled: true + port: 26900 + protocol: UDP + targetPort: 26900 + steamcommunica: + enabled: true + ports: + steamcommunica: + enabled: true + port: 26901 + protocol: UDP + targetPort: 26901 + raknet: + enabled: true + ports: + raknet: + enabled: true + port: 26902 + protocol: UDP + targetPort: 26902 + unet: + enabled: true + ports: + unet: + enabled: true + port: 26903 + protocol: UDP + targetPort: 26903 + webbasecontrol: + enabled: true + ports: + webbasecontrol: + enabled: true + port: 8080 + protocol: TCP + targetPort: 8080 + webpanel: + enabled: true + ports: + webpanel: + enabled: true + port: 8082 + protocol: TCP + targetPort: 8082 + registeringats: + enabled: true + ports: + registeringats: + enabled: true + port: 27015 + protocol: UDP + targetPort: 27015 + +persistence: + serverfiles: + enabled: true + mountPath: /serverdata/serverfiles + steamcmd: + enabled: true + mountPath: /serverdata/steamcmd + +portal: + enabled: true diff --git a/stable/sdtd/1.0.0/questions.yaml b/stable/sdtd/1.0.0/questions.yaml new file mode 100644 index 0000000000..929cefc94d --- /dev/null +++ b/stable/sdtd/1.0.0/questions.yaml @@ -0,0 +1,3662 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: secretEnv + group: "Container Configuration" + label: "Image Secrets" + schema: + additional_attrs: true + type: dict + attrs: + - variable: USERNAME + label: Username + description: Your Steam username goes here if you want to install a game that needs a valid account, otherwise leave it blank (ATTENTION You have to disable Steam Guard) + schema: + type: string + default: "" + - variable: PASSWRD + label: Password + description: Your Steam password goes here if you want to install a game that needs a valid account, otherwise leave it blank (ATTENTION You have to disable Steam Guard) + schema: + type: string + private: true + default: "" + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + additional_attrs: true + type: dict + attrs: + - variable: GAME_ID + label: Game ID + description: "The GAME_ID that the container download at startup.(https://developer.valvesoftware.com/wiki/Dedicated_Servers_List)" + schema: + type: string + default: "294420" + - variable: SERVERCONFIG + label: Server Config + description: Please change if your serverconfig file has another name. + schema: + type: string + default: "serverconfig.xml" + - variable: GAME_PARAMS + label: Game Params + description: Enter your start up commands for the server + schema: + type: string + default: "-logfile 7DaysToDie_Data/output_log.txt $@" + - variable: VALIDATE + label: Validate + description: Set the Variable to true if you want to validate the installation otherwise leave it blank." + schema: + type: string + default: "" + - variable: ENABLE_BEPINEX + label: Enable BepInEx + description: If you want to enable BepInEx set this variable to true + schema: + type: boolean + default: false + - variable: BACKUP_FILES + label: Backup Files + description: Set this value to true to enable the automated backup function from the container + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: BACKUP_INTERVAL + label: Backup Interval + description: The backup interval in minutes + schema: + type: int + default: 60 + - variable: BACKUP_TO_KEEP + label: Backup to Keep + description: Number of backups to keep + schema: + type: int + default: 12 + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: Container Configuration + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 26900 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 26900 + - variable: steammasterser + label: 'steammasterser service' + description: "Container Port 26900" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: steammasterser + label: "steammasterser 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: 26900 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 26900 + - variable: steamcommunica + label: 'steamcommunica service' + description: "Container Port 26901" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: steamcommunica + label: "steamcommunica 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: 26901 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 26901 + - variable: raknet + label: 'raknet service' + description: "Container Port 26902" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: raknet + label: "raknet 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: 26902 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 26902 + - variable: unet + label: 'unet service' + description: "Container Port " + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: unet + label: "unet 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: 26903 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 26903 + - variable: webbasecontrol + label: 'webbasecontrol service' + description: "Container Port 8080" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: webbasecontrol + label: "webbasecontrol 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: 8080 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 8080 + - variable: webpanel + label: 'webpanel service' + description: "Container Port 8082" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: webpanel + label: "webpanel 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: 8082 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 8082 + - variable: registeringats + label: 'registeringats service' + description: "Should be in the range 27015 - 27030, dont forget to set also a different Container Port if you change this value." + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: ClusterIP + description: ClusterIP + - value: NodePort + description: NodePort (Advanced) + - value: LoadBalancer + description: LoadBalancer (Advanced) + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: (Advanced) Specify the IP Policy + schema: + show_if: [["type", "!=", "Simple"]] + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: (Advanced) IP Families + description: (Advanced) The IP Families that should be used + schema: + show_if: [["type", "!=", "Simple"]] + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: registeringats + label: "registeringats 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: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 27015 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: Simple + enum: + - value: Simple + description: Simple + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort + schema: + type: int + min: 9000 + max: 65535 + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: steamcmd + label: "steamcmd Storage" + description: "Container Path serverdatasteamcmd" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: serverfiles + label: "serverfiles Storage" + description: "Container Path serverdataserverfiles" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: true + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 999Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: false + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 0 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: hostPath + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: networkPolicy +# group: Advanced +# label: (Advanced) Network Policy +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: policyType +# label: Policy Type +# schema: +# type: string +# default: "" +# enum: +# - value: "" +# description: Default +# - value: ingress +# description: Ingress +# - value: egress +# description: Egress +# - value: ingress-egress +# description: Ingress and Egress +# - variable: egress +# label: Egress +# schema: +# type: list +# default: [] +# items: +# - variable: egressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: to +# label: To +# schema: +# type: list +# default: [] +# items: +# - variable: toEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP +# - variable: ingress +# label: Ingress +# schema: +# type: list +# default: [] +# items: +# - variable: ingressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: from +# label: From +# schema: +# type: list +# default: [] +# items: +# - variable: fromEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP + + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: Sock5 Server + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: NodePort + enum: + - value: NodePort + description: NodePort + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: LoadBalancerIP + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: nodePort + description: Leave Empty to Disable + label: "nodePort" + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: docs + group: Documentation + label: "Please read the documentation at https://truecharts.org" + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: "Please consider supporting TrueCharts, see: https://truecharts.org/docs/about/sponsor" + 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/sdtd/1.0.0/templates/common.yaml b/stable/sdtd/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..cbf66c2081 --- /dev/null +++ b/stable/sdtd/1.0.0/templates/common.yaml @@ -0,0 +1,2 @@ +{{/* Render the templates */}} +{{ include "tc.common.loader.all" . }} diff --git a/stable/sdtd/1.0.0/values.yaml b/stable/sdtd/1.0.0/values.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stable/sdtd/item.yaml b/stable/sdtd/item.yaml new file mode 100644 index 0000000000..e36b6d52e7 --- /dev/null +++ b/stable/sdtd/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/sdtd.png +categories: +- games +