diff --git a/charts/incubator/prototypegui/.helmignore b/charts/incubator/prototypegui/.helmignore new file mode 100644 index 00000000000..e559de0a012 --- /dev/null +++ b/charts/incubator/prototypegui/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS diff --git a/charts/incubator/prototypegui/CONFIG.md b/charts/incubator/prototypegui/CONFIG.md new file mode 100644 index 00000000000..fc9b2fa2d5f --- /dev/null +++ b/charts/incubator/prototypegui/CONFIG.md @@ -0,0 +1,8 @@ +# Configuration Options + +##### Connecting to other apps +If you need to connect this App to other Apps on TrueNAS SCALE, please refer to our "Linking Apps Internally" quick-start guide: +https://truecharts.org/manual/Quick-Start%20Guides/14-linking-apps/ + +##### Available config options +In the future this page is going to contain an automated list of options available in the installation/edit UI. diff --git a/charts/incubator/prototypegui/Chart.yaml b/charts/incubator/prototypegui/Chart.yaml new file mode 100644 index 00000000000..74d76359cb6 --- /dev/null +++ b/charts/incubator/prototypegui/Chart.yaml @@ -0,0 +1,27 @@ +apiVersion: v2 +appVersion: auto +dependencies: +- name: common + repository: https://truecharts.org/ + version: 6.10.7 +deprecated: false +description: API Support for your favorite torrent trackers. +home: https://github.com/truecharts/apps/tree/master/charts/stable/jackett +icon: https://truecharts.org/_static/img/jackett-icon.png +keywords: +- jackett +- torrent +- usenet +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: truecharts.org +- email: kjeld@schouten-lebbing.nl + name: Ornias1993 + url: truecharts.org +name: prototypegui +sources: +- https://github.com/Jackett/Jackett +type: application +version: 6.8.7 diff --git a/charts/incubator/prototypegui/README.md b/charts/incubator/prototypegui/README.md new file mode 100644 index 00000000000..947d73c0539 --- /dev/null +++ b/charts/incubator/prototypegui/README.md @@ -0,0 +1,42 @@ +# Introduction + +![Version: 6.8.6](https://img.shields.io/badge/Version-6.8.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: auto](https://img.shields.io/badge/AppVersion-auto-informational?style=flat-square) + +API Support for your favorite torrent trackers. + +TrueCharts are designed to be installed as TrueNAS SCALE app only. We can not guarantee this charts works as a stand-alone helm installation. +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/apps/issues/new/choose)** + +## Source Code + +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://truecharts.org/ | common | 6.10.7 | + +## Installing the Chart + +To install this App on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/03-Installing-an-App/). + +## Uninstalling the Chart + +To remove this App from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/07-Deleting-an-App/). + +## Support + +- Please check our [quick-start guides](https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/) first. +- See the [Wiki](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) +- Ask a [question](https://github.com/truecharts/apps/discussions) + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0) +All Rights Reserved - The TrueCharts Project diff --git a/charts/incubator/prototypegui/SCALE/item.yaml b/charts/incubator/prototypegui/SCALE/item.yaml new file mode 100644 index 00000000000..8d747307488 --- /dev/null +++ b/charts/incubator/prototypegui/SCALE/item.yaml @@ -0,0 +1,3 @@ +categories: + - media +icon_url: https://truecharts.org/_static/img/jackett-icon.png diff --git a/charts/incubator/prototypegui/SCALE/ix_values.yaml b/charts/incubator/prototypegui/SCALE/ix_values.yaml new file mode 100644 index 00000000000..2a6bfe1ed34 --- /dev/null +++ b/charts/incubator/prototypegui/SCALE/ix_values.yaml @@ -0,0 +1,25 @@ +## +# This file contains Values.yaml content that gets added to the output of questions.yaml +# It's ONLY meant for content that the user is NOT expected to change. +# Example: Everything under "image" is not included in questions.yaml but is included here. +## + +image: + repository: ghcr.io/k8s-at-home/jackett + pullPolicy: IfNotPresent + tag: v0.18.616 + +probes: + liveness: + path: "/UI/Login" + + readiness: + path: "/UI/Login" + + startup: + path: "/UI/Login" + +## +# Most other defaults are set in questions.yaml +# For other options please refer to the wiki, default_values.yaml or the common library chart +## diff --git a/charts/incubator/prototypegui/SCALE/questions.yaml b/charts/incubator/prototypegui/SCALE/questions.yaml new file mode 100644 index 00000000000..423703e2db0 --- /dev/null +++ b/charts/incubator/prototypegui/SCALE/questions.yaml @@ -0,0 +1,939 @@ +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: "Advanced" + description: "Advanced Configuration" +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true + - variable: controller + group: "Controller" + label: "" + schema: + type: dict + attrs: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + 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" + - variable: labelsList + label: "Controller Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + 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: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + + - variable: podLabelsList + group: "Container Configuration" + label: "Pod Labels" + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: "Label" + schema: + 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: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: termination + group: "Container Configuration" + label: "Termination settings" + schema: + type: dict + attrs: + - variable: gracePeriodSeconds + label: "Grace Period Seconds" + schema: + type: int + default: 10 + + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + type: dict + attrs: + - variable: TZ + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: UMASK + label: "UMASK" + description: "Sets the UMASK env var for LinuxServer.io (compatible) containers" + schema: + type: string + default: "002" + # Configure Enviroment Variables + - variable: envList + label: "Image environment" + group: "Container Configuration" + schema: + type: list + default: [] + items: + - variable: envItem + label: "Environment Variable" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + - variable: hostNetwork + group: "Networking and Services" + label: "Enable Host Networking" + schema: + type: boolean + default: false + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the service" + schema: + type: boolean + default: true + hidden: true + - variable: type + label: "Service Type" + description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: "NodePort" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + - value: "LoadBalancer" + description: "LoadBalancer" + - variable: loadBalancerIP + label: "LoadBalancer IP" + description: "LoadBalancerIP" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: list + default: [] + items: + - variable: externalIP + label: "External IP" + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + type: dict + attrs: + - variable: main + label: "Main Service Port Configuration" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable the port" + schema: + type: boolean + default: true + hidden: 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: port + label: "Container Port" + schema: + type: int + default: 9117 + editable: false + hidden: true + - variable: targetPort + label: "Target Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 9117 + editable: true + required: true + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort" + schema: + type: int + min: 9000 + max: 65535 + default: 36009 + + - variable: persistence + label: "Integrated Persistent Storage" + group: "Storage and Persistence" + schema: + type: dict + attrs: + - variable: config + label: "App Config Storage" + description: "Stores the Application Configuration." + schema: + 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: "pvc" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + 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: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "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: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + default: "/config" + hidden: true + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + 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: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + - variable: persistenceList + label: "Additional app storage" + group: "Storage and Persistence" + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: "Custom Storage" + schema: + 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" + enum: + - value: "pvc" + description: "pvc" + - value: "emptyDir" + description: "emptyDir" + - value: "hostPath" + description: "hostPath" + - variable: storageClass + label: "(Advanced) storageClass" + description: " Warning: Anything other than SCALE-ZFS will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "SCALE-ZFS" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + 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: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: setPermissions + label: "Automatic Permissions" + description: "Automatically set permissions on install" + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: true + - variable: readOnly + label: "readOnly" + schema: + type: boolean + default: false + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: hostPathType + label: "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: mountPath + label: "mountPath" + description: "Path inside the container the storage is mounted" + schema: + type: string + required: true + default: "" + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" + - variable: accessMode + label: "Access Mode (Advanced)" + description: "Allow or disallow multiple PVC's writhing to the same PVC" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "ReadWriteOnce" + enum: + - value: "ReadWriteOnce" + description: "ReadWriteOnce" + - value: "ReadOnlyMany" + description: "ReadOnlyMany" + - value: "ReadWriteMany" + description: "ReadWriteMany" + - variable: size + label: "Size quotum of storage" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "100Gi" + + - variable: ingress + label: "" + group: "Ingress" + schema: + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Ingress" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: ingressClassName + label: "IngressClass Name" + schema: + type: string + default: "" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + 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: + 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: + 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: + 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: tls + label: "TLS-Settings" + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: "Host" + schema: + 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: securityContext + group: "Security and Permissions" + label: "Security Context" + schema: + 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: true + + - variable: podSecurityContext + group: "Security and Permissions" + label: "Pod Security Context" + schema: + type: dict + attrs: + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true + - 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: supplementalGroups + label: "When should we take ownership?" + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: "When should we take ownership?" + schema: + type: int + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: "OnRootMismatch" + enum: + - value: "OnRootMismatch" + description: "OnRootMismatch" + - value: "Always" + description: "Always" + - variable: resources + group: "Resources and Devices" + label: "Resource Limits" + schema: + type: dict + attrs: + - variable: limits + label: "Advanced Limit Resource Consumption" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "2000m" + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "2Gi" + - variable: requests + label: "Advanced Request minimum resources required" + schema: + type: dict + attrs: + - variable: cpu + label: "CPU" + schema: + type: string + default: "10m" + - variable: memory + label: "Memory RAM" + schema: + type: string + default: "50Mi" + + - variable: autoscaling + group: "Resources and Devices" + label: "Horizontal Pod Autoscaler" + schema: + 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 diff --git a/charts/incubator/prototypegui/app-readme.md b/charts/incubator/prototypegui/app-readme.md new file mode 100644 index 00000000000..151894ff6be --- /dev/null +++ b/charts/incubator/prototypegui/app-readme.md @@ -0,0 +1,3 @@ +API Support for your favorite torrent trackers. + +This App is supplied by TrueCharts, for more information please visit https://truecharts.org diff --git a/charts/incubator/prototypegui/templates/common.yaml b/charts/incubator/prototypegui/templates/common.yaml new file mode 100644 index 00000000000..a6613c2ce21 --- /dev/null +++ b/charts/incubator/prototypegui/templates/common.yaml @@ -0,0 +1 @@ +{{ include "common.all" . }} diff --git a/charts/incubator/prototypegui/values.yaml b/charts/incubator/prototypegui/values.yaml new file mode 100644 index 00000000000..e257e17bd2f --- /dev/null +++ b/charts/incubator/prototypegui/values.yaml @@ -0,0 +1,41 @@ +# Default values for Jackett. + +image: + repository: ghcr.io/k8s-at-home/jackett + pullPolicy: IfNotPresent + tag: v0.18.616 + +strategy: + type: Recreate + + +service: + main: + enabled: true + ports: + main: + port: 9117 + +probes: + liveness: + path: "/UI/Login" + + readiness: + path: "/UI/Login" + + startup: + path: "/UI/Login" + +env: {} + # TZ: UTC + # PUID: 1001 + # PGID: 1001 + + +persistence: + config: + enabled: true + mountPath: "/config" + type: pvc + accessMode: ReadWriteOnce + size: "100Gi" diff --git a/charts/library/common/Chart.yaml b/charts/library/common/Chart.yaml index 6f454dc6c7d..94bbe190a01 100644 --- a/charts/library/common/Chart.yaml +++ b/charts/library/common/Chart.yaml @@ -18,4 +18,4 @@ maintainers: name: common sources: null type: library -version: 6.10.7 +version: 6.11.0 diff --git a/charts/library/common/templates/classes/_ingress.tpl b/charts/library/common/templates/classes/_ingress.tpl index d99f269e397..000156e5d89 100644 --- a/charts/library/common/templates/classes/_ingress.tpl +++ b/charts/library/common/templates/classes/_ingress.tpl @@ -57,6 +57,9 @@ metadata: name: {{ $ingressName }} labels: {{- include "common.labels" . | nindent 4 }} + {{- with $values.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} annotations: "traefik.ingress.kubernetes.io/router.entrypoints": {{ $values.entrypoint | default "websecure" }} "traefik.ingress.kubernetes.io/router.middlewares": {{ $middlewares | quote }} diff --git a/charts/library/common/templates/classes/_pvc.tpl b/charts/library/common/templates/classes/_pvc.tpl index 79169743d74..eb25a6d36ac 100644 --- a/charts/library/common/templates/classes/_pvc.tpl +++ b/charts/library/common/templates/classes/_pvc.tpl @@ -23,9 +23,9 @@ kind: PersistentVolumeClaim apiVersion: v1 metadata: name: {{ $pvcName }} - {{- if or $values.skipuninstall $values.annotations }} + {{- if or $values.retain $values.annotations }} annotations: - {{- if $values.skipuninstall }} + {{- if $values.retain }} "helm.sh/resource-policy": keep {{- end }} {{- with $values.annotations }} @@ -34,6 +34,9 @@ metadata: {{- end }} labels: {{- include "common.labels" . | nindent 4 }} + {{- with $values.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} spec: accessModes: - {{ required (printf "accessMode is required for PVC %v" $pvcName) $values.accessMode | quote }} diff --git a/charts/library/common/templates/lib/chart/_values.tpl b/charts/library/common/templates/lib/chart/_values.tpl index 4a1cb3a96a8..55e535dbc3b 100644 --- a/charts/library/common/templates/lib/chart/_values.tpl +++ b/charts/library/common/templates/lib/chart/_values.tpl @@ -7,6 +7,40 @@ {{- $_ := set . "Values" (deepCopy $mergedValues) -}} {{- end -}} + {{/* merge podAnnotationsList with podAnnotations */}} + {{- $podAnnotationsDict := dict }} + {{- range .Values.podAnnotationsList }} + {{- $_ := set $podAnnotationsDict .name .value }} + {{- end }} + {{- $podanno := merge .Values.podAnnotations $podAnnotationsDict }} + {{- $_ := set .Values "podAnnotations" (deepCopy $podanno) -}} + + {{/* merge podLabelsList with podLabels */}} + {{- $podLabelsDict := dict }} + {{- range .Values.controller.labelsList }} + {{- $_ := set $podLabelsDict .name .value }} + {{- end }} + {{- $podlab := merge .Values.controller.labels $podLabelsDict }} + {{- $_ := set .Values.controller "labels" (deepCopy $podlab) -}} + + {{/* merge controllerAnnotationsList with controllerAnnotations */}} + {{- $controllerAnnotationsDict := dict }} + {{- range .Values.controller.annotationsList }} + {{- $_ := set $controllerAnnotationsDict .name .value }} + {{- end }} + {{- $controlleranno := merge .Values.controller.annotations $controllerAnnotationsDict }} + {{- $_ := set .Values.controller "annotations" (deepCopy $controlleranno) -}} + + {{/* merge controllerLabelsList with controllerLabels */}} + {{- $controllerLabelsDict := dict }} + {{- range .Values.controller.labelsList }} + {{- $_ := set $controllerLabelsDict .name .value }} + {{- end }} + {{- $controllerlab := merge .Values.controller.labels $controllerLabelsDict }} + {{- $_ := set .Values "labels" (deepCopy $controllerlab) -}} + + + {{/* merge persistenceList with Persitence */}} {{- $perDict := dict }} {{- range $index, $item := .Values.persistenceList -}} @@ -29,6 +63,30 @@ {{- $_ := set .Values "persistence" (deepCopy $per) -}} + {{/* merge persistenceAnnotationsList with persistenceAnnotations */}} + {{- range $index, $item := .Values.persistence }} + {{- $persistenceAnnotationsDict := dict }} + {{- range $item.annotationsList }} + {{- $_ := set $persistenceAnnotationsDict .name .value }} + {{- end }} + {{- $tmp := $item.annotations }} + {{- $persistenceanno := merge $tmp $persistenceAnnotationsDict }} + {{- $_ := set $item "annotations" (deepCopy $persistenceanno) -}} + {{- end }} + + + {{/* merge persistenceLabelsList with persistenceLabels */}} + {{- range $index, $item := .Values.persistence }} + {{- $persistenceLabelsDict := dict }} + {{- range $item.labelsList }} + {{- $_ := set $persistenceLabelsDict .name .value }} + {{- end }} + {{- $tmp := $item.labels }} + {{- $persistencelab := merge $tmp $persistenceLabelsDict }} + {{- $_ := set $item "labels" (deepCopy $persistencelab) -}} + {{- end }} + + {{/* merge ingressList with ingress */}} {{- $ingDict := dict }} {{- range $index, $item := .Values.ingressList -}} @@ -41,6 +99,30 @@ {{- $ing := merge .Values.ingress $ingDict }} {{- $_ := set .Values "ingress" (deepCopy $ing) -}} + + {{/* merge ingressAnnotationsList with ingressAnnotations */}} + {{- range $index, $item := .Values.ingress }} + {{- $ingressAnnotationsDict := dict }} + {{- range $item.annotationsList }} + {{- $_ := set $ingressAnnotationsDict .name .value }} + {{- end }} + {{- $tmp := $item.annotations }} + {{- $ingressanno := merge $tmp $ingressAnnotationsDict }} + {{- $_ := set $item "annotations" (deepCopy $ingressanno) -}} + {{- end }} + + + {{/* merge ingressLabelsList with ingressLabels */}} + {{- range $index, $item := .Values.ingress }} + {{- $ingressLabelsDict := dict }} + {{- range $item.labelsList }} + {{- $_ := set $ingressLabelsDict .name .value }} + {{- end }} + {{- $tmp := $item.labels }} + {{- $ingresslab := merge $tmp $ingressLabelsDict }} + {{- $_ := set $item "labels" (deepCopy $ingresslab) -}} + {{- end }} + {{/* Enable privileged securitycontext when deviceList is used */}} {{- if .Values.securityContext.privileged }} {{- else if .Values.deviceList }} diff --git a/charts/library/common/templates/lib/controller/_container.tpl b/charts/library/common/templates/lib/controller/_container.tpl index 411629fcc53..e6f3a17b68a 100644 --- a/charts/library/common/templates/lib/controller/_container.tpl +++ b/charts/library/common/templates/lib/controller/_container.tpl @@ -27,6 +27,12 @@ lifecycle: {{- toYaml . | nindent 4 }} {{- end }} + {{- with .Values.termination.messagePath }} + terminationMessagePath: {{ . }} + {{- end }} + {{- with .Values.termination.messagePolicy }} + terminationMessagePolicy: {{ . }} + {{- end }} env: {{- range $key, $value := .Values.envTpl }} diff --git a/charts/library/common/templates/lib/controller/_pod.tpl b/charts/library/common/templates/lib/controller/_pod.tpl index 76bd45a84fb..89212e3338a 100644 --- a/charts/library/common/templates/lib/controller/_pod.tpl +++ b/charts/library/common/templates/lib/controller/_pod.tpl @@ -35,6 +35,9 @@ dnsConfig: {{- toYaml . | nindent 2 }} {{- end }} enableServiceLinks: {{ .Values.enableServiceLinks }} + {{- with .Values.termination.gracePeriodSeconds }} +terminationGracePeriodSeconds: {{ . }} + {{- end }} {{- with .Values.initContainers }} initContainers: {{- toYaml . | nindent 2 }} diff --git a/charts/library/common/templates/lib/controller/_volumeMounts.tpl b/charts/library/common/templates/lib/controller/_volumeMounts.tpl index 9dcd863f046..7778f48d4a7 100644 --- a/charts/library/common/templates/lib/controller/_volumeMounts.tpl +++ b/charts/library/common/templates/lib/controller/_volumeMounts.tpl @@ -18,6 +18,9 @@ {{- with $item.readOnly }} readOnly: {{ . }} {{- end }} + {{- with $item.mountPropagation }} + mountPropagation: {{ . }} + {{- end }} {{- end }} {{- end }} {{- end }} diff --git a/charts/library/common/tests/persistentvolumeclaim_test.go b/charts/library/common/tests/persistentvolumeclaim_test.go index f698aa1137f..de6a3021b08 100644 --- a/charts/library/common/tests/persistentvolumeclaim_test.go +++ b/charts/library/common/tests/persistentvolumeclaim_test.go @@ -73,3 +73,96 @@ func (suite *PersistenceVolumeClaimTestSuite) TestStorageClass() { }) } } + +func (suite *PersistenceVolumeClaimTestSuite) TestMetaData() { + defaultChartAnnotations := make(map[string]interface{}) + defaultChartLabels := map[string]interface{}{ + "app.kubernetes.io/instance": "common-test", + "app.kubernetes.io/managed-by": "Helm", + "app.kubernetes.io/name": "common-test", + "app.kubernetes.io/version":"none", + "helm.sh/chart": "common-test-3.1.0", + } + + tests := map[string]struct { + values []string + expectedAnnotations map[string]interface{} + expectedLabels map[string]interface{} + }{ + "Default": { + values: []string{ + "persistence.config.enabled=true", + }, + expectedAnnotations: nil, + expectedLabels: nil, + }, + "NoRetain": { + values: []string{ + "persistence.config.enabled=true", + "persistence.config.labels.test_label=test", + "persistence.config.annotations.test_annotation=test", + }, + expectedAnnotations: map[string]interface{}{ + "test_annotation": "test", + }, + expectedLabels: map[string]interface{}{ + "test_label": "test", + }, + }, + "Retain": { + values: []string{ + "persistence.config.enabled=true", + "persistence.config.retain=true", + "persistence.config.labels.test_label=test", + "persistence.config.annotations.test_annotation=test", + }, + expectedAnnotations: map[string]interface{}{ + "helm.sh/resource-policy": "keep", + "test_annotation": "test", + }, + expectedLabels: map[string]interface{}{ + "test_label": "test", + }, + }, + } + for name, tc := range tests { + suite.Suite.Run(name, func() { + err := suite.Chart.Render(nil, tc.values, nil) + if err != nil { + suite.FailNow(err.Error()) + } + + pvcManifest := suite.Chart.Manifests.Get("PersistentVolumeClaim", "common-test-config") + suite.Assertions.NotEmpty(pvcManifest) + + pvcAnnotations := pvcManifest.Path("metadata.annotations").Data() + testAnnotations := make(map[string]interface{}) + for index, element := range defaultChartAnnotations { + testAnnotations[index] = element + } + for index, element := range tc.expectedAnnotations { + testAnnotations[index] = element + } + + if len(testAnnotations) == 0 { + suite.Assertions.Equal(nil, pvcAnnotations) + } else { + suite.Assertions.EqualValues(testAnnotations, pvcAnnotations) + } + + pvcLabels := pvcManifest.Path("metadata.labels").Data() + testLabels := make(map[string]interface{}) + for index, element := range defaultChartLabels { + testLabels[index] = element + } + for index, element := range tc.expectedLabels { + testLabels[index] = element + } + if len(testLabels) == 0 { + suite.Assertions.Equal(nil, pvcLabels) + } else { + suite.Assertions.EqualValues(testLabels, pvcLabels) + } + }) + } +} diff --git a/charts/library/common/tests/service_test.go b/charts/library/common/tests/service_test.go index a4070ca5555..fba6b4ba00e 100644 --- a/charts/library/common/tests/service_test.go +++ b/charts/library/common/tests/service_test.go @@ -1,7 +1,6 @@ package common import ( - "fmt" "testing" "github.com/truecharts/apps/tests/helmunit" @@ -102,37 +101,3 @@ func (suite *ServiceTestSuite) TestPortProtocol() { }) } } - -func (suite *ServiceTestSuite) TestAnnotations() { - tests := map[string]struct { - values []string - expectedAnnotations map[string]string - }{ - "Default": {values: nil, expectedAnnotations: nil}, - "ExplicitTCP": {values: []string{"service.main.ports.main.protocol=TCP"}, expectedAnnotations: nil}, - "ExplicitHTTP": {values: []string{"service.main.ports.main.protocol=HTTP"}, expectedAnnotations: nil}, - "ExplicitHTTPS": {values: []string{"service.main.ports.main.protocol=HTTPS"}, expectedAnnotations: map[string]string{"traefik.ingress.kubernetes.io/service.serversscheme": "https"}}, - "ExplicitUDP": {values: []string{"service.main.ports.main.protocol=UDP"}, expectedAnnotations: nil}, - } - for name, tc := range tests { - suite.Suite.Run(name, func() { - err := suite.Chart.Render(nil, tc.values, nil) - if err != nil { - suite.FailNow(err.Error()) - } - - serviceManifest := suite.Chart.Manifests.Get("Service", "common-test") - suite.Assertions.NotEmpty(serviceManifest) - serviceAnnotations, _ := serviceManifest.Path("metadata.annotations").Children() - if tc.expectedAnnotations == nil { - suite.Assertions.Empty(serviceAnnotations) - } else { - for annotation, value := range tc.expectedAnnotations { - serviceAnnotation := serviceManifest.Path("metadata.annotations").Search(annotation) - suite.Assertions.NotEmpty(serviceAnnotation, fmt.Sprintf("Annotation %s not found", annotation)) - suite.Assertions.EqualValues(value, serviceAnnotation.Data(), fmt.Sprintf("Invalid value for annotation %s", annotation)) - } - } - }) - } -} diff --git a/charts/library/common/values.yaml b/charts/library/common/values.yaml index 92ee6353556..b93570217c9 100644 --- a/charts/library/common/values.yaml +++ b/charts/library/common/values.yaml @@ -10,8 +10,16 @@ controller: # -- Set the controller type. # Valid options are deployment, daemonset or statefulset type: deployment - # -- Set annotations on the deployment/statefulset/daemonset + # -- Set additional annotations on the deployment/statefulset/daemonset + annotationsList: [] + # - name: somename + # value: somevalue + # -- Set annotations on the deployment/statefulset/daemonset annotations: {} + # -- Set additional labels on the deployment/statefulset/daemonset + labelsList: [] + # - name: somename + # value: somevalue # -- Set labels on the deployment/statefulset/daemonset labels: {} # -- Number of desired pods @@ -44,9 +52,20 @@ command: [] # -- Override the args for the default container args: [] +# -- Set additional annotations on the pod +podAnnotationsList: [] +# - name: somename +# value: somevalue + +# # -- Set annotations on the pod podAnnotations: {} +# -- Set additional labels on the pod +podLabelsList: [] +# - name: somename +# value: somevalue + # -- Set labels on the pod podLabels: {} @@ -217,6 +236,20 @@ probes: periodSeconds: 5 failureThreshold: 60 +termination: + # -- Configure the path at which the file to which the main container's termination message will be written. + # -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] + messagePath: + + # -- Indicate how the main container's termination message should be populated. + # Valid options are `File` and `FallbackToLogsOnError`. + # -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)] + messagePolicy: + + # -- Duration in seconds the pod needs to terminate gracefully + # -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle)] + gracePeriodSeconds: 10 + # -- Configure the services for the chart here. # Additional services can be added by adding a dictionary key similar to the 'main' service. # @default -- See below @@ -234,10 +267,16 @@ service: # -- Set the service type type: ClusterIP - + annotationsList: [] + # - name: somename + # value: somevalue # -- Provide additional annotations which may be required. annotations: {} + labelsList: [] + # - name: somename + # value: somevalue + # -- Set labels on the deployment/statefulset/daemonset # -- Provide additional labels which may be required. labels: {} @@ -300,12 +339,19 @@ ingress: # -- Additional List of middlewares in the traefikmiddlewares k8s namespace to add automatically # Creates an annotation with the middlewares and appends k8s and traefik namespaces to the middleware names middlewares: [] - + annotationsList: [] + # - name: somename + # value: somevalue # -- Provide additional annotations which may be required. annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" + labelsList: [] + # - name: somename + # value: somevalue + # -- Set labels on the deployment/statefulset/daemonset + # -- Provide additional labels which may be required. # -- Provide additional labels which may be required. labels: {} @@ -357,6 +403,19 @@ persistence: config: # -- Enables or disables the persistence item enabled: false + annotationsList: [] + # - name: somename + # value: somevalue + # -- Add annotations to PVC object + annotations: {} + + labelsList: [] + # - name: somename + # value: somevalue + # -- Set labels on the deployment/statefulset/daemonset + # -- Provide additional labels which may be required. + # -- Add labels to PVC object + labels: {} # -- Sets the persistence type # Valid options are pvc, emptyDir, hostPath or custom @@ -388,6 +447,8 @@ persistence: # -- Used in conjunction with `existingClaim`. Specifies a sub-path inside the referenced volume instead of its root subPath: # some-subpath + # mountPropagation: {} + # -- AccessMode for the persistent volume. # Make sure to select an access mode that is supported by your storage provider! # [[ref]](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) @@ -397,7 +458,7 @@ persistence: size: 1Gi # - Set to true to retain the PVC upon `helm uninstall` - skipuninstall: false + retain: false # -- Create an emptyDir volume to share between all containers # [[ref]]https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)