├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── bazarr ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── movies-pvc.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ ├── tests │ │ └── test-connection.yaml │ └── tv-pvc.yaml └── values.yaml ├── charts ├── bazarr-1.0.0.tgz ├── couchpotato-1.0.0.tgz ├── headphones-1.0.0.tgz ├── index.yaml ├── jackett-1.0.0.tgz ├── lazylibrarian-1.0.0.tgz ├── lidarr-1.0.0.tgz ├── medusa-1.0.0.tgz ├── mylar-1.0.0.tgz ├── nzbget-1.0.0.tgz ├── nzbhydra2-1.0.0.tgz ├── organizr-1.0.0.tgz ├── radarr-1.0.0.tgz ├── sabnzbd-1.0.0.tgz ├── sonarr-1.0.0.tgz ├── syncthing-1.0.0.tgz └── transmission-1.0.0.tgz ├── couchpotato ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── movies-pvc.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── headphones ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── music-pvc.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── jackett ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── lazylibrarian ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── books-pvc.yaml │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── lidarr ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── music-pvc.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── medusa ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ ├── tests │ │ └── test-connection.yaml │ └── tv-pvc.yaml └── values.yaml ├── mylar ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── comics-pvc.yaml │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── nzbget ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── incomplete-downloads.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── nzbhydra2 ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── organizr ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── radarr ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── movies-pvc.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── sabnzbd ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── incomplete-downloads.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml ├── sonarr ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── downloads-pvc.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ ├── tests │ │ └── test-connection.yaml │ └── tv-pvc.yaml └── values.yaml ├── syncthing ├── .helmignore ├── Chart.yaml ├── README.md ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── config-pvc.yaml │ ├── deployment.yaml │ ├── env-configmap.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml └── values.yaml └── transmission ├── .helmignore ├── Chart.yaml ├── README.md ├── templates ├── NOTES.txt ├── _helpers.tpl ├── bt-service.yaml ├── config-pvc.yaml ├── deployment.yaml ├── downloads-pvc.yaml ├── env-configmap.yaml ├── incomplete-downloads-pvc.yaml ├── ingress.yaml ├── serviceaccount.yaml ├── tests │ └── test-connection.yaml ├── ui-service.yaml └── watch-pvc.yaml └── values.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/helm 2 | # Edit at https://www.gitignore.io/?templates=helm 3 | 4 | ### Helm ### 5 | # Chart dependencies 6 | #**/charts/*.tgz 7 | 8 | # End of https://www.gitignore.io/api/helm -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CHARTS = $(shell ls -d */ | grep -v charts) 2 | 3 | package: 4 | helm package $(CHARTS) -d charts --dependency-update 5 | helm repo index charts --merge charts/index.yaml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # k8s-usenet 2 | 3 | > Usenet + Kubernetes = Heaven. 4 | 5 | `k8s-usenet` is a collection of [Helm](https://helm.sh) charts related to [Usenet](https://en.wikipedia.org/wiki/Usenet) services. 6 | 7 | ## Adding this hub to Helm 8 | 9 | Just issue the following command on your terminal in order to add this repository to your Helm repository lists (keep in mind that this repository uses the new V2 version format): 10 | 11 | ```console 12 | helm repo add k8s-usenet https://raw.githubusercontent.com/aldoborrero/k8s-usenet/master/charts/ 13 | ``` 14 | 15 | ## Current supported services 16 | 17 | - [Bazarr](https://www.bazarr.media/): A companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. 18 | - [CouchPotato](https://couchpota.to/): A Video Library Manager for Movies. 19 | - [Jackett](https://github.com/Jackett/Jackett): API Support for your favorite torrent trackers. 20 | - [Headphones](https://github.com/rembo10/headphones): Automatic music downloader for SABnzbd. 21 | - [LazyLibrarian](https://lazylibrarian.gitlab.io/): LazyLibrarian is a program to follow authors and grab metadata for all your digital reading needs. 22 | - [Lidarr](https://github.com/lidarr/lidarr): Looks and smells like Sonarr but made for music. 23 | - [Medusa](https://pymedusa.com/): Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic. 24 | - [Mylar](https://github.com/evilhero/mylar): An automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents. 25 | - [Nzbget](https://nzbget.net/): The most efficient usenet downloader. 26 | - [Organizr](https://github.com/causefx/Organizr): HTPC/Homelab Services Organizer. 27 | - [Radarr](https://github.com/Radarr/Radarr): A fork of Sonarr to work with movies à la Couchpotato. 28 | - [Sabnzbd](https://sabnzbd.org/): Free and easy binary newsreader. 29 | - [Sonarr](https://github.com/Sonarr/Sonarr): Smart PVR for newsgroup and bittorrent users. 30 | - [Syncthing](https://syncthing.net/): Continuous file synchronization program. 31 | - [Transmission](https://transmissionbt.com/): A fast, easy and free Bittorrent client. 32 | 33 | ## Work in progress... 34 | 35 | We need more useful Helm charts! Feel free to create a PR in order to contribute with a new service that is not listed above! 36 | 37 | ## Acknowledgements 38 | 39 | - [Jeff Billimek](https://github.com/billimek): For inspiring me to create this repository (some of the Charts here are based [on his awesome work](https://github.com/billimek/billimek-charts)). 40 | - [Alen Komljen](https://github.com/komljen): To whom I copied shamelessly [his Makefile](https://github.com/komljen/helm-charts) to generate a Helm chart repository directly on the repository. 41 | 42 | ## License 43 | 44 | This project is licensed under the Apache 2.0 license. See [LICENSE](LICENSE) for more details. 45 | -------------------------------------------------------------------------------- /bazarr/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /bazarr/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: bazarr 3 | description: Bazarr is a companion application to Sonarr and Radarr. It manages and downloads subtitles based on your requirements. 4 | icon: https://www.bazarr.media/assets/img/logo.png 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/bazarr 6 | keywords: 7 | - bazarr 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/bazarr/ 12 | - https://github.com/morpheus65535/bazarr 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /bazarr/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "bazarr.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "bazarr.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "bazarr.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "bazarr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /bazarr/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "bazarr.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "bazarr.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "bazarr.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "bazarr.labels" -}} 38 | helm.sh/chart: {{ include "bazarr.chart" . }} 39 | {{ include "bazarr.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "bazarr.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "bazarr.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "bazarr.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "bazarr.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /bazarr/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "bazarr.fullname" . }}-config 6 | labels: 7 | {{- include "bazarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /bazarr/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "bazarr.fullname" . }}-downloads 6 | labels: 7 | {{- include "bazarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /bazarr/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "bazarr.fullname" . }}-config 5 | labels: 6 | {{- include "bazarr.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.bazarr }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /bazarr/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "bazarr.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "bazarr.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /bazarr/templates/movies-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.movies.enabled (not .Values.persistence.movies.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "bazarr.fullname" . }}-movies 6 | labels: 7 | {{- include "bazarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.movies.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.movies.size | quote }} 14 | {{- if .Values.persistence.movies.storageClass }} 15 | {{- if (eq "-" .Values.persistence.movies.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.movies.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /bazarr/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "bazarr.fullname" . }} 5 | labels: 6 | {{- include "bazarr.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "bazarr.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /bazarr/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "bazarr.serviceAccountName" . }} 6 | labels: 7 | {{- include "bazarr.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /bazarr/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "bazarr.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "bazarr.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "bazarr.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /bazarr/templates/tv-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.tv.enabled (not .Values.persistence.tv.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "bazarr.fullname" . }}-tv 6 | labels: 7 | {{- include "bazarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.tv.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.tv.size | quote }} 14 | {{- if .Values.persistence.tv.storageClass }} 15 | {{- if (eq "-" .Values.persistence.tv.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.tv.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /charts/bazarr-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/bazarr-1.0.0.tgz -------------------------------------------------------------------------------- /charts/couchpotato-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/couchpotato-1.0.0.tgz -------------------------------------------------------------------------------- /charts/headphones-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/headphones-1.0.0.tgz -------------------------------------------------------------------------------- /charts/jackett-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/jackett-1.0.0.tgz -------------------------------------------------------------------------------- /charts/lazylibrarian-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/lazylibrarian-1.0.0.tgz -------------------------------------------------------------------------------- /charts/lidarr-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/lidarr-1.0.0.tgz -------------------------------------------------------------------------------- /charts/medusa-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/medusa-1.0.0.tgz -------------------------------------------------------------------------------- /charts/mylar-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/mylar-1.0.0.tgz -------------------------------------------------------------------------------- /charts/nzbget-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/nzbget-1.0.0.tgz -------------------------------------------------------------------------------- /charts/nzbhydra2-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/nzbhydra2-1.0.0.tgz -------------------------------------------------------------------------------- /charts/organizr-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/organizr-1.0.0.tgz -------------------------------------------------------------------------------- /charts/radarr-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/radarr-1.0.0.tgz -------------------------------------------------------------------------------- /charts/sabnzbd-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/sabnzbd-1.0.0.tgz -------------------------------------------------------------------------------- /charts/sonarr-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/sonarr-1.0.0.tgz -------------------------------------------------------------------------------- /charts/syncthing-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/syncthing-1.0.0.tgz -------------------------------------------------------------------------------- /charts/transmission-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aldoborrero/k8s-usenet/a86e91ee1fa77407fafd0a6cd51cf473e092a30d/charts/transmission-1.0.0.tgz -------------------------------------------------------------------------------- /couchpotato/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /couchpotato/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: couchpotato 3 | description: Automatic Movie Downloading via NZBs & Torrents 4 | icon: https://avatars3.githubusercontent.com/u/25025331?s=400&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/couchpotato 6 | keywords: 7 | - couchpotato 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/couchpotato/ 12 | - https://github.com/couchpotato/couchpotato/ 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /couchpotato/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "couchpotato.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "couchpotato.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "couchpotato.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "couchpotato.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /couchpotato/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "couchpotato.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "couchpotato.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "couchpotato.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "couchpotato.labels" -}} 38 | helm.sh/chart: {{ include "couchpotato.chart" . }} 39 | {{ include "couchpotato.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "couchpotato.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "couchpotato.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "couchpotato.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "couchpotato.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /couchpotato/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "couchpotato.fullname" . }}-config 6 | labels: 7 | {{- include "couchpotato.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /couchpotato/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "couchpotato.fullname" . }}-downloads 6 | labels: 7 | {{- include "couchpotato.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /couchpotato/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "couchpotato.fullname" . }}-env-config 5 | labels: 6 | {{- include "couchpotato.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.couchpotato }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /couchpotato/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "couchpotato.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "couchpotato.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /couchpotato/templates/movies-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.movies.enabled (not .Values.persistence.movies.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "couchpotato.fullname" . }}-movies 6 | labels: 7 | {{- include "couchpotato.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.movies.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.movies.size | quote }} 14 | {{- if .Values.persistence.movies.storageClass }} 15 | {{- if (eq "-" .Values.persistence.movies.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.movies.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /couchpotato/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "couchpotato.fullname" . }} 5 | labels: 6 | {{- include "couchpotato.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "couchpotato.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /couchpotato/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "couchpotato.serviceAccountName" . }} 6 | labels: 7 | {{- include "couchpotato.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /couchpotato/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "couchpotato.fullname" . }}-test-connection" 5 | labels: 6 | {{ include "couchpotato.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "couchpotato.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /headphones/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /headphones/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: headphones 3 | description: Headphones is an automatic music downloader for SABnzbd 4 | icon: https://github.com/rembo10/headphones/raw/master/data/images/headphoneslogo.png 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/headphones 6 | keywords: 7 | - headphones 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/headphones/ 12 | - https://github.com/rembo10/headphones 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /headphones/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "headphones.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "headphones.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "headphones.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "headphones.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /headphones/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "headphones.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "headphones.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "headphones.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "headphones.labels" -}} 38 | helm.sh/chart: {{ include "headphones.chart" . }} 39 | {{ include "headphones.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "headphones.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "headphones.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "headphones.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "headphones.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /headphones/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "headphones.fullname" . }}-config 6 | labels: 7 | {{- include "headphones.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /headphones/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "headphones.fullname" . }}-downloads 6 | labels: 7 | {{- include "headphones.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /headphones/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "headphones.fullname" . }}-env-config 5 | labels: 6 | {{- include "headphones.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.headphones }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /headphones/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "headphones.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "headphones.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /headphones/templates/music-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.music.enabled (not .Values.persistence.music.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "headphones.fullname" . }}-music 6 | labels: 7 | {{- include "headphones.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.music.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.music.size | quote }} 14 | {{- if .Values.persistence.music.storageClass }} 15 | {{- if (eq "-" .Values.persistence.music.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.music.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /headphones/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "headphones.fullname" . }} 5 | labels: 6 | {{- include "headphones.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "headphones.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /headphones/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "headphones.serviceAccountName" . }} 6 | labels: 7 | {{- include "headphones.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /headphones/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "headphones.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "headphones.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "headphones.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /jackett/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /jackett/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: jackett 3 | description: API Support for your favorite torrent trackers. 4 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/jackett 5 | keywords: 6 | - jackett 7 | - usenet 8 | - bittorrent 9 | sources: 10 | - https://hub.docker.com/r/linuxserver/jackett/ 11 | - https://github.com/Jackett/Jackett 12 | 13 | # A chart can be either an 'application' or a 'library' chart. 14 | # 15 | # Application charts are a collection of templates that can be packaged into versioned archives 16 | # to be deployed. 17 | # 18 | # Library charts provide useful utilities or functions for the chart developer. They're included as 19 | # a dependency of application charts to inject those utilities and functions into the rendering 20 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 21 | type: application 22 | 23 | # This is the chart version. This version number should be incremented each time you make changes 24 | # to the chart and its templates, including the app version. 25 | version: 1.0.0 26 | 27 | # This is the version number of the application being deployed. This version number should be 28 | # incremented each time you make changes to the application. 29 | appVersion: amd64-latest 30 | -------------------------------------------------------------------------------- /jackett/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jackett.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "jackett.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jackett.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jackett.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /jackett/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "jackett.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "jackett.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "jackett.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "jackett.labels" -}} 38 | helm.sh/chart: {{ include "jackett.chart" . }} 39 | {{ include "jackett.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "jackett.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "jackett.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "jackett.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "jackett.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /jackett/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "jackett.fullname" . }}-config 6 | labels: 7 | {{- include "jackett.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /jackett/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jackett.fullname" . }}-env-config 5 | labels: 6 | {{- include "jackett.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.jackett }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /jackett/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "jackett.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "jackett.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /jackett/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "jackett.fullname" . }} 5 | labels: 6 | {{- include "jackett.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "jackett.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /jackett/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "jackett.serviceAccountName" . }} 6 | labels: 7 | {{- include "jackett.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /jackett/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "jackett.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "jackett.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "jackett.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /lazylibrarian/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /lazylibrarian/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: lazylibrarian 3 | description: LazyLibrarian is a SickBeard, CouchPotato, Headphones-like application for ebooks, audiobooks and magazines 4 | icon: https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/lazylibrarian-icon.png 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/lazylibrarian 6 | keywords: 7 | - lazylibrarian 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/lazylibrarian/ 12 | - https://gitlab.com/LazyLibrarian/LazyLibrarian 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /lazylibrarian/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "lazylibrarian.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "lazylibrarian.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "lazylibrarian.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "lazylibrarian.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /lazylibrarian/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "lazylibrarian.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "lazylibrarian.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "lazylibrarian.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "lazylibrarian.labels" -}} 38 | helm.sh/chart: {{ include "lazylibrarian.chart" . }} 39 | {{ include "lazylibrarian.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "lazylibrarian.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "lazylibrarian.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "lazylibrarian.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "lazylibrarian.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /lazylibrarian/templates/books-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.books.enabled (not .Values.persistence.books.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lazylibrarian.fullname" . }}-books 6 | labels: 7 | {{- include "lazylibrarian.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.books.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.books.size | quote }} 14 | {{- if .Values.persistence.books.storageClass }} 15 | {{- if (eq "-" .Values.persistence.books.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.books.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lazylibrarian/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lazylibrarian.fullname" . }}-config 6 | labels: 7 | {{- include "lazylibrarian.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lazylibrarian/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lazylibrarian.fullname" . }}-downloads 6 | labels: 7 | {{- include "lazylibrarian.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lazylibrarian/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "lazylibrarian.fullname" . }}-env-config 5 | labels: 6 | {{- include "lazylibrarian.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.lazylibrarian }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /lazylibrarian/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "lazylibrarian.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "lazylibrarian.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /lazylibrarian/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "lazylibrarian.fullname" . }} 5 | labels: 6 | {{- include "lazylibrarian.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "lazylibrarian.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /lazylibrarian/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "lazylibrarian.serviceAccountName" . }} 6 | labels: 7 | {{- include "lazylibrarian.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /lazylibrarian/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "lazylibrarian.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "lazylibrarian.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "lazylibrarian.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /lidarr/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /lidarr/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: lidarr 3 | description: Looks and smells like Sonarr but made for music. 4 | icon: https://avatars1.githubusercontent.com/u/28475832?s=200&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/lidarr 6 | keywords: 7 | - lidarr 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/lidarr/ 12 | - https://github.com/lidarr/Lidarr 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /lidarr/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "lidarr.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "lidarr.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "lidarr.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "lidarr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /lidarr/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "lidarr.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "lidarr.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "lidarr.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "lidarr.labels" -}} 38 | helm.sh/chart: {{ include "lidarr.chart" . }} 39 | {{ include "lidarr.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "lidarr.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "lidarr.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "lidarr.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "lidarr.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /lidarr/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lidarr.fullname" . }}-config 6 | labels: 7 | {{- include "lidarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lidarr/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lidarr.fullname" . }}-downloads 6 | labels: 7 | {{- include "lidarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lidarr/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "lidarr.fullname" . }}-env-config 5 | labels: 6 | {{- include "lidarr.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.lidarr }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /lidarr/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "lidarr.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "lidarr.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /lidarr/templates/music-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.audio.enabled (not .Values.persistence.audio.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "lidarr.fullname" . }}-audio 6 | labels: 7 | {{- include "lidarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.audio.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.audio.size | quote }} 14 | {{- if .Values.persistence.audio.storageClass }} 15 | {{- if (eq "-" .Values.persistence.audio.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.audio.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /lidarr/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "lidarr.fullname" . }} 5 | labels: 6 | {{- include "lidarr.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "lidarr.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /lidarr/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "lidarr.serviceAccountName" . }} 6 | labels: 7 | {{- include "lidarr.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /lidarr/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "lidarr.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "lidarr.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "lidarr.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /medusa/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /medusa/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: medusa 3 | description: Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic. 4 | icon: https://camo.githubusercontent.com/89e3583d77e019c4d77db7698c7070b684a7978a/68747470733a2f2f63646e2e7261776769742e636f6d2f70796d65647573612f6d65647573612e6769746875622e696f2f34333630643439342f696d616765732f6c6f676f2f6e65772d6c6f676f2e706e67 5 | home: https://github.com/pymedusa/medusa 6 | keywords: 7 | - medusa 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://pymedusa.com/ 12 | 13 | # A chart can be either an 'application' or a 'library' chart. 14 | # 15 | # Application charts are a collection of templates that can be packaged into versioned archives 16 | # to be deployed. 17 | # 18 | # Library charts provide useful utilities or functions for the chart developer. They're included as 19 | # a dependency of application charts to inject those utilities and functions into the rendering 20 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 21 | type: application 22 | 23 | # This is the chart version. This version number should be incremented each time you make changes 24 | # to the chart and its templates, including the app version. 25 | version: 1.0.0 26 | 27 | # This is the version number of the application being deployed. This version number should be 28 | # incremented each time you make changes to the application. 29 | appVersion: amd64-latest 30 | -------------------------------------------------------------------------------- /medusa/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "medusa.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "medusa.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "medusa.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "medusa.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /medusa/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "medusa.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "medusa.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "medusa.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "medusa.labels" -}} 38 | helm.sh/chart: {{ include "medusa.chart" . }} 39 | {{ include "medusa.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "medusa.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "medusa.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "medusa.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "medusa.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /medusa/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "medusa.fullname" . }}-config 6 | labels: 7 | {{- include "medusa.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /medusa/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "medusa.fullname" . }}-downloads 6 | labels: 7 | {{- include "medusa.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /medusa/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "medusa.fullname" . }}-env-config 5 | labels: 6 | {{- include "medusa.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.medusa }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /medusa/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "medusa.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "medusa.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /medusa/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "medusa.fullname" . }} 5 | labels: 6 | {{- include "medusa.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "medusa.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /medusa/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "medusa.serviceAccountName" . }} 6 | labels: 7 | {{- include "medusa.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /medusa/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "medusa.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "medusa.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "medusa.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /medusa/templates/tv-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.tv.enabled (not .Values.persistence.tv.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "medusa.fullname" . }}-tv 6 | labels: 7 | {{- include "medusa.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.tv.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.tv.size | quote }} 14 | {{- if .Values.persistence.tv.storageClass }} 15 | {{- if (eq "-" .Values.persistence.tv.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.tv.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /mylar/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /mylar/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: mylar 3 | description: Radarr is a comic book downloading client 4 | icon: https://avatars3.githubusercontent.com/u/25025331?s=400&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/mylar 6 | keywords: 7 | - mylar 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/mylar/ 12 | - https://github.com/evilhero/mylar 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /mylar/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "mylar.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "mylar.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "mylar.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "mylar.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /mylar/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "mylar.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "mylar.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "mylar.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "mylar.labels" -}} 38 | helm.sh/chart: {{ include "mylar.chart" . }} 39 | {{ include "mylar.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "mylar.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "mylar.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "mylar.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "mylar.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /mylar/templates/comics-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.comics.enabled (not .Values.persistence.comics.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "mylar.fullname" . }}-comics 6 | labels: 7 | {{- include "mylar.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.comics.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.comics.size | quote }} 14 | {{- if .Values.persistence.comics.storageClass }} 15 | {{- if (eq "-" .Values.persistence.comics.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.comics.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /mylar/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "mylar.fullname" . }}-config 6 | labels: 7 | {{- include "mylar.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /mylar/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "mylar.fullname" . }}-downloads 6 | labels: 7 | {{- include "mylar.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /mylar/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "mylar.fullname" . }}-env-config 5 | labels: 6 | {{- include "mylar.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.mylar }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /mylar/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "mylar.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "mylar.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /mylar/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "mylar.fullname" . }} 5 | labels: 6 | {{- include "mylar.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "mylar.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /mylar/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "mylar.serviceAccountName" . }} 6 | labels: 7 | {{- include "mylar.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /mylar/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "mylar.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "mylar.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "mylar.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /nzbget/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /nzbget/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: nzbget 3 | description: nzbget makes Usenet as simple and streamlined as possible by automating everything we can. 4 | home: https://nzbget.net/ 5 | keywords: 6 | - nzbget 7 | - usenet 8 | - bittorrent 9 | sources: 10 | - https://hub.docker.com/r/linuxserver/nzbget/ 11 | - https://nzbget.net/ 12 | 13 | # A chart can be either an 'application' or a 'library' chart. 14 | # 15 | # Application charts are a collection of templates that can be packaged into versioned archives 16 | # to be deployed. 17 | # 18 | # Library charts provide useful utilities or functions for the chart developer. They're included as 19 | # a dependency of application charts to inject those utilities and functions into the rendering 20 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 21 | type: application 22 | 23 | # This is the chart version. This version number should be incremented each time you make changes 24 | # to the chart and its templates, including the app version. 25 | version: 1.0.0 26 | 27 | # This is the version number of the application being deployed. This version number should be 28 | # incremented each time you make changes to the application. 29 | appVersion: amd64-latest 30 | -------------------------------------------------------------------------------- /nzbget/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "nzbget.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "nzbget.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "nzbget.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "nzbget.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /nzbget/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "nzbget.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "nzbget.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "nzbget.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "nzbget.labels" -}} 38 | helm.sh/chart: {{ include "nzbget.chart" . }} 39 | {{ include "nzbget.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "nzbget.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "nzbget.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "nzbget.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "nzbget.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /nzbget/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "nzbget.fullname" . }}-config 6 | labels: 7 | {{- include "nzbget.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /nzbget/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "nzbget.fullname" . }}-downloads 6 | labels: 7 | {{- include "nzbget.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /nzbget/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "nzbget.fullname" . }}-env-config 5 | labels: 6 | {{- include "nzbget.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.nzbget }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /nzbget/templates/incomplete-downloads.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.incompleteDownloads.enabled (not .Values.persistence.incompleteDownloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "nzbget.fullname" . }}-incomplete-downloads 6 | labels: 7 | {{- include "nzbget.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.incompleteDownloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.incompleteDownloads.size | quote }} 14 | {{- if .Values.persistence.incompleteDownloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.incompleteDownloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.incompleteDownloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /nzbget/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "nzbget.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "nzbget.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /nzbget/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "nzbget.fullname" . }} 5 | labels: 6 | {{- include "nzbget.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "nzbget.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /nzbget/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "nzbget.serviceAccountName" . }} 6 | labels: 7 | {{- include "nzbget.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /nzbget/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "nzbget.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "nzbget.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "nzbget.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /nzbhydra2/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /nzbhydra2/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: nzbhydra2 3 | description: Usenet meta search 4 | icon: https://avatars3.githubusercontent.com/u/25025331?s=400&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/nzbhydra2 6 | keywords: 7 | - nzbhydra2 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/nzbhydra2/ 12 | - https://github.com/nzbhydra2/nzbhydra2/ 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /nzbhydra2/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "nzbhydra2.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "nzbhydra2.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "nzbhydra2.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "nzbhydra2.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /nzbhydra2/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "nzbhydra2.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "nzbhydra2.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "nzbhydra2.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "nzbhydra2.labels" -}} 38 | helm.sh/chart: {{ include "nzbhydra2.chart" . }} 39 | {{ include "nzbhydra2.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "nzbhydra2.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "nzbhydra2.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "nzbhydra2.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "nzbhydra2.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /nzbhydra2/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "nzbhydra2.fullname" . }}-config 6 | labels: 7 | {{- include "nzbhydra2.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /nzbhydra2/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "nzbhydra2.fullname" . }}-env-config 5 | labels: 6 | {{- include "nzbhydra2.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.nzbhydra2 }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /nzbhydra2/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "nzbhydra2.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "nzbhydra2.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /nzbhydra2/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "nzbhydra2.fullname" . }} 5 | labels: 6 | {{- include "nzbhydra2.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "nzbhydra2.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /nzbhydra2/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "nzbhydra2.serviceAccountName" . }} 6 | labels: 7 | {{ include "nzbhydra2.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /nzbhydra2/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "nzbhydra2.fullname" . }}-test-connection" 5 | labels: 6 | {{ include "nzbhydra2.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "nzbhydra2.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /organizr/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /organizr/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: organizr 3 | description: organizr is a television show downloading client 4 | icon: https://github.com/causefx/Organizr/raw/v2-develop/plugins/images/organizr/logo-wide.png 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/organizr 6 | keywords: 7 | - organizr 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://github.com/causefx/Organizr 12 | 13 | # A chart can be either an 'application' or a 'library' chart. 14 | # 15 | # Application charts are a collection of templates that can be packaged into versioned archives 16 | # to be deployed. 17 | # 18 | # Library charts provide useful utilities or functions for the chart developer. They're included as 19 | # a dependency of application charts to inject those utilities and functions into the rendering 20 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 21 | type: application 22 | 23 | # This is the chart version. This version number should be incremented each time you make changes 24 | # to the chart and its templates, including the app version. 25 | version: 1.0.0 26 | 27 | # This is the version number of the application being deployed. This version number should be 28 | # incremented each time you make changes to the application. 29 | appVersion: latest 30 | -------------------------------------------------------------------------------- /organizr/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "organizr.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "organizr.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "organizr.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "organizr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /organizr/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "organizr.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "organizr.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "organizr.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "organizr.labels" -}} 38 | helm.sh/chart: {{ include "organizr.chart" . }} 39 | {{ include "organizr.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "organizr.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "organizr.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "organizr.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "organizr.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /organizr/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "organizr.fullname" . }}-config 6 | labels: 7 | {{- include "organizr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /organizr/templates/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "organizr.fullname" . }} 5 | labels: 6 | {{- include "organizr.labels" . | nindent 4 }} 7 | spec: 8 | replicas: {{ .Values.replicaCount }} 9 | strategy: 10 | type: {{ .Values.strategyType }} 11 | selector: 12 | matchLabels: 13 | {{- include "organizr.selectorLabels" . | nindent 6 }} 14 | template: 15 | metadata: 16 | labels: 17 | {{- include "organizr.selectorLabels" . | nindent 8 }} 18 | spec: 19 | {{- with .Values.imagePullSecrets }} 20 | imagePullSecrets: 21 | {{- toYaml . | nindent 8 }} 22 | {{- end }} 23 | serviceAccountName: {{ include "organizr.serviceAccountName" . }} 24 | securityContext: 25 | {{- toYaml .Values.podSecurityContext | nindent 8 }} 26 | containers: 27 | - name: {{ .Chart.Name }} 28 | securityContext: 29 | {{- toYaml .Values.securityContext | nindent 12 }} 30 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 31 | imagePullPolicy: {{ .Values.image.pullPolicy }} 32 | envFrom: 33 | - configMapRef: 34 | name: {{ include "organizr.fullname" . }}-env-config 35 | ports: 36 | - name: http 37 | containerPort: {{ .Values.service.port }} 38 | protocol: TCP 39 | livenessProbe: 40 | httpGet: 41 | path: / 42 | port: http 43 | initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds }} 44 | periodSeconds: {{ .Values.probes.liveness.periodSeconds }} 45 | timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds }} 46 | failureThreshold: {{ .Values.probes.liveness.failureThreshold }} 47 | readinessProbe: 48 | httpGet: 49 | path: / 50 | port: http 51 | initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds }} 52 | periodSeconds: {{ .Values.probes.readiness.periodSeconds }} 53 | timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds }} 54 | failureThreshold: {{ .Values.probes.readiness.failureThreshold }} 55 | volumeMounts: 56 | - mountPath: /config 57 | name: config 58 | {{- if .Values.persistence.config.subPath }} 59 | subPath: {{ .Values.persistence.config.subPath }} 60 | {{- end }} 61 | {{- range .Values.persistence.extraExistingClaimMounts }} 62 | - name: {{ .name }} 63 | mountPath: {{ .mountPath }} 64 | readOnly: {{ .readOnly }} 65 | {{- end }} 66 | resources: 67 | {{- toYaml .Values.resources | nindent 12 }} 68 | volumes: 69 | - name: config 70 | {{- if .Values.persistence.config.enabled }} 71 | persistentVolumeClaim: 72 | claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "organizr.fullname" . }}-config{{- end }} 73 | {{- else }} 74 | emptyDir: {} 75 | {{- end }} 76 | {{- range .Values.persistence.extraExistingClaimMounts }} 77 | - name: {{ .name }} 78 | persistentVolumeClaim: 79 | claimName: {{ .existingClaim }} 80 | {{- end }} 81 | {{- with .Values.nodeSelector }} 82 | nodeSelector: 83 | {{- toYaml . | nindent 8 }} 84 | {{- end }} 85 | {{- with .Values.affinity }} 86 | affinity: 87 | {{- toYaml . | nindent 8 }} 88 | {{- end }} 89 | {{- with .Values.tolerations }} 90 | tolerations: 91 | {{- toYaml . | nindent 8 }} 92 | {{- end }} 93 | -------------------------------------------------------------------------------- /organizr/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "organizr.fullname" . }}-env-config 5 | labels: 6 | {{- include "organizr.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.organizr }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /organizr/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "organizr.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "organizr.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /organizr/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "organizr.fullname" . }} 5 | labels: 6 | {{- include "organizr.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "organizr.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /organizr/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "organizr.serviceAccountName" . }} 6 | labels: 7 | {{- include "organizr.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /organizr/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "organizr.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "organizr.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "organizr.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /radarr/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /radarr/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: radarr 3 | description: Radarr is a movie downloading client 4 | icon: https://avatars3.githubusercontent.com/u/25025331?s=400&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/radarr 6 | keywords: 7 | - radarr 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/radarr/ 12 | - https://github.com/Radarr/Radarr/ 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /radarr/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "radarr.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "radarr.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "radarr.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "radarr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /radarr/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "radarr.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "radarr.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "radarr.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "radarr.labels" -}} 38 | helm.sh/chart: {{ include "radarr.chart" . }} 39 | {{ include "radarr.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "radarr.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "radarr.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "radarr.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "radarr.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /radarr/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "radarr.fullname" . }}-config 6 | labels: 7 | {{- include "radarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /radarr/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "radarr.fullname" . }}-downloads 6 | labels: 7 | {{- include "radarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /radarr/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "radarr.fullname" . }}-env-config 5 | labels: 6 | {{- include "radarr.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.radarr }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /radarr/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "radarr.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "radarr.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /radarr/templates/movies-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.movies.enabled (not .Values.persistence.movies.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "radarr.fullname" . }}-movies 6 | labels: 7 | {{- include "radarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.movies.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.movies.size | quote }} 14 | {{- if .Values.persistence.movies.storageClass }} 15 | {{- if (eq "-" .Values.persistence.movies.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.movies.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /radarr/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "radarr.fullname" . }} 5 | labels: 6 | {{- include "radarr.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "radarr.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /radarr/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "radarr.serviceAccountName" . }} 6 | labels: 7 | {{- include "radarr.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /radarr/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "radarr.fullname" . }}-test-connection" 5 | labels: 6 | {{ include "radarr.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "radarr.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /sabnzbd/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /sabnzbd/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: sabnzbd 3 | description: Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. 4 | icon: https://sabnzbd.org/images/logo-full.svg 5 | home: https://sabnzbd.org/ 6 | keywords: 7 | - sabnzbd 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/sabnzbd/ 12 | - https://sabnzbd.org/ 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /sabnzbd/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "sabnzbd.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "sabnzbd.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "sabnzbd.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "sabnzbd.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /sabnzbd/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "sabnzbd.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "sabnzbd.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "sabnzbd.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "sabnzbd.labels" -}} 38 | helm.sh/chart: {{ include "sabnzbd.chart" . }} 39 | {{ include "sabnzbd.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "sabnzbd.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "sabnzbd.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "sabnzbd.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "sabnzbd.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /sabnzbd/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sabnzbd.fullname" . }}-config 6 | labels: 7 | {{- include "sabnzbd.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /sabnzbd/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sabnzbd.fullname" . }}-downloads 6 | labels: 7 | {{- include "sabnzbd.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /sabnzbd/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "sabnzbd.fullname" . }}-env-config 5 | labels: 6 | {{- include "sabnzbd.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.sabnzbd }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /sabnzbd/templates/incomplete-downloads.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.incompleteDownloads.enabled (not .Values.persistence.incompleteDownloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sabnzbd.fullname" . }}-incomplete-downloads 6 | labels: 7 | {{- include "sabnzbd.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.incompleteDownloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.incompleteDownloads.size | quote }} 14 | {{- if .Values.persistence.incompleteDownloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.incompleteDownloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.incompleteDownloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /sabnzbd/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "sabnzbd.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "sabnzbd.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /sabnzbd/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "sabnzbd.fullname" . }} 5 | labels: 6 | {{- include "sabnzbd.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "sabnzbd.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /sabnzbd/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "sabnzbd.serviceAccountName" . }} 6 | labels: 7 | {{- include "sabnzbd.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /sabnzbd/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "sabnzbd.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "sabnzbd.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "sabnzbd.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /sonarr/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /sonarr/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: sonarr 3 | description: Sonarr is a television show downloading client 4 | icon: https://avatars1.githubusercontent.com/u/1082903?s=400&v=4 5 | home: https://github.com/aldoborrero/k8s-usenet/tree/master/sonarr 6 | keywords: 7 | - sonarr 8 | - usenet 9 | - bittorrent 10 | sources: 11 | - https://hub.docker.com/r/linuxserver/sonarr/ 12 | - https://sonarr.tv/ 13 | 14 | # A chart can be either an 'application' or a 'library' chart. 15 | # 16 | # Application charts are a collection of templates that can be packaged into versioned archives 17 | # to be deployed. 18 | # 19 | # Library charts provide useful utilities or functions for the chart developer. They're included as 20 | # a dependency of application charts to inject those utilities and functions into the rendering 21 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 22 | type: application 23 | 24 | # This is the chart version. This version number should be incremented each time you make changes 25 | # to the chart and its templates, including the app version. 26 | version: 1.0.0 27 | 28 | # This is the version number of the application being deployed. This version number should be 29 | # incremented each time you make changes to the application. 30 | appVersion: amd64-latest 31 | -------------------------------------------------------------------------------- /sonarr/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "sonarr.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "sonarr.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "sonarr.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "sonarr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /sonarr/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "sonarr.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "sonarr.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "sonarr.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "sonarr.labels" -}} 38 | helm.sh/chart: {{ include "sonarr.chart" . }} 39 | {{ include "sonarr.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "sonarr.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "sonarr.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "sonarr.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "sonarr.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /sonarr/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sonarr.fullname" . }}-config 6 | labels: 7 | {{- include "sonarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /sonarr/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sonarr.fullname" . }}-downloads 6 | labels: 7 | {{- include "sonarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /sonarr/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "sonarr.fullname" . }}-env-config 5 | labels: 6 | {{- include "sonarr.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.sonarr }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /sonarr/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "sonarr.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "sonarr.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /sonarr/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "sonarr.fullname" . }} 5 | labels: 6 | {{- include "sonarr.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{.Values.service.nodePort}} 46 | {{- end }} 47 | selector: 48 | {{- include "sonarr.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /sonarr/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "sonarr.serviceAccountName" . }} 6 | labels: 7 | {{- include "sonarr.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /sonarr/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "sonarr.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "sonarr.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "sonarr.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /sonarr/templates/tv-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.tv.enabled (not .Values.persistence.tv.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "sonarr.fullname" . }}-tv 6 | labels: 7 | {{- include "sonarr.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.tv.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.tv.size | quote }} 14 | {{- if .Values.persistence.tv.storageClass }} 15 | {{- if (eq "-" .Values.persistence.tv.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.tv.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /syncthing/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /syncthing/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: syncthing 3 | description: Continuous file synchronization program. 4 | icon: https://syncthing.net/img/logo-horizontal.svg 5 | home: https://syncthing.net/ 6 | keywords: 7 | - syncthing 8 | - synchronization 9 | sources: 10 | - https://hub.docker.com/r/linuxserver/syncthing/ 11 | - https://syncthing.net/ 12 | 13 | # A chart can be either an 'application' or a 'library' chart. 14 | # 15 | # Application charts are a collection of templates that can be packaged into versioned archives 16 | # to be deployed. 17 | # 18 | # Library charts provide useful utilities or functions for the chart developer. They're included as 19 | # a dependency of application charts to inject those utilities and functions into the rendering 20 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 21 | type: application 22 | 23 | # This is the chart version. This version number should be incremented each time you make changes 24 | # to the chart and its templates, including the app version. 25 | version: 1.0.0 26 | 27 | # This is the version number of the application being deployed. This version number should be 28 | # incremented each time you make changes to the application. 29 | appVersion: amd64-latest 30 | -------------------------------------------------------------------------------- /syncthing/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "syncthing.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "syncthing.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "syncthing.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "syncthing.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8384 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8384:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /syncthing/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "syncthing.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "syncthing.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "syncthing.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "syncthing.labels" -}} 38 | helm.sh/chart: {{ include "syncthing.chart" . }} 39 | {{ include "syncthing.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "syncthing.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "syncthing.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "syncthing.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "syncthing.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /syncthing/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "syncthing.fullname" . }}-config 6 | labels: 7 | {{- include "syncthing.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} 22 | -------------------------------------------------------------------------------- /syncthing/templates/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "syncthing.fullname" . }} 5 | labels: 6 | {{- include "syncthing.labels" . | nindent 4 }} 7 | spec: 8 | replicas: {{ .Values.replicaCount }} 9 | strategy: 10 | type: {{ .Values.strategyType }} 11 | selector: 12 | matchLabels: 13 | {{- include "syncthing.selectorLabels" . | nindent 6 }} 14 | template: 15 | metadata: 16 | labels: 17 | {{- include "syncthing.selectorLabels" . | nindent 8 }} 18 | spec: 19 | {{- with .Values.imagePullSecrets }} 20 | imagePullSecrets: 21 | {{- toYaml . | nindent 8 }} 22 | {{- end }} 23 | serviceAccountName: {{ include "syncthing.serviceAccountName" . }} 24 | securityContext: 25 | {{- toYaml .Values.podSecurityContext | nindent 8 }} 26 | containers: 27 | - name: {{ .Chart.Name }} 28 | securityContext: 29 | {{- toYaml .Values.securityContext | nindent 12 }} 30 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 31 | imagePullPolicy: {{ .Values.image.pullPolicy }} 32 | envFrom: 33 | - configMapRef: 34 | name: {{ include "syncthing.fullname" . }}-env-config 35 | ports: 36 | - name: http 37 | containerPort: {{ .Values.service.port }} 38 | protocol: TCP 39 | - name: sync 40 | containerPort: {{ .Values.service.syncPort }} 41 | protocol: TCP 42 | volumeMounts: 43 | - mountPath: /config 44 | name: config 45 | {{- if .Values.persistence.config.subPath }} 46 | subPath: {{ .Values.persistence.config.subPath }} 47 | {{- end }} 48 | {{- range .Values.persistence.extraExistingClaimMounts }} 49 | - name: {{ .name }} 50 | mountPath: {{ .mountPath }} 51 | readOnly: {{ .readOnly }} 52 | {{- end }} 53 | resources: 54 | {{- toYaml .Values.resources | nindent 12 }} 55 | volumes: 56 | - name: config 57 | {{- if .Values.persistence.config.enabled }} 58 | persistentVolumeClaim: 59 | claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "syncthing.fullname" . }}-config{{- end }} 60 | {{- else }} 61 | emptyDir: {} 62 | {{- end }} 63 | {{- range .Values.persistence.extraExistingClaimMounts }} 64 | - name: {{ .name }} 65 | persistentVolumeClaim: 66 | claimName: {{ .existingClaim }} 67 | {{- end }} 68 | {{- with .Values.nodeSelector }} 69 | nodeSelector: 70 | {{- toYaml . | nindent 8 }} 71 | {{- end }} 72 | {{- with .Values.affinity }} 73 | affinity: 74 | {{- toYaml . | nindent 8 }} 75 | {{- end }} 76 | {{- with .Values.tolerations }} 77 | tolerations: 78 | {{- toYaml . | nindent 8 }} 79 | {{- end }} 80 | -------------------------------------------------------------------------------- /syncthing/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "syncthing.fullname" . }}-env-config 5 | labels: 6 | {{- include "syncthing.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.syncthing }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /syncthing/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "syncthing.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "syncthing.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /syncthing/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "syncthing.fullname" . }} 5 | labels: 6 | {{- include "syncthing.labels" . | nindent 4 }} 7 | {{- if .Values.service.labels }} 8 | {{ toYaml .Values.service.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.clusterIP }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.type "LoadBalancer" }} 21 | type: {{ .Values.service.type }} 22 | {{- if .Values.service.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.type }} 31 | {{- end }} 32 | {{- if .Values.service.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 45 | nodePort: {{ .Values.service.nodePort }} 46 | {{- end }} 47 | - name: sync 48 | port: {{ .Values.service.syncPort }} 49 | protocol: TCP 50 | targetPort: sync 51 | selector: 52 | {{- include "syncthing.selectorLabels" . | nindent 4 }} 53 | -------------------------------------------------------------------------------- /syncthing/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "syncthing.serviceAccountName" . }} 6 | labels: 7 | {{- include "syncthing.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /syncthing/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "syncthing.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "syncthing.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "syncthing.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /transmission/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /transmission/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: transmission 3 | description: A fast, easy and free Bittorrent client. 4 | home: https://transmissionbt.com/ 5 | keywords: 6 | - transmission 7 | - bittorrent 8 | sources: 9 | - https://hub.docker.com/r/linuxserver/transmission/ 10 | - https://transmissionbt.com/ 11 | 12 | # A chart can be either an 'application' or a 'library' chart. 13 | # 14 | # Application charts are a collection of templates that can be packaged into versioned archives 15 | # to be deployed. 16 | # 17 | # Library charts provide useful utilities or functions for the chart developer. They're included as 18 | # a dependency of application charts to inject those utilities and functions into the rendering 19 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 20 | type: application 21 | 22 | # This is the chart version. This version number should be incremented each time you make changes 23 | # to the chart and its templates, including the app version. 24 | version: 1.0.0 25 | 26 | # This is the version number of the application being deployed. This version number should be 27 | # incremented each time you make changes to the application. 28 | appVersion: amd64-latest 29 | -------------------------------------------------------------------------------- /transmission/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.ui.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "transmission.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.ui.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "transmission.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "transmission.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.ui.port }} 17 | {{- else if contains "ClusterIP" .Values.service.ui.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "transmission.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /transmission/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "transmission.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "transmission.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "transmission.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "transmission.labels" -}} 38 | helm.sh/chart: {{ include "transmission.chart" . }} 39 | {{ include "transmission.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "transmission.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "transmission.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "transmission.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "transmission.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /transmission/templates/bt-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "transmission.fullname" . }}-bt 5 | labels: 6 | {{- include "transmission.labels" . | nindent 4 }} 7 | {{- if .Values.service.bt.labels }} 8 | {{ toYaml .Values.service.bt.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.bt.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.bt.type "ClusterIP") (empty .Values.service.bt.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.bt.clusterIP }} 18 | clusterIP: {{ .Values.service.bt.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.bt.type "LoadBalancer" }} 21 | type: {{ .Values.service.bt.type }} 22 | {{- if .Values.service.bt.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.bt.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.bt.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.bt.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.bt.type }} 31 | {{- end }} 32 | {{- if .Values.service.bt.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.bt.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.bt.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.bt.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.bt.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.bt.type "NodePort") (not (empty .Values.service.bt.nodePort))) }} 45 | nodePort: {{ .Values.service.bt.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "transmission.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /transmission/templates/config-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "transmission.fullname" . }}-config 6 | labels: 7 | {{- include "transmission.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.config.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.config.size | quote }} 14 | {{- if .Values.persistence.config.storageClass }} 15 | {{- if (eq "-" .Values.persistence.config.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.config.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /transmission/templates/downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "transmission.fullname" . }}-downloads 6 | labels: 7 | {{- include "transmission.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.downloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.downloads.size | quote }} 14 | {{- if .Values.persistence.downloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.downloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.downloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} -------------------------------------------------------------------------------- /transmission/templates/env-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "transmission.fullname" . }}-env-config 5 | labels: 6 | {{- include "transmission.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $val := .Values.transmission }} 9 | {{ $key | upper }}: {{ $val | quote }} 10 | {{- end}} 11 | -------------------------------------------------------------------------------- /transmission/templates/incomplete-downloads-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "transmission.fullname" . }}-incomplete-downloads 6 | labels: 7 | {{- include "transmission.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.incompleteDownloads.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.incompleteDownloads.size | quote }} 14 | {{- if .Values.persistence.incompleteDownloads.storageClass }} 15 | {{- if (eq "-" .Values.persistence.incompleteDownloads.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.incompleteDownloads.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} 22 | -------------------------------------------------------------------------------- /transmission/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "transmission.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "transmission.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }}-ui 38 | servicePort: http 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /transmission/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "transmission.serviceAccountName" . }} 6 | labels: 7 | {{- include "transmission.labels" . | nindent 4 }} 8 | {{- end -}} 9 | -------------------------------------------------------------------------------- /transmission/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "transmission.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "transmission.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "transmission.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /transmission/templates/ui-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "transmission.fullname" . }}-ui 5 | labels: 6 | {{- include "transmission.labels" . | nindent 4 }} 7 | {{- if .Values.service.ui.labels }} 8 | {{ toYaml .Values.service.ui.labels | indent 4 }} 9 | {{- end }} 10 | {{- with .Values.service.ui.annotations }} 11 | annotations: 12 | {{ toYaml . | indent 4 }} 13 | {{- end }} 14 | spec: 15 | {{- if (or (eq .Values.service.ui.type "ClusterIP") (empty .Values.service.ui.type)) }} 16 | type: ClusterIP 17 | {{- if .Values.service.ui.clusterIP }} 18 | clusterIP: {{ .Values.service.ui.clusterIP }} 19 | {{end}} 20 | {{- else if eq .Values.service.ui.type "LoadBalancer" }} 21 | type: {{ .Values.service.ui.type }} 22 | {{- if .Values.service.ui.loadBalancerIP }} 23 | loadBalancerIP: {{ .Values.service.ui.loadBalancerIP }} 24 | {{- end }} 25 | {{- if .Values.service.ui.loadBalancerSourceRanges }} 26 | loadBalancerSourceRanges: 27 | {{ toYaml .Values.service.ui.loadBalancerSourceRanges | indent 4 }} 28 | {{- end -}} 29 | {{- else }} 30 | type: {{ .Values.service.ui.type }} 31 | {{- end }} 32 | {{- if .Values.service.ui.externalIPs }} 33 | externalIPs: 34 | {{ toYaml .Values.service.ui.externalIPs | indent 4 }} 35 | {{- end }} 36 | {{- if .Values.service.ui.externalTrafficPolicy }} 37 | externalTrafficPolicy: {{ .Values.service.ui.externalTrafficPolicy }} 38 | {{- end }} 39 | ports: 40 | - name: http 41 | port: {{ .Values.service.ui.port }} 42 | protocol: TCP 43 | targetPort: http 44 | {{- if (and (eq .Values.service.ui.type "NodePort") (not (empty .Values.service.ui.nodePort))) }} 45 | nodePort: {{ .Values.service.ui.nodePort }} 46 | {{- end }} 47 | selector: 48 | {{- include "transmission.selectorLabels" . | nindent 4 }} 49 | -------------------------------------------------------------------------------- /transmission/templates/watch-pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.watch.enabled (not .Values.persistence.watch.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "transmission.fullname" . }}-watch 6 | labels: 7 | {{- include "transmission.labels" . | nindent 4 }} 8 | spec: 9 | accessModes: 10 | - {{ .Values.persistence.watch.accessMode | quote }} 11 | resources: 12 | requests: 13 | storage: {{ .Values.persistence.watch.size | quote }} 14 | {{- if .Values.persistence.watch.storageClass }} 15 | {{- if (eq "-" .Values.persistence.watch.storageClass) }} 16 | storageClassName: "" 17 | {{- else }} 18 | storageClassName: "{{ .Values.persistence.watch.storageClass }}" 19 | {{- end }} 20 | {{- end }} 21 | {{- end -}} --------------------------------------------------------------------------------