fonzdm / servarr Goto Github PK
View Code? Open in Web Editor NEWJust trying to make a Servarr helm chart. Help
License: GNU Affero General Public License v3.0
Just trying to make a Servarr helm chart. Help
License: GNU Affero General Public License v3.0
Would be good to document all the values that can be set during the Helm Chart installation/update to customize it based on the user needs.
I think we can do it in several ways, and they are all good options at the end. Those are the ones I was thinking about:
README.md
, but this would lead to a very long README and I don't like it so much;/docs
(we should then add this path to the .helmignore
) which will contains all the values with a short description, default value and an example.Please, feel free to propose any other solution.
Would be good to have a different pipelines being executed in some context, in order to provide some guidance and an integration automation, such as:
GitHub pipeline that executes a given set of commands to build and lint the package for each PR/commit done on dev
branch and for PR that has the main
branch as target.
Seems like that the storage class named passed in the values global.storageClassName
is not being used correctly when creating the PVC, so Kubernetes uses the default storage class.
I think that's because there's a typo when referring to the parameter:
servarr/servarr/templates/pvc.yaml
Line 12 in d08a0a6
servarr/servarr/templates/pvc.yaml
Line 33 in d08a0a6
servarr/servarr/templates/pvc.yaml
Line 54 in d08a0a6
helm template servarr servarr/ -f .github/ci/ci-values.yaml | egrep -i "servarr/templates/pvc.yaml|storageClassName"
or deploy it using your values.The Helm Chart should generate PVC templates using the correct StorageClassName
from the values.
dev
~$ helm template servarr servarr/servarr/ -f test/servarr-values.yaml | egrep -i "servarr/templates/|storageClassName"
# Source: servarr/templates/pvc.yaml
storageClassName:
# Source: servarr/templates/pvc.yaml
storageClassName:
# Source: servarr/templates/pvc.yaml
storageClassName:
# Check .github/ci/ci-values.yaml
global:
storageClassName: &storageClassName "longhorn"
...
At the moment, the qBitTorrent credentials are scattered in different places:
admin
user, an the password is encrypted here:
Lines 21 to 23 in 8a0aa86
So a user who's willing to change the credentials:
admin
userFor info, the algo used for encryption is PBKDF2
The user should set the qBitTorrent service credentials via values.yaml file only.
Those parameter will be used both for Sonarr/Radarr registration and the actual qBitTorrent user creation.
I am open to suggestion, cause I cannot really find a way to define those info in input during the deploy.
I would not bother changing them now (via helm upgrade), this is a step we can think about later on.
After #20 has been merged, on some browser (such as Firefox), login on the WebGui is not successful and an "Unauthorized
" message is presented.
This affects only the User interface, since internal services like Radarr/Sonarr/Prowlarr can authenticate towards qBitTorrent with no issue at all.
Install the helm release with the most recent version (as per #22), provide custom credentials into the yaml file for torrent.username
and torrent.password
fields.
Open the WebGui using the provided FQDN in the values and fill out the username and password textbox.
Then try to login.
Authentication on qBitTorrent WebGUI should work seamlessly using the credentials provided in the values.yaml file.
1.0.0 (Pre Release)
No logs to show (from pod logs nothing wrong appears)
global:
# -- (string) Insert your Prowlarr, Sonarr, Radarr API key here (one to rule them all!). Do not remove the `&apikey` anchor!
# @default -- No default value is configured for security reasons
# @section -- Global
apikey: &apikey "HIDDEN"
# -- (string) Insert your storage class here, e.g.: &storageClassName network-block. Do not remove the `&storageClassName` anchor!
# @section -- Global
storageClassName: &storageClassName "longhorn"
# -- (string) Insert your cert manager cluster issuer, e.g.: letsencrypt-cloudflare. Do not remove the `&issuer` anchor!
# @default -- No default value, leave empty if not required
# @section -- Global
certManagerClusterIssuer: &issuer "letsencrypt-test-cloudflare"
metrics:
# -- Anchor to set wether to deploy the export sidecar pods or not. Requires the Prometheus stack. Do not remove the `&metricsEnabled` anchor!
# @section -- Metrics
enabled: &metricsEnabled false
# @ignore
initJellyseerr: true
notifications:
telegram:
# -- Enable the Telegram notifications
# @section -- Jellyseerr
enabled: true
# -- (string) Insert the Telegram Chat id, check @get_id_bot for this
# @section -- Jellyseerr
# @default -- No default value
chat_id: "HIDDEN"
# -- (string) Insert your Telegram Bot API token
# @section -- Jellyseerr
# @default -- No default value
bot_apitoken: "HIDDEN"
dash:
# -- (string) Insert the Jellyfin username (will be used also for Jellyseerr)
# @section -- Jellyfin
# @default -- No default value
username: HIDDEN
# -- (string) Insert Jellyfin password (will be used also for Jellyseerr)
# @section -- Jellyfin
# @default -- No default value
password: HIDDEN
# -- (string) Insert Jellyfin login mail (will be used also for Jellyseerr integration)
# @section -- Jellyfin
# @default -- No default value
mail: HIDDEN
# -- (string) Inser the Jellyfin country code
# @section -- Jellyfin
# @default -- IT
countryCode: "IT"
# -- (string) Inser the Jellyfin preferred language
# @section -- Jellyfin
# @default -- it
preferredLanguage: "it"
torrent:
# -- (string) username of the qBitTorrent admin user
# @section -- Torrent
# @default -- No default value
username: HIDDEN
# -- (string) password of the qBitTorrent admin user
# @section -- Torrent
# @default -- No default value
password: HIDDEN
# -- The indexers list. Each element of the list is the yaml-formatted body of the [Prowlarr API request](https://prowlarr.com/docs/api/#/Indexer/post_api_v1_indexer) to add that index.
# @default -- The body of the 1337x index is provided as default
# @section -- Prowlarr
indexers:
# @ignored
- name: 1337x
body:
added: "0001-01-01T00:00:00Z"
appProfileId: 1
capabilities:
bookSearchParams:
- q
categories:
- id: 5000
name: TV
subCategories:
- id: 5070
name: TV/Anime
subCategories: []
- id: 5040
name: TV/HD
subCategories: []
- id: 5030
name: TV/SD
subCategories: []
- id: 5080
name: TV/Documentary
subCategories: []
- id: 3000
name: Audio
subCategories:
- id: 3010
name: Audio/MP3
subCategories: []
- id: 3040
name: Audio/Lossless
subCategories: []
- id: 3020
name: Audio/Video
subCategories: []
- id: 3050
name: Audio/Other
subCategories: []
- id: 3030
name: Audio/Audiobook
subCategories: []
- id: 2000
name: Movies
subCategories:
- id: 2070
name: Movies/DVD
subCategories: []
- id: 2030
name: Movies/SD
subCategories: []
- id: 2010
name: Movies/Foreign
subCategories: []
- id: 2040
name: Movies/HD
subCategories: []
- id: 2060
name: Movies/3D
subCategories: []
- id: 2045
name: Movies/UHD
subCategories: []
- id: 4000
name: PC
subCategories:
- id: 4030
name: PC/Mac
subCategories: []
- id: 4070
name: PC/Mobile-Android
subCategories: []
- id: 4060
name: PC/Mobile-iOS
subCategories: []
- id: 4050
name: PC/Games
subCategories: []
- id: 4040
name: PC/Mobile-Other
subCategories: []
- id: 1000
name: Console
subCategories:
- id: 1080
name: Console/PS3
subCategories: []
- id: 1020
name: Console/PSP
subCategories: []
- id: 1040
name: Console/XBox
subCategories: []
- id: 1050
name: Console/XBox 360
subCategories: []
- id: 1090
name: Console/Other
subCategories: []
- id: 1030
name: Console/Wii
subCategories: []
- id: 1010
name: Console/NDS
subCategories: []
- id: 1110
name: Console/3DS
subCategories: []
- id: 1180
name: Console/PS4
subCategories: []
- id: 6000
name: XXX
subCategories:
- id: 6010
name: XXX/DVD
subCategories: []
- id: 6060
name: XXX/ImageSet
subCategories: []
- id: 8000
name: Other
subCategories:
- id: 8010
name: Other/Misc
subCategories: []
- id: 7000
name: Books
subCategories:
- id: 7020
name: Books/EBook
subCategories: []
- id: 7030
name: Books/Comics
subCategories: []
limitsDefault: 100
limitsMax: 100
movieSearchParams:
- q
musicSearchParams:
- q
- album
- artist
searchParams:
- q
- q
supportsRawSearch: true
tvSearchParams:
- q
- season
- ep
configContract: CardigannSettings
definitionName: 1337x
description: 1337X is a Public torrent site that offers verified torrent downloads
downloadClientId: 0
enable: true
fields:
- name: definitionFile
value: 1337x
- name: baseUrl
value: https://1337x.proxyninja.org/
- name: baseSettings.queryLimit
- name: baseSettings.grabLimit
- name: baseSettings.limitsUnit
value: 0
- name: torrentBaseSettings.appMinimumSeeders
- name: torrentBaseSettings.seedRatio
- name: torrentBaseSettings.seedTime
- name: torrentBaseSettings.packSeedTime
- name: downloadlink
value: 1
- name: downloadlink2
value: 0
- name: sort
value: 0
- name: type
value: 1
implementation: Cardigann
implementationName: Cardigann
indexerUrls:
- https://1337x.to/
- https://1337x.st/
- https://x1337x.ws/
- https://x1337x.eu/
- https://x1337x.se/
- https://1337x.so/
- https://1337x.unblockit.africa/
- https://1337x.unblockninja.com/
- https://1337x.ninjaproxy1.com/
- https://1337x.proxyninja.org/
- https://1337x.torrentbay.st/
infoLink: https://wiki.servarr.com/prowlarr/supported-indexers#1337x
language: en-US
legacyUrls:
- https://1337x.is/
- https://1337x.gd/
- https://1337x.nocensor.lol/
- https://1337x.unblockit.ink/
- https://1337x.nocensor.art/
- https://1337x.unblockit.bio/
- https://1337x.unblockit.boo/
- https://1337x.mrunblock.guru/
- https://1337x.mrunblock.life/
- https://1337x.unblockit.click/
- https://1337x.unblockit.asia/
- https://1337x.unblockit.mov/
- https://1337x.unblockit.rsvp/
- https://1337x.unblockit.vegas/
- https://1337x.unblockit.esq/
- https://1337x.unblockit.zip/
- https://1337x.unblockit.foo/
- https://1337x.unblockit.ing/
- https://1337x.mrunblock.bond/
- https://1337x.unblockit.date/
- https://1337x.unblockit.dad/
name: 1337x
priority: 25
privacy: public
protocol: torrent
redirect: false
sortName: 1337x
supportsPagination: false
supportsRedirect: false
supportsRss: true
supportsSearch: true
tags:
- 1
- name: ilcorsaroblu
body:
appProfileId: 1
capabilities:
bookSearchParams:
- q
categories:
- id: 6000
name: XXX
subCategories: []
- id: 4000
name: PC
subCategories:
- id: 4070
name: PC/Mobile-Android
subCategories: []
- id: 4060
name: PC/Mobile-iOS
subCategories: []
- id: 4010
name: PC/0day
subCategories: []
- id: 4030
name: PC/Mac
subCategories: []
- id: 4050
name: PC/Games
subCategories: []
- id: 7000
name: Books
subCategories:
- id: 7020
name: Books/EBook
subCategories: []
- id: 7030
name: Books/Comics
subCategories: []
- id: 7010
name: Books/Mags
subCategories: []
- id: 1000
name: Console
subCategories:
- id: 1040
name: Console/XBox
subCategories: []
- id: 1010
name: Console/NDS
subCategories: []
- id: 3000
name: Audio
subCategories:
- id: 3010
name: Audio/MP3
subCategories: []
- id: 2000
name: Movies
subCategories:
- id: 2040
name: Movies/HD
subCategories: []
- id: 2020
name: Movies/Other
subCategories: []
- id: 2070
name: Movies/DVD
subCategories: []
- id: 2060
name: Movies/3D
subCategories: []
- id: 2045
name: Movies/UHD
subCategories: []
- id: 5000
name: TV
subCategories:
- id: 5030
name: TV/SD
subCategories: []
- id: 5040
name: TV/HD
subCategories: []
- id: 5070
name: TV/Anime
subCategories: []
- id: 5060
name: TV/Sport
subCategories: []
- id: 5080
name: TV/Documentary
subCategories: []
- id: 8000
name: Other
subCategories: []
limitsDefault: 100
limitsMax: 100
movieSearchParams:
- q
musicSearchParams:
- q
searchParams:
- q
- q
supportsRawSearch: false
tvSearchParams:
- q
- season
- ep
configContract: CardigannSettings
definitionName: ilcorsaroblu
description: il CorSaRo Blu is an ITALIAN Semi-Private site for TV / MOVIES / GENERAL
downloadClientId: 0
enable: true
fields:
- name: definitionFile
value: ilcorsaroblu
- name: baseUrl
value: "https://ilcorsaroblu.org/"
- name: baseSettings.queryLimit
- name: baseSettings.grabLimit
- name: baseSettings.limitsUnit
value: 0
- name: torrentBaseSettings.appMinimumSeeders
- name: torrentBaseSettings.seedRatio
- name: torrentBaseSettings.seedTime
- name: torrentBaseSettings.packSeedTime
- name: username
value: HIDDEN
- name: password
value: "HIDDEN"
- name: freeleech
value: false
- name: sort
value: 1
- name: type
value: 1
implementation: Cardigann
implementationName: Cardigann
indexerUrls:
- "https://ilcorsaroblu.org/"
infoLink: "https://wiki.servarr.com/prowlarr/supported-indexers#ilcorsaroblu"
language: it-IT
legacyUrls:
- "http://ilcorsaroblu.org/"
- "https://www.ilcorsaroblu.info/"
- "https://www.ilcorsaroblu.org/"
- "https://ilcorsaroblu.online/"
name: Il Corsaro Blu
priority: 25
privacy: semiPrivate
protocol: torrent
redirect: false
sortName: il corsaro blu
supportsPagination: false
supportsRedirect: false
supportsRss: true
supportsSearch: true
tags: []
# -- For tracking purpose, not used - replaced with pre-existing cluster issuer
# @section -- Issuer
# @default -- See the sub fields
issuer:
# @section -- Issuer
server: https://acme-v02.api.letsencrypt.org/directory
# -- Insert your email address
# @section -- Issuer
email: HIDDEN
# @section -- Issuer
secretName: letsencrypt-prod
# @section -- Issuer
ingressClassName: nginx
# -- Insert your CloudFlare key
# @section -- Issuer
cloudFlareKey: HIDDEN
volumes:
# @ignore
storageClass: *storageClassName
# -- configuration of the volume used for torrent downloads
# @section -- Storage
# @default -- See the sub fields
downloads:
# -- Name of the download pvc. Do not remove the `&downloads-volume` anchor!
# @section -- Storage
name: &downloads-volume downloads-volume
# -- Size of the downloads volume, in Kubernets format
# @section -- Storage
size: 100Gi
# -- configuration of the volume used for media storage (i.e.: where movies and tv shows file will be permanently stored)
# @section -- Storage
# @default -- See the sub fields
media:
# -- Name of the media pvc. Do not remove the `&media-volume` anchor!
# @section -- Storage
name: &media-volume media-volume
# -- Size of the media volume, in Kubernets format
# @section -- Storage
size: 250Gi
# -- configuration of the volume used for qBitTorrent internal configuration
# @section -- Storage
# @default -- See the sub fields
torrentConfig:
# -- Name of the torrent configuration pvc. Do not remove the `&torrentConfig` anchor!
# @section -- Storage
name: &torrentConfig torrent-config
# -- Size of the torrent configuration volume, in Kubernets format
# @section -- Storage
size: 250Mi
# @ignore
sonarr:
# @ignore
metrics:
main:
enabled: *metricsEnabled
# @ignore
workload:
main:
podSpec:
containers:
main:
env:
SONARR__API_KEY: *apikey
# @ignore
ingress:
# @ignore
sonarr-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: sonarr.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- sonarr.media.fonzdm.xyz
secretName: sonarr-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
# @ignore
persistence:
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
# @ignore
media:
enabled: true
type: pvc
existingClaim: *media-volume
targetSelector:
main:
main:
mountPath: /mnt/media
# @ignore
downloads:
enabled: true
type: pvc
existingClaim: *downloads-volume
targetSelector:
main:
main:
mountPath: /mnt/downloads
# @ignore
radarr:
# @ignore
metrics:
main:
enabled: *metricsEnabled
# @ignore
workload:
main:
podSpec:
containers:
main:
env:
RADARR__API_KEY: *apikey
# @ignore
ingress:
# @ignore
radarr-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: radarr.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- radarr.media.fonzdm.xyz
secretName: radarr-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
persistence:
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
media:
enabled: true
type: pvc
existingClaim: *media-volume
targetSelector:
main:
main:
mountPath: /mnt/media
downloads:
enabled: true
type: pvc
existingClaim: *downloads-volume
targetSelector:
main:
main:
mountPath: /mnt/downloads
# @ignore
jellyfin:
metrics:
main:
enabled: *metricsEnabled
# @ignore
fallbackDefaults:
storageClass:
probeType: http
serviceProtocol: tcp
serviceType: ClusterIP
persistenceType: pvc
pvcRetain: false
pvcSize: 100Gi
vctSize: 100Gi
accessModes:
- ReadWriteMany
vctAccessModes:
- ReadWriteMany
probeTimeouts:
liveness:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
successThreshold: 1
readiness:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
successThreshold: 2
startup:
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 60
successThreshold: 1
pgVersion: 16
serviceProtocol: tcp
ingress:
jellyfin-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: jellyfin.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- jellyfin.media.fonzdm.xyz
secretName: jellyfin-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
persistence:
transcode:
enabled: false
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
media:
enabled: true
type: pvc
existingClaim: *media-volume
targetSelector:
main:
main:
mountPath: /mnt/media
# @ignore
jellyseerr:
metrics:
main:
enabled: *metricsEnabled
# @ignore
fallbackDefaults:
storageClass:
probeType: http
serviceProtocol: tcp
serviceType: ClusterIP
persistenceType: pvc
pvcRetain: false
pvcSize: 100Gi
vctSize: 100Gi
accessModes:
- ReadWriteMany
vctAccessModes:
- ReadWriteMany
probeTimeouts:
liveness:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
successThreshold: 1
readiness:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
successThreshold: 2
startup:
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 60
successThreshold: 1
pgVersion: 16
ingress:
jellyseerr-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: jellyseerr.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- jellyseerr.media.fonzdm.xyz
secretName: jellyseerr-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
persistence:
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /app/config
exportarr:
exportarr:
mountPath: /config
readOnly: true
media:
enabled: true
type: pvc
existingClaim: *media-volume
targetSelector:
main:
main:
mountPath: /mnt/media
# @ignore
qbittorrent:
metrics:
main:
enabled: *metricsEnabled
workload:
main:
podSpec:
containers:
main:
env:
QBITTORRENT__USE_PROFILE: true
ingress:
qbittorrent-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: torrent.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- torrent.media.fonzdm.xyz
secretName: torrent-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
persistence:
config:
enabled: true
type: pvc
existingClaim: *torrentConfig
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
downloads:
enabled: true
type: pvc
existingClaim: *downloads-volume
targetSelector:
main:
main:
mountPath: /downloads
# @ignore
prowlarr:
metrics:
main:
enabled: *metricsEnabled
workload:
main:
podSpec:
containers:
main:
env:
PROWLARR__API_KEY: *apikey
ingress:
prowlarr-ing:
enabled: true
primary: true
required: true
expandObjectName: false
annotations:
cert-manager.io/cluster-issuer: *issuer
ingressClassName: "nginx"
hosts:
- host: prowlarr.media.fonzdm.xyz
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- prowlarr.media.fonzdm.xyz
secretName: prowlarr-tls
integrations:
certManager:
enabled: false
traefik:
enabled: false
persistence:
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
# @ignore
flaresolverr:
metrics:
main:
enabled: *metricsEnabled
persistence:
config:
enabled: true
type: pvc
size: 500Mi
accessModes: ReadWriteMany
storageClass: *storageClassName
targetSelector:
main:
main:
mountPath: /config
exportarr:
exportarr:
mountPath: /config
readOnly: true
Would be good to have a way to select which subchart to deploy.
For instance: if a user wants to deploy Radarr and Sonarr but Flaresolverr.
We can add the condition inside the Chart.yaml
and have the values.yaml
with also the enabled field, e.g.,:
sonarr:
enabled: true
...
radarr:
enabled: true
...
flaresolverr:
enabled: false
...
There's an issue when adding qBitTorrent in Prowlarr as download client via the API ttp://servarr-prowlarr.{{ .Release.Namespace }}.svc.cluster.local:9696/api/v1/downloadclient\
. Moreover, Prowlarr is answering with the status code 400 and the following message: Test was aborted due to an error: Object reference not set to an instance of an object.
.
From Prowlarr docs, the request body seems quite different from the one being set in the job:
servarr/servarr/templates/init-downloaders.yaml
Lines 105 to 118 in 810bb48
Deploy the Helm Chart with any value by using the version available in the dev
branch.
qBitTorrent getting registered in Prowlarr successfully I guess?
dev
# API Answer
~$ kubectl logs -n servarr downloaders-post-install-job-mpj59 -c prowlarr-vs-qbt-finalizer % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
[
{
"isWarning": false,
"propertyName": "",
"errorMessage": "Test was aborted due to an error: Object reference not set to an instance of an object.",
"severity": "error"
}
100 1033 0 194 100 839 539 2333 --:--:-- --:--:-- --:--:-- 2869
]
# Prowlarr pod logs
[Error] QBittorrent: Test aborted due to exception
[v1.14.0.4286] System.NullReferenceException: Object reference not set to an instance of an object.
at NzbDrone.Core.Download.DownloadClientBase`1.ValidateCategories(List`1 failures) in ./Prowlarr.Core/Download/DownloadClientBase.cs:line 97
at NzbDrone.Core.Download.DownloadClientBase`1.Test() in ./Prowlarr.Core/Download/DownloadClientBase.cs:line 112
[Warn] ProwlarrErrorPipeline: Invalid request Validation failed:
-- : Test was aborted due to an error: Object reference not set to an instance of an object.
# Refers to https://github.com/fonzdm/servarr/blob/dev/.github/ci/ci-values.yaml
I think it would be good to have a file in the repository root (e.g., CHANGELOG.md
) to keep track of the Helm Chart versions changelog.
I'm thinking about having a CHANGELOG.md
file next to the README.md
that follows the Keep a Changelog structure.
Would be good to have a pipeline useful to push each Helm Chart release to an external repository.
GitHub pipeline that executes a given set of commands to build the package and push it to an external repository for each commit (e.g. merge a PRs) done on main
branch, taking the Chart version from the Chart.yaml:
Line 5 in 42e1a7a
Would be good to add few post-installation notes that are shown when the helm [install|upgrade] ..
command is successful.
We may add some relevant information about the Helm Release inside the NOTES.txt
template.
At the moment, several pre and post deploy helm jobs are implemented as a series of containers running a "curl equipped" docker image that execute a single, hard to read, GET/POST request.
This introduces several fingerprint overhead and makes it difficult to edit or modify the requests themselves.
Moreover, evil escapes
are needed to make a proper curl command into the command
section of a container, for example:
servarr/templates/add-indexers-prowlarr.yaml
Lines 36 to 40 in 8a0aa86
It would be nice to replace this flow entirely with a proper python/easy-to-read language, as already done for the Jellyseerr post init job:
servarr/templates/init-jellyseerr.yaml
Lines 57 to 61 in 8a0aa86
The script can be loaded into a configmap and mounted in the hook job, for example:
servarr/templates/init-jellyseerr.yaml
Lines 62 to 68 in 8a0aa86
I think that by default the ingress class name should be empty, because nginx is not the only one, and could be that the user is using something else (e.g. Traefik).
Line 417 in 8a0aa86
Comment out each IngressClassName
parameter from the values.yaml
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.