From ae9762a1397cbf5a30a99dee587a1a0d871fd495 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 1 Nov 2022 11:27:49 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/retrobot/1.0.0/CHANGELOG.md | 41 + stable/retrobot/1.0.0/Chart.lock | 6 + stable/retrobot/1.0.0/Chart.yaml | 32 + stable/retrobot/1.0.0/README.md | 107 + stable/retrobot/1.0.0/app-readme.md | 8 + .../retrobot/1.0.0/charts/common-10.7.7.tgz | Bin 0 -> 49153 bytes stable/retrobot/1.0.0/ix_values.yaml | 35 + stable/retrobot/1.0.0/questions.yaml | 2294 +++++++++++++++++ stable/retrobot/1.0.0/templates/common.yaml | 1 + stable/retrobot/1.0.0/values.yaml | 0 stable/retrobot/item.yaml | 5 + 11 files changed, 2529 insertions(+) create mode 100644 stable/retrobot/1.0.0/CHANGELOG.md create mode 100644 stable/retrobot/1.0.0/Chart.lock create mode 100644 stable/retrobot/1.0.0/Chart.yaml create mode 100644 stable/retrobot/1.0.0/README.md create mode 100644 stable/retrobot/1.0.0/app-readme.md create mode 100644 stable/retrobot/1.0.0/charts/common-10.7.7.tgz create mode 100644 stable/retrobot/1.0.0/ix_values.yaml create mode 100644 stable/retrobot/1.0.0/questions.yaml create mode 100644 stable/retrobot/1.0.0/templates/common.yaml create mode 100644 stable/retrobot/1.0.0/values.yaml create mode 100644 stable/retrobot/item.yaml diff --git a/stable/retrobot/1.0.0/CHANGELOG.md b/stable/retrobot/1.0.0/CHANGELOG.md new file mode 100644 index 00000000000..9823da84171 --- /dev/null +++ b/stable/retrobot/1.0.0/CHANGELOG.md @@ -0,0 +1,41 @@ +# Changelog + + + +## [retrobot-1.0.0](https://github.com/truecharts/charts/compare/retrobot-0.0.4...retrobot-1.0.0) (2022-11-01) + + + + +## [retrobot-0.0.4](https://github.com/truecharts/charts/compare/retrobot-0.0.3...retrobot-0.0.4) (2022-10-29) + +### Chore + +- Auto-update chart README [skip ci] + - update docker general non-major ([#4230](https://github.com/truecharts/charts/issues/4230)) + + + + +## [retrobot-0.0.3](https://github.com/truecharts/charts/compare/retrobot-0.0.2...retrobot-0.0.3) (2022-10-25) + +### Chore + +- Auto-update chart README [skip ci] + - update helm general non-major ([#4182](https://github.com/truecharts/charts/issues/4182)) + + + + +## [retrobot-0.0.2](https://github.com/truecharts/charts/compare/retrobot-0.0.1...retrobot-0.0.2) (2022-10-19) + +### Chore + +- Auto-update chart README [skip ci] + - Auto-update chart README [skip ci] + - update helm general non-major ([#4122](https://github.com/truecharts/charts/issues/4122)) + + + + +## [retrobot-0.0.1]retrobot-0.0.1 (2022-10-14) diff --git a/stable/retrobot/1.0.0/Chart.lock b/stable/retrobot/1.0.0/Chart.lock new file mode 100644 index 00000000000..4fb409aa3d5 --- /dev/null +++ b/stable/retrobot/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.7.7 +digest: sha256:1ad92f2f18f9d74ffd15446540b5861f0fc09f91c0ba9f30ba51940e82647587 +generated: "2022-11-01T11:26:15.762285072Z" diff --git a/stable/retrobot/1.0.0/Chart.yaml b/stable/retrobot/1.0.0/Chart.yaml new file mode 100644 index 00000000000..81c5d860ed1 --- /dev/null +++ b/stable/retrobot/1.0.0/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +appVersion: "latest" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.7.7 +deprecated: false +description: A discord bot that allows you to play old nintendo games with your friends over chat. +home: https://truecharts.org/docs/charts/stable/retrobot +icon: https://truecharts.org/img/hotlink-ok/chart-icons/retrobot.png +keywords: + - retrobot + - emulator + - discord +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: retrobot +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/retrobot + - https://github.com/rossimo/retrobot + - https://hub.docker.com/r/rossimo/retrobot +type: application +version: 1.0.0 +annotations: + truecharts.org/catagories: | + - emulator + - games + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/stable/retrobot/1.0.0/README.md b/stable/retrobot/1.0.0/README.md new file mode 100644 index 00000000000..48bbabce5b2 --- /dev/null +++ b/stable/retrobot/1.0.0/README.md @@ -0,0 +1,107 @@ +# retrobot + +A discord bot that allows you to play old nintendo games with your friends over chat. + +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: [retrobot](https://truecharts.org/docs/charts/stable/retrobot) + +**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.7.7 | + +## 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 `retrobot` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install retrobot TrueCharts/retrobot +``` + +## 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 `retrobot` deployment + +```console +helm uninstall retrobot +``` + +## 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/truecharts/library-charts/tree/main/charts/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install retrobot \ + --set env.TZ="America/New York" \ + TrueCharts/retrobot +``` + +#### 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 retrobot TrueCharts/retrobot -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/retrobot/1.0.0/app-readme.md b/stable/retrobot/1.0.0/app-readme.md new file mode 100644 index 00000000000..22284957608 --- /dev/null +++ b/stable/retrobot/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +A discord bot that allows you to play old nintendo games with your friends over chat. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/stable/retrobot](https://truecharts.org/docs/charts/stable/retrobot) + +--- + +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/retrobot/1.0.0/charts/common-10.7.7.tgz b/stable/retrobot/1.0.0/charts/common-10.7.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..94ac67364b77909f3837193a5ab483c19844e88b GIT binary patch literal 49153 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 z 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 literal 0 HcmV?d00001 diff --git a/stable/retrobot/1.0.0/ix_values.yaml b/stable/retrobot/1.0.0/ix_values.yaml new file mode 100644 index 00000000000..01e55829c91 --- /dev/null +++ b/stable/retrobot/1.0.0/ix_values.yaml @@ -0,0 +1,35 @@ +image: + repository: tccr.io/truecharts/retrobot + pullPolicy: IfNotPresent + tag: latest@sha256:7e8a7816010b6240d9da7d2c9555738159ff0bf2f672e8d505a3d3102b4c5853 + +secretEnv: + DISCORD_TOKEN: "" + +env: + MAX_WORKERS: -1 + MAX_WORKERS_PER_GAME: 3 + RECORDING_FRAMERATE: 30 + +service: + main: + enabled: false + ports: + main: + enabled: false + +probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false + +persistence: + data: + enabled: true + mountPath: /retrobot/data + +portal: + enabled: false diff --git a/stable/retrobot/1.0.0/questions.yaml b/stable/retrobot/1.0.0/questions.yaml new file mode 100644 index 00000000000..259d89d41a7 --- /dev/null +++ b/stable/retrobot/1.0.0/questions.yaml @@ -0,0 +1,2294 @@ +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: {} +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: DISCORD_TOKEN + label: Discord Token + description: Sets discord token + schema: + type: string + default: "" + private: true + required: true + - variable: env + group: Container Configuration + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: MAX_WORKERS + label: Max Workers + description: -1 means Retrobot will create a worker thread for each CPU core on the host system. + schema: + type: int + default: -1 + required: true + - variable: MAX_WORKERS_PER_GAME + label: Max Workers Per Game + description: Input assist worker threads to emulate the result of a button press for a game. + schema: + type: int + default: 3 + required: true + - variable: RECORDING_FRAMERATE + label: Recording Framerate + description: Framerate to encode GIFs + schema: + type: int + default: 30 + min: 1 + max: 60 + required: true + - 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: 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: 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: 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: 256Gi + - 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: 256Gi + - 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: 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: true + - 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: horizontalPodAutoscaler + group: Advanced + label: (Advanced) Horizontal Pod Autoscaler + schema: + type: list + default: [] + items: + - variable: hpaEntry + label: HPA Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: target + label: Target + description: Deployment name, Defaults to Main Deployment + schema: + type: string + default: "" + - variable: minReplicas + label: Minimum Replicas + schema: + type: int + default: 1 + - variable: maxReplicas + label: Maximum Replicas + schema: + type: int + default: 5 + - variable: targetCPUUtilizationPercentage + label: Target CPU Utilization Percentage + schema: + type: int + default: 80 + - variable: targetMemoryUtilizationPercentage + label: Target Memory Utilization Percentage + schema: + type: int + default: 80 + - variable: networkPolicy + group: Advanced + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: 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: 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: 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/retrobot/1.0.0/templates/common.yaml b/stable/retrobot/1.0.0/templates/common.yaml new file mode 100644 index 00000000000..c1a366e1cf0 --- /dev/null +++ b/stable/retrobot/1.0.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.common.loader.all" . }} diff --git a/stable/retrobot/1.0.0/values.yaml b/stable/retrobot/1.0.0/values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/stable/retrobot/item.yaml b/stable/retrobot/item.yaml new file mode 100644 index 00000000000..67b6eb81179 --- /dev/null +++ b/stable/retrobot/item.yaml @@ -0,0 +1,5 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/retrobot.png +categories: +- emulator +- games +