diff --git a/charts/handbrake/1.0.0/Chart.yaml b/charts/handbrake/1.0.0/Chart.yaml new file mode 100644 index 00000000000..a836a675cb8 --- /dev/null +++ b/charts/handbrake/1.0.0/Chart.yaml @@ -0,0 +1,18 @@ +apiVersion: v2 +name: handbrake +version: 1.0.0 +appVersion: 1.23.1 +description: HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs. +keywords: + - handbrake + - encode + - media +home: https://handbrake.fr/ +icon: https://handbrake.fr/img/logo.png +sources: + - https://github.com/jlesage/docker-handbrake + - https://hub.docker.com/r/jlesage/handbrake/ +dependencies: + - name: common + repository: https://charts.truecharts.org/ + version: 1.3.0 diff --git a/charts/handbrake/1.0.0/README.md b/charts/handbrake/1.0.0/README.md new file mode 100644 index 00000000000..990fe4d26c5 --- /dev/null +++ b/charts/handbrake/1.0.0/README.md @@ -0,0 +1,14 @@ +# Handbrake + +## Introduction + +This Chart installs Handbrake in a Docker with VNC viewer + +## Configuration + +The source page of the docker explains in great detail how to configure handbrake with Enviromental Variables. +https://github.com/jlesage/docker-handbrake#multiple-watch-folders + +## NOTE + +For now it's not possible to add extra watch folder from the UI. When TrueCharts supports that, this chart should be updated to reflect that. diff --git a/charts/handbrake/1.0.0/app-readme.md b/charts/handbrake/1.0.0/app-readme.md new file mode 100644 index 00000000000..f0e623191d8 --- /dev/null +++ b/charts/handbrake/1.0.0/app-readme.md @@ -0,0 +1 @@ +The handbrake App is designed to deploy handbrake in a TrueNAS SCALE kubernetes cluster. diff --git a/charts/handbrake/1.0.0/charts/common-1.3.0.tgz b/charts/handbrake/1.0.0/charts/common-1.3.0.tgz new file mode 100644 index 00000000000..c4b3e3cd141 Binary files /dev/null and b/charts/handbrake/1.0.0/charts/common-1.3.0.tgz differ diff --git a/charts/handbrake/1.0.0/questions.yaml b/charts/handbrake/1.0.0/questions.yaml new file mode 100644 index 00000000000..1cfeee7b918 --- /dev/null +++ b/charts/handbrake/1.0.0/questions.yaml @@ -0,0 +1,677 @@ +# Groups +groups: + - name: "Container Image" + description: "Image configuration" + - name: "Configuration" + description: "Container configuration" + - name: "Networking" + description: "Network configuration" + - name: "Ingress" + description: "Ingress configuration" + - name: "Services" + description: "Service configuration" + - name: "Volume Mounts" + description: "Configuration volume mounts" + + +# Portal +portals: + web_portal: + protocols: + - "http" # if SECURE_CONNECTION is set, this should be https, or not.. container will redirect all http to https anyway + host: + - "$node_ip" + ports: + - "$variable-service.port.nodePort" +# UI +questions: + # Image Related + - variable: image + description: "Docker Image Details" + label: "Docker Image" + group: "Container Image" + schema: + type: dict + required: true + attrs: + - variable: repository + label: "Image repository" + description: "Docker image repository" + schema: + type: string + required: true + default: "jlesage/handbrake" + - variable: tag + description: "Tag to use for specified image" + label: "Image Tag" + schema: + type: string + default: "v1.23.1" + - variable: pullPolicy + description: "Docker Image Pull Policy" + label: "Image Pull Policy" + schema: + type: string + default: "IfNotPresent" + enum: + - value: "IfNotPresent" + description: "Only pull image if not present on host" + - value: "Always" + description: "Always pull image even if present on host" + - value: "Never" + description: "Never pull image even if it's not present on host" + + # Configure Time Zone + - variable: timezone + group: "Configuration" + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + + - variable: PUID + group: "Configuration" + label: "PUID" + description: "The UserID of the user running the application and owning the files" + schema: + type: int + default: 568 + + - variable: PGID + group: "Configuration" + label: "PGID" + description: "The groupID of the user/group running the application and owning the files" + schema: + type: int + default: 568 + + - variable: UMASK + group: "Configuration" + label: "UMASK (advanced)" + description: "The UMASK used if supported by the application" + schema: + type: string + default: "002" + + # Configure Enviroment Variables + + - variable: environmentVariables + label: "Image environment" + group: "Configuration" + schema: + type: list + default: [] + items: + - variable: environmentVariable + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + # Docker specific env + - variable: env + group: "Configuration" + label: "Image Environment" + schema: + type: dict + attrs: + - variable: gui + label: "GUI Settings" + description: "Always read description before changing a value here. Also refer to README" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: DISPLAY_WIDTH + label: "DISPLAY_WIDTH" + description: "Width (in pixels) of the application's window." + schema: + type: string + default: "1280" + required: true + - variable: DISPLAY_HEIGHT + label: "DISPLAY_HEIGHT" + description: "Height (in pixels) of the application's window." + schema: + type: string + default: "768" + required: true + - variable: SECURE_CONNECTION + label: "SECURE_CONNECTION" + description: "When set to 1, an encrypted connection is used to access the application's GUI (either via a web browser or VNC client). See the Security section for more details." + schema: + type: string + default: "0" + required: true + - variable: VNC_PASSWORD + label: "VNC_PASSWORD" + description: "Password needed to connect to the application's GUI. See the VNC Password section for more details." + schema: + private: true + type: string + default: "" + - variable: autoconv + label: "Automated Conversion Settings" + description: "Always read description before changing a value here. Also refer to README" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: AUTOMATED_CONVERSION_PRESET + label: "AUTOMATED_CONVERSION_PRESET" + description: "HandBrake preset used by the automatic video converter. Identification of a preset must follow the format /" + schema: + type: string + default: 'General/Very Fast 1080p30' + required: true + - variable: AUTOMATED_CONVERSION_FORMAT + label: "AUTOMATED_CONVERSION_FORMAT" + description: "Video container format used by the automatic video converter for output files. This is typically the video filename extension." + schema: + type: string + default: 'mp4' + required: true + - variable: AUTOMATED_CONVERSION_KEEP_SOURCE + label: "AUTOMATED_CONVERSION_KEEP_SOURCE" + description: "When set to 0, a video that has been successfully converted is removed from the watch folder." + schema: + type: string + default: "1" + required: true + - variable: AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION + label: "AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION" + description: "When set to ignore, a non-video file found in the watch folder is ignored. If set to copy, a non-video file is copied as-is to the output folder." + schema: + type: string + default: 'ignore' + required: true + +# Networking + - variable: service + group: "Services" + label: "Configure Service" + schema: + type: dict + attrs: + - variable: type + label: "Service type" + schema: + type: string + default: "ClusterIP" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + show_subquestions_if: "NodePort" + subquestions: + - variable: port + label: "Port configuration" + schema: + type: dict + attrs: + - variable: webuiport + label: "container port" + schema: + type: int + default: 5800 #web GUI + editable: false + - variable: nodePort + label: "Node Port to expose for UI" + schema: + type: int + min: 9000 + max: 65535 + default: 36052 + required: true + - variable: appAdditionalServices + group: "Services" + label: "Configure additional services" + schema: + type: dict + attrs: + - variable: tcp + label: "" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable TCP port for vnc Connections" + schema: + type: boolean + default: true + hidden: true + - variable: type + label: "Service type" + schema: + type: string + default: "ClusterIP" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + - variable: port + label: "Port configuration" + schema: + type: dict + attrs: + - variable: name + label: "port name" + schema: + type: string + default: "vnc-tcp" + hidden: true + - variable: protocol + label: "Protocol" + schema: + type: string + default: "TCP" + hidden: true + - variable: port + label: "container port" + schema: + type: int + default: 5900 + editable: false + hidden: true + - variable: targetport + label: "container targetport" + schema: + type: int + default: 5900 + editable: false + hidden: true + - variable: nodePort + label: "Node Port to expose" + schema: + type: int + min: 9000 + max: 65535 + default: 36053 + required: false + # Host Networking + - variable: hostNetworking + group: "Networking" + label: "Enable Host Networking" + schema: + type: boolean + default: false + +# Privileged + - variable: securityContext + group: "Volume Mounts" + label: "Security Context" + schema: + type: dict + attrs: + - variable: privileged + label: "Enable privileged to pass thru an Optical Drive device" + schema: + type: boolean + default: true + required: true + +# TrueCharts Specific + - variable: appVolumeMounts + label: "" + group: "Volume Mounts" + schema: + type: dict + attrs: + # config + - variable: config + label: "config Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: enabled + label: "Enabled" + schema: + type: boolean + default: true + required: true + hidden: true + editable: false + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + type: boolean + default: true + hidden: false + - variable: emptyDir + label: "emptyDir" + schema: + type: boolean + default: false + hidden: true + editable: false + - variable: datasetName + label: "Name" + schema: + type: string + default: "config" + editable: false + - variable: mountPath + label: "Mount Path inside the container" + schema: + type: path + default: "/config" + editable: false + - variable: hostPathEnabled + label: "config - Enable Host Path" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "config Host Path" + description: "Host path to store config" + schema: + type: hostpath + required: true + # storage + - variable: storage + label: "storage Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: enabled + label: "Enabled" + schema: + type: boolean + default: true + required: true + hidden: true + editable: false + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + type: boolean + default: true + hidden: false + - variable: emptyDir + label: "emptyDir" + schema: + type: boolean + default: false + hidden: true + editable: false + - variable: datasetName + label: "Name" + schema: + type: string + default: "storage" + editable: false + - variable: mountPath + label: "Mount Path inside the container" + schema: + type: path + default: "/storage" + editable: false + - variable: hostPathEnabled + label: "storage - Enable Host Path" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "storage Host Path" + description: "Host path to store storage" + schema: + type: hostpath + required: true + # watch + - variable: watch + label: "watch Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: enabled + label: "Enabled" + schema: + type: boolean + default: true + required: true + hidden: true + editable: false + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + type: boolean + default: true + hidden: false + - variable: emptyDir + label: "emptyDir" + schema: + type: boolean + default: false + hidden: true + editable: false + - variable: datasetName + label: "Name" + schema: + type: string + default: "watch" + editable: false + - variable: mountPath + label: "Mount Path inside the container" + schema: + type: path + default: "/watch" + editable: false + - variable: hostPathEnabled + label: "watch - Enable Host Path" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "watch Host Path" + description: "Host path to store watch" + schema: + type: hostpath + required: true + # output + - variable: output + label: "output Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: enabled + label: "Enabled" + schema: + type: boolean + default: true + required: true + hidden: true + editable: false + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + type: boolean + default: true + hidden: false + - variable: emptyDir + label: "emptyDir" + schema: + type: boolean + default: false + hidden: true + editable: false + - variable: datasetName + label: "Name" + schema: + type: string + default: "output" + editable: false + - variable: mountPath + label: "Mount Path inside the container" + schema: + type: path + default: "/output" + editable: false + - variable: hostPathEnabled + label: "output - Enable Host Path" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "output Host Path" + description: "Host path to store output" + schema: + type: hostpath + required: true + # Optical Drive + - variable: opticaldrive + label: "Optical Drive Device" + schema: + type: dict + attrs: + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + type: boolean + default: false + hidden: true + - variable: hostPath + label: "Path to Optical Drive device on host" + description: 'Best to use path "by-id"' + schema: + type: path + required: true + default: "/dev/sr0" + - variable: mountPath + label: "Path to mount device inside the container" + schema: + type: path + default: "/dev/sr0" + required: true + # Ingress + - variable: appIngress + label: "" + group: "Ingress" + schema: + type: dict + attrs: + - variable: webui + label: "Web Ingress Configuration" + group: "Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Web Ingress" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: entrypoint + label: "Select Entrypoint" + schema: + type: string + default: "websecure" + required: true + enum: + - value: "websecure" + description: "Websecure: HTTPS/TLS port 443" + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "Domain Name" + required: true + schema: + type: string + - variable: paths + label: "paths" + schema: + type: list + default: [] + items: + - variable: path + label: "Path" + schema: + type: dict + attrs: + - variable: path + label: "path" + schema: + type: string + required: true + default: "/" + - variable: pathType + label: "pathType" + schema: + type: string + required: true + default: "prefix" + - variable: certType + label: "Select Certificate Type" + schema: + type: string + default: "letsencrypt-prod" + enum: + - value: "" + description: "No Encryption/TLS/Certificates" + - value: "letsencrypt-prod" + description: "Letsencrypt Production Certificates" + - value: "letsencrypt-staging" + description: "Letsencrypt Test Certificates" + - value: "wildcard" + description: "Global Wildcard Certificate" + - value: "selfsigned" + description: "Self-Signed Certificate" + - value: "existingcert" + description: "Existing Certificate" + show_subquestions_if: "existingcert" + subquestions: + - variable: existingcert + label: "Existing Certificate Name" + schema: + type: string + default: "" + - variable: authForwardURL + label: "Forward Authentication URL" + schema: + type: string + default: "" diff --git a/charts/handbrake/1.0.0/templates/NOTES.txt b/charts/handbrake/1.0.0/templates/NOTES.txt new file mode 100644 index 00000000000..90f7b653a50 --- /dev/null +++ b/charts/handbrake/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "common.notes.defaultNotes" . -}} diff --git a/charts/handbrake/1.0.0/templates/common.yaml b/charts/handbrake/1.0.0/templates/common.yaml new file mode 100644 index 00000000000..a6613c2ce21 --- /dev/null +++ b/charts/handbrake/1.0.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "common.all" . }} diff --git a/charts/handbrake/1.0.0/test_values.yaml b/charts/handbrake/1.0.0/test_values.yaml new file mode 100644 index 00000000000..42d44a9351e --- /dev/null +++ b/charts/handbrake/1.0.0/test_values.yaml @@ -0,0 +1,127 @@ +image: + repository: jlesage/handbrake + tag: v1.23.1 + pullPolicy: IfNotPresent + +strategy: + type: Recreate + +service: + port: + port: 5800 #Required for web GUI + +#All values here are set as the docker defaults. +envTpl: +# Permissions Settings + USER_ID: "{{ .Values.PUID }}" + GROUP_ID: "{{ .Values.PGID }}" +env: +# General Settings + KEEP_APP_RUNNING: "0" + CLEAN_TMP_DIR: "1" +# GUI Settings + DISPLAY_WIDTH: "1280" + DISPLAY_HEIGHT: "768" + SECURE_CONNECTION: "0" + VNC_PASSWORD: +# Automated Conversion Preset + AUTOMATED_CONVERSION_PRESET: 'General/Very Fast 1080p30' + AUTOMATED_CONVERSION_FORMAT: 'mp4' + AUTOMATED_CONVERSION_KEEP_SOURCE: "1" + AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION: 'ignore' + +persistence: + config: + enabled: false + emptyDir: false + mountPath: /config + + storage: + enabled: false + emptyDir: false + mountPath: /storage # This can be read only + + watch: + enabled: false + emptyDir: false + mountPath: /watch + + output: + enabled: false + emptyDir: false + mountPath: /output + +## Somehow must enable user to add as many watch folders +## All folders must start with "watch" and an index after +## eg. /watch1, /watch2 +## This is importand because settings can overrode to each watch folder exclusivly, with env vars with _# as a suffix +## eg. AUTOMATED_CONVERSION_PRESET_1 + +# Path to your optical drive device in the container +additionalVolumeMounts: [] +# - name: opticaldrive +# mountPath: /dev/serial/by-id/sr0- + +# Path to your zwave device on the host +additionalVolumes: [] +# - name: opticaldrive +# hostPath: +# path: /dev/serial/by-id/sr0- + +# affinity: +# nodeAffinity: +# requiredDuringSchedulingIgnoredDuringExecution: +# nodeSelectorTerms: +# - matchExpressions: +# - key: app +# operator: In +# values: +# - opticaldrive-controller + +appVolumeMounts: + config: + enabled: true + emptyDir: true + datasetName: "config" + mountPath: "/config" + hostPathEnabled: true + setPermissions: true + storage: + enabled: true + emptyDir: true + datasetName: "storage" + mountPath: "/storage" + hostPathEnabled: true + setPermissions: true + watch: + enabled: true + emptyDir: true + datasetName: "watch" + mountPath: "/watch" + hostPathEnabled: true + setPermissions: true + output: + enabled: true + emptyDir: true + datasetName: "output" + mountPath: "/output" + hostPathEnabled: true + setPermissions: true +# opticaldrive: +# enabled: true +# emptyDir: true +# mountPath: "/dev/sr0" +# hostPath: "/dev/sr0" +# hostPathEnabled: true +# setPermissions: true + +appAdditionalServicesEnabled: true +appAdditionalServices: + vnc: + enabled: true + type: ClusterIP + port: + port: 5900 + name: vnc + protocol: "TCP" + targetPort: 5900 diff --git a/charts/handbrake/1.0.0/values.yaml b/charts/handbrake/1.0.0/values.yaml new file mode 100644 index 00000000000..d12a7a6fa60 --- /dev/null +++ b/charts/handbrake/1.0.0/values.yaml @@ -0,0 +1,128 @@ +image: + repository: jlesage/handbrake + tag: v1.23.1 + pullPolicy: IfNotPresent + +strategy: + type: Recreate + +service: + port: + port: 5800 #Required for web GUI + +#All values here are set as the docker defaults. +envTpl: +# Permissions Settings + USER_ID: "{{ .Values.PUID }}" + GROUP_ID: "{{ .Values.PGID }}" +env: +# General Settings + KEEP_APP_RUNNING: "0" + CLEAN_TMP_DIR: "1" +# GUI Settings + DISPLAY_WIDTH: "1280" + DISPLAY_HEIGHT: "768" + SECURE_CONNECTION: "0" + VNC_PASSWORD: +# Automated Conversion Preset + AUTOMATED_CONVERSION_PRESET: 'General/Very Fast 1080p30' + AUTOMATED_CONVERSION_FORMAT: 'mp4' + AUTOMATED_CONVERSION_KEEP_SOURCE: "1" + AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION: 'ignore' + +persistence: + config: + enabled: false + emptyDir: false + mountPath: /config + + storage: + enabled: false + emptyDir: false + mountPath: /storage # This can be read only + + watch: + enabled: false + emptyDir: false + mountPath: /watch + + output: + enabled: false + emptyDir: false + mountPath: /output + +## Somehow must enable user to add as many watch folders +## All folders must start with "watch" and an index after +## eg. /watch1, /watch2 +## This is importand because settings can overrode to each watch folder exclusivly, with env vars with _# as a suffix +## eg. AUTOMATED_CONVERSION_PRESET_1 + +# Path to your optical drive device in the container +additionalVolumeMounts: [] +# - name: opticaldrive +# mountPath: /dev/serial/by-id/sr0- + +# Path to your zwave device on the host +additionalVolumes: [] +# - name: opticaldrive +# hostPath: +# path: /dev/serial/by-id/sr0- + +# affinity: +# nodeAffinity: +# requiredDuringSchedulingIgnoredDuringExecution: +# nodeSelectorTerms: +# - matchExpressions: +# - key: app +# operator: In +# values: +# - opticaldrive-controller + +# appVolumeMounts: +# config: +# enabled: true +# emptyDir: false +# datasetName: "config" +# mountPath: "/config" +# hostPathEnabled: false +# setPermissions: true +# storage: +# enabled: true +# emptyDir: false +# datasetName: "storage" +# mountPath: "/storage" +# hostPathEnabled: false +# setPermissions: true +# watch: +# enabled: true +# emptyDir: false +# datasetName: "watch" +# mountPath: "/watch" +# hostPathEnabled: false +# setPermissions: true +# output: +# enabled: true +# emptyDir: false +# datasetName: "output" +# mountPath: "/output" +# hostPathEnabled: false +# setPermissions: true +# opticaldrive: +# enabled: true +# emptyDir: false +# mountPath: "/dev/sr0" +# hostPath: "/dev/sr0" +# hostPathEnabled: true +# setPermissions: true + + +appAdditionalServicesEnabled: true +appAdditionalServices: + vnc: + enabled: true + type: ClusterIP + port: + port: 5900 + name: vnc + protocol: "TCP" + targetPort: 5900 diff --git a/charts/handbrake/item.yaml b/charts/handbrake/item.yaml new file mode 100644 index 00000000000..4b80e8bb326 --- /dev/null +++ b/charts/handbrake/item.yaml @@ -0,0 +1,3 @@ +categories: + - media +icon_url: https://handbrake.fr/img/logo.png