From 57dbafc060c3a351a31433ecea9027db52f03bbc Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Mon, 26 Sep 2022 13:24:11 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/qbittorrent/11.0.36/CHANGELOG.md | 99 + stable/qbittorrent/11.0.36/Chart.lock | 6 + stable/qbittorrent/11.0.36/Chart.yaml | 29 + stable/qbittorrent/11.0.36/README.md | 106 + stable/qbittorrent/11.0.36/app-readme.md | 8 + .../11.0.36/charts/common-10.6.1.tgz | Bin 0 -> 48404 bytes stable/qbittorrent/11.0.36/ix_values.yaml | 49 + stable/qbittorrent/11.0.36/questions.yaml | 2814 +++++++++++++++++ .../11.0.36/templates/_configmap.tpl | 32 + .../qbittorrent/11.0.36/templates/common.yaml | 6 + stable/qbittorrent/11.0.36/values.yaml | 0 11 files changed, 3149 insertions(+) create mode 100644 stable/qbittorrent/11.0.36/CHANGELOG.md create mode 100644 stable/qbittorrent/11.0.36/Chart.lock create mode 100644 stable/qbittorrent/11.0.36/Chart.yaml create mode 100644 stable/qbittorrent/11.0.36/README.md create mode 100644 stable/qbittorrent/11.0.36/app-readme.md create mode 100644 stable/qbittorrent/11.0.36/charts/common-10.6.1.tgz create mode 100644 stable/qbittorrent/11.0.36/ix_values.yaml create mode 100644 stable/qbittorrent/11.0.36/questions.yaml create mode 100644 stable/qbittorrent/11.0.36/templates/_configmap.tpl create mode 100644 stable/qbittorrent/11.0.36/templates/common.yaml create mode 100644 stable/qbittorrent/11.0.36/values.yaml diff --git a/stable/qbittorrent/11.0.36/CHANGELOG.md b/stable/qbittorrent/11.0.36/CHANGELOG.md new file mode 100644 index 0000000000..ebfc4cdbaf --- /dev/null +++ b/stable/qbittorrent/11.0.36/CHANGELOG.md @@ -0,0 +1,99 @@ +# Changelog + + + +## [qbittorrent-11.0.36](https://github.com/truecharts/charts/compare/qbittorrent-11.0.35...qbittorrent-11.0.36) (2022-09-26) + +### Chore + +- Auto-update chart README [skip ci] + - fix versioning scheme ([#3913](https://github.com/truecharts/charts/issues/3913)) + + + + +## [qbittorrent-11.0.35](https://github.com/truecharts/charts/compare/qbittorrent-11.0.34...qbittorrent-11.0.35) (2022-09-25) + +### Chore + +- Auto-update chart README [skip ci] + - update helm general non-major ([#3898](https://github.com/truecharts/charts/issues/3898)) + + + + +## [qbittorrent-11.0.34](https://github.com/truecharts/charts/compare/qbittorrent-11.0.33...qbittorrent-11.0.34) (2022-09-22) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - refactor Services SCALE GUI + - update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) + - split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + + + + +## [qbittorrent-11.0.34](https://github.com/truecharts/charts/compare/qbittorrent-11.0.33...qbittorrent-11.0.34) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - refactor Services SCALE GUI + - update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) + - split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + + + + +## [qbittorrent-11.0.34](https://github.com/truecharts/charts/compare/qbittorrent-11.0.33...qbittorrent-11.0.34) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - refactor Services SCALE GUI + - update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) + - split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + + + + +## [qbittorrent-11.0.34](https://github.com/truecharts/charts/compare/qbittorrent-11.0.33...qbittorrent-11.0.34) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] diff --git a/stable/qbittorrent/11.0.36/Chart.lock b/stable/qbittorrent/11.0.36/Chart.lock new file mode 100644 index 0000000000..4cdd850223 --- /dev/null +++ b/stable/qbittorrent/11.0.36/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.6.1 +digest: sha256:bf3e36b0762c5bb98f9bd21769c9b055650f282e4ffd9fb45378aaa81555bc65 +generated: "2022-09-26T13:22:53.46688471Z" diff --git a/stable/qbittorrent/11.0.36/Chart.yaml b/stable/qbittorrent/11.0.36/Chart.yaml new file mode 100644 index 0000000000..6226ef3fd1 --- /dev/null +++ b/stable/qbittorrent/11.0.36/Chart.yaml @@ -0,0 +1,29 @@ +apiVersion: v2 +appVersion: "4.4.5" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.6.1 +deprecated: false +description: qBittorrent is a cross-platform free and open-source BitTorrent client +home: https://truecharts.org/docs/charts/stable/qbittorrent +icon: https://truecharts.org/img/hotlink-ok/chart-icons/qbittorrent.png +keywords: + - qbittorrent + - torrrent +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: qbittorrent +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/qbittorrent + - https://github.com/qbittorrent/qBittorrent +type: application +version: 11.0.36 +annotations: + truecharts.org/catagories: | + - media + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/qbittorrent/11.0.36/README.md b/stable/qbittorrent/11.0.36/README.md new file mode 100644 index 0000000000..d50586c2fe --- /dev/null +++ b/stable/qbittorrent/11.0.36/README.md @@ -0,0 +1,106 @@ +# qbittorrent + +qBittorrent is a cross-platform free and open-source BitTorrent client + +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: [qbittorrent](https://truecharts.org/docs/charts/stable/qbittorrent) + +**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.6.1 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Installing-an-App). + +### Helm + +To install the chart with the release name `qbittorrent` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install qbittorrent TrueCharts/qbittorrent +``` + +## 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/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `qbittorrent` deployment + +```console +helm uninstall qbittorrent +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install qbittorrent \ + --set env.TZ="America/New York" \ + TrueCharts/qbittorrent +``` + +#### 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 qbittorrent TrueCharts/qbittorrent -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/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/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/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/stable/qbittorrent/11.0.36/app-readme.md b/stable/qbittorrent/11.0.36/app-readme.md new file mode 100644 index 0000000000..41edf28feb --- /dev/null +++ b/stable/qbittorrent/11.0.36/app-readme.md @@ -0,0 +1,8 @@ +qBittorrent is a cross-platform free and open-source BitTorrent client + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/qbittorrent](https://truecharts.org/docs/charts/stable/qbittorrent) + +--- + +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/qbittorrent/11.0.36/charts/common-10.6.1.tgz b/stable/qbittorrent/11.0.36/charts/common-10.6.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d1c2567332bcad64389ecede8dccd5488566000e GIT binary patch literal 48404 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 M|0;_OUjXa`0A%l`*#H0l literal 0 HcmV?d00001 diff --git a/stable/qbittorrent/11.0.36/ix_values.yaml b/stable/qbittorrent/11.0.36/ix_values.yaml new file mode 100644 index 0000000000..0257319ba2 --- /dev/null +++ b/stable/qbittorrent/11.0.36/ix_values.yaml @@ -0,0 +1,49 @@ +image: + repository: tccr.io/truecharts/qbittorrent + pullPolicy: IfNotPresent + tag: v4.4.5@sha256:246ecabd9d6893597449e7f62c35d541ffd029cda168b7957008ceec19e87972 + +securityContext: + readOnlyRootFilesystem: false + +service: + main: + ports: + main: + port: 10095 + targetPort: 8080 + torrent: + enabled: true + ports: + torrent: + enabled: true + port: 6881 + targetPort: 6881 + torrentudp: + enabled: true + ports: + torrentudp: + enabled: true + port: 6881 + targetPort: 6881 + protocol: UDP + +persistence: + config: + enabled: true + mountPath: "/config" + +additionalVolumes: + - name: qbittorrent-scripts + emptyDir: {} + ## When you want to enable automatic port configuration at startup, adjust this to: + # configMap: + # name: -scripts + # defaultMode: 511 + +additionalVolumeMounts: + - mountPath: "/config/custom-cont-init.d" + name: qbittorrent-scripts + +portal: + enabled: true diff --git a/stable/qbittorrent/11.0.36/questions.yaml b/stable/qbittorrent/11.0.36/questions.yaml new file mode 100644 index 0000000000..8baf3d4b85 --- /dev/null +++ b/stable/qbittorrent/11.0.36/questions.yaml @@ -0,0 +1,2814 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: Container Configuration + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: The IP Families that should be used + schema: + 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: 10095 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 8080 + - variable: torrent + label: "TCP Torrent Service" + description: "Torrent service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: The IP Families that should be used + schema: + 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: torrent + label: "TCP 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: 6881 + 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: 6881 + - variable: torrentudp + label: "UDP Torrent Service" + description: "Torrent service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: The IP Families that should be used + schema: + 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: torrentudp + label: "UDP 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: 6881 + 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: UDP + 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: 6881 + - 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 and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: 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: 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: 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 and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: nodePort + description: Leave Empty to Disable + label: nodePort DEPRECATED + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true diff --git a/stable/qbittorrent/11.0.36/templates/_configmap.tpl b/stable/qbittorrent/11.0.36/templates/_configmap.tpl new file mode 100644 index 0000000000..b5d6f3cfd1 --- /dev/null +++ b/stable/qbittorrent/11.0.36/templates/_configmap.tpl @@ -0,0 +1,32 @@ +{{/* Define the configmap */}} +{{- define "qbittorrent.configmap" -}} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "tc.common.names.fullname" . }}-scripts + labels: + {{- include "tc.common.labels" . | nindent 4 }} +data: + {{- $bittorrentPort := "" -}} + {{- $bittorrentPort = .Values.service.torrent.ports.torrent.port -}} + {{- if $bittorrentPort }} + 31-update-port: |- + #!/bin/bash + QBITTORRENT_CONFIGFILE="/config/qBittorrent/qBittorrent.conf" + INCOMING_PORT={{- $bittorrentPort }} + + incoming_port_exist=$(cat ${QBITTORRENT_CONFIGFILE} | grep -m 1 'Connection\\PortRangeMin='${INCOMING_PORT}) + if [[ -z "${incoming_port_exist}" ]]; then + incoming_exist=$(cat ${QBITTORRENT_CONFIGFILE} | grep -m 1 'Connection\\PortRangeMin') + if [[ ! -z "${incoming_exist}" ]]; then + # Get line number of Incoming + LINE_NUM=$(grep -Fn -m 1 'Connection\PortRangeMin' ${QBITTORRENT_CONFIGFILE} | cut -d: -f 1) + sed -i "${LINE_NUM}s@.*@Connection\\\PortRangeMin=${INCOMING_PORT}@" ${QBITTORRENT_CONFIGFILE} + else + echo "Connection\\PortRangeMin=${INCOMING_PORT}" >> ${QBITTORRENT_CONFIGFILE} + fi + fi + {{- end }} +{{- end -}} diff --git a/stable/qbittorrent/11.0.36/templates/common.yaml b/stable/qbittorrent/11.0.36/templates/common.yaml new file mode 100644 index 0000000000..a6f2d0e33f --- /dev/null +++ b/stable/qbittorrent/11.0.36/templates/common.yaml @@ -0,0 +1,6 @@ +{{/* Render the templates */}} +{{ include "tc.common.loader.all" . }} + + +{{/* Render the configmap */}} +{{ include "qbittorrent.configmap" . }} diff --git a/stable/qbittorrent/11.0.36/values.yaml b/stable/qbittorrent/11.0.36/values.yaml new file mode 100644 index 0000000000..e69de29bb2