Compare commits

...

2 Commits

Author SHA1 Message Date
gilgamezh deb2901c6f Add Lidarr ArgoCD app and custom chart 2026-01-10 18:31:58 +01:00
gilgamezh 35057c2851 image updater config 2026-01-10 18:31:26 +01:00
12 changed files with 373 additions and 33 deletions
+60
View File
@@ -0,0 +1,60 @@
apiVersion: argocd-image-updater.argoproj.io/v1alpha1
kind: ImageUpdater
metadata:
name: media-image-updater
namespace: argocd
spec:
namespace: argocd
commonUpdateSettings:
updateStrategy: digest
writeBackConfig:
method: argocd
applicationRefs:
- namePattern: transmission
images:
- alias: transmission
imageName: haugene/transmission-openvpn:latest
manifestTargets:
helm:
name: image.repository
tag: image.tag
- namePattern: radarr
images:
- alias: radarr
imageName: ghcr.io/linuxserver/radarr:latest
manifestTargets:
helm:
name: image.repository
tag: image.tag
- namePattern: prowlarr
images:
- alias: prowlarr
imageName: lscr.io/linuxserver/prowlarr:latest
manifestTargets:
helm:
name: image.repository
tag: image.tag
- namePattern: ollama
images:
- alias: ollama
imageName: ollama/ollama:latest
manifestTargets:
helm:
name: image.name
tag: image.tag
- namePattern: plex
images:
- alias: plex
imageName: linuxserver/plex:latest
manifestTargets:
helm:
name: image.repository
tag: image.tag
- namePattern: sonarr
images:
- alias: sonarr
imageName: ghcr.io/linuxserver/sonarr:latest
manifestTargets:
helm:
name: image.repository
tag: image.tag
+26
View File
@@ -0,0 +1,26 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: lidarr
namespace: argocd
annotations:
spec:
project: default
source:
repoURL: http://gitea-http.gitea.svc.cluster.local:3000/admin/turingpi.git
targetRevision: HEAD
path: custom_helm_charts/lidarr
helm:
releaseName: lidarr
valueFiles:
- ../../helm-values/lidarr_values.yaml
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
+21
View File
@@ -0,0 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v1
appVersion: "1.0"
description: Lidarr - Automatic music downloader and manager
name: lidarr
version: 0.1.0
icon: https://lidarr.audio/img/logo.png
Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

@@ -0,0 +1,19 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range .Values.ingress.hosts }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "lidarr.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get svc -w {{ template "lidarr.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "lidarr.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "lidarr.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8686 to use your application"
kubectl port-forward $POD_NAME 8686:{{ .Values.service.port }}
{{- end }}
@@ -0,0 +1,32 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "lidarr.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "lidarr.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "lidarr.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
@@ -0,0 +1,49 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "lidarr.fullname" . }}
labels:
app: {{ template "lidarr.name" . }}
chart: {{ template "lidarr.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ template "lidarr.name" . }}
release: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ template "lidarr.name" . }}
release: {{ .Release.Name }}
spec:
volumes:
{{ toYaml .Values.volumes | indent 6 }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
{{ toYaml .Values.env | indent 12 }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
volumeMounts:
{{ toYaml .Values.volumeMounts | indent 12 }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
@@ -0,0 +1,38 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "lidarr.fullname" . -}}
{{- $ingressPath := .Values.ingress.path -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
app: {{ template "lidarr.name" . }}
chart: {{ template "lidarr.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
{{- with .Values.ingress.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ . }}
http:
paths:
- path: {{ $ingressPath }}
backend:
serviceName: {{ $fullName }}
servicePort: http
{{- end }}
{{- end }}
@@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "lidarr.fullname" . }}
labels:
app: {{ template "lidarr.name" . }}
chart: {{ template "lidarr.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
protocol: TCP
name: http
selector:
app: {{ template "lidarr.name" . }}
release: {{ .Release.Name }}
+72
View File
@@ -0,0 +1,72 @@
replicaCount: 1
image:
repository: ghcr.io/linuxserver/lidarr
tag: latest
pullPolicy: Always
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "Europe/Amsterdam"
- name: LIDARR__POSTGRES_HOST
value: pgsql-postgresql
- name: LIDARR__POSTGRES_PORT
value: "5432"
- name: LIDARR__POSTGRES_USER
value: arr_user
- name: LIDARR__POSTGRES_PASSWORD
value: clavedatabase
- name: LIDARR__POSTGRES_MAIN_DB
value: lidarr_db
- name: LIDARR__POSTGRES_LOG_DB
value: lidarr_db_log
service:
type: ClusterIP
port: 8686
ingress:
enabled: false
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
path: /
hosts:
- lidarr.example.org
tls:
- secretName: lidarr-example-org
hosts:
- lidarr.example.org
volumes:
- name: plex-data
persistentVolumeClaim:
claimName: plex-data
volumeMounts:
- name: plex-data
mountPath: "/config"
subPath: "configs/lidarr"
- name: plex-data
mountPath: "/nfs"
resources:
requests:
memory: 500Mi
cpu: 500m
ephemeral-storage: 50Mi
limits:
memory: 800Mi
cpu: 1000m
ephemeral-storage: 1Gi
nodeSelector: {}
tolerations: []
affinity: {}
+31 -33
View File
@@ -7,32 +7,40 @@ image:
pullPolicy: Always pullPolicy: Always
env: env:
TZ: "Europe/Amsterdam" - name: PUID
PUID: "1000" value: "1000"
PGID: "1000" - name: PGID
LIDARR__POSTGRES_HOST: pgsql-postgresql value: "1000"
LIDARR__POSTGRES_PORT: "5432" - name: TZ
LIDARR__POSTGRES_USER: arr_user value: "Europe/Amsterdam"
LIDARR__POSTGRES_PASSWORD: "clavedatabase" - name: LIDARR__POSTGRES_HOST
LIDARR__POSTGRES_MAIN_DB: lidarr_db value: pgsql-postgresql
LIDARR__POSTGRES_LOG_DB: lidarr_db_log - name: LIDARR__POSTGRES_PORT
value: "5432"
- name: LIDARR__POSTGRES_USER
value: arr_user
- name: LIDARR__POSTGRES_PASSWORD
value: "clavedatabase"
- name: LIDARR__POSTGRES_MAIN_DB
value: lidarr_db
- name: LIDARR__POSTGRES_LOG_DB
value: lidarr_db_log
service: service:
main: type: ClusterIP
type: ClusterIP port: 8686
ports:
http:
port: 8686
persistence: volumes:
config: - name: plex-data
enabled: true persistentVolumeClaim:
existingClaim: plex-data claimName: plex-data
subPath: configs/lidarr
media: volumeMounts:
enabled: true - name: plex-data
existingClaim: plex-data mountPath: "/config"
mountPath: /nfs subPath: "configs/lidarr"
- name: plex-data
mountPath: "/nfs"
resources: resources:
requests: requests:
@@ -43,13 +51,3 @@ resources:
memory: "800Mi" memory: "800Mi"
cpu: "1000m" cpu: "1000m"
ephemeral-storage: "1Gi" ephemeral-storage: "1Gi"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- turing2