k8s-mediaserver-operator icon indicating copy to clipboard operation
k8s-mediaserver-operator copied to clipboard

Add support for prowlarr

Open Rahulsharma0810 opened this issue 3 years ago • 2 comments

prowlarr is a better alternative compared with jackett. https://hub.docker.com/r/linuxserver/prowlarr have already identical configuration container image.

Rahulsharma0810 avatar Sep 16 '22 08:09 Rahulsharma0810

this sounds interesting @Rahulsharma0810, did you have the chance to test it in your environment?

kubealex avatar Sep 17 '22 10:09 kubealex

not from k8s manifests however from their docker command references working fine.

Rahulsharma0810 avatar Sep 19 '22 07:09 Rahulsharma0810

I've implemented this. It was rather simple:

Add this to your values.yaml

...
prowlarr:
  enabled: true
  container: 
    nodeSelector: {}
    port: 9696
    image_tag: develop
  service:
    type: ClusterIP
    port: 9696
    nodePort: 
    extraLBService: true
  ingress:
    enabled: true
    annotations: {}
    path: /prowlarr
    tls:
      enabled: false
      secretName: ""
  resources: {}
...

prowlarr-resources.yaml

{{ if .Values.prowlarr.enabled }}
---
### CONFIGMAPS
## INIT-CONTAINER
apiVersion: v1
data:
  config.xml: |
    <Config>
      <UrlBase>{{ .Values.prowlarr.ingress.path }}</UrlBase>
    </Config>
  init-prowlarr.sh: |
    #!/bin/bash
    echo "### Initializing config ###"
    if [ ! -f /prowlarr-config/config.xml ]; then
      cp -n /init-prowlarr/config.xml /prowlarr-config/config.xml
      echo "### No configuration found, intialized with default settings ###"
    fi
kind: ConfigMap
metadata:
  name: init-prowlarr-cm
---
## APPLICATION
apiVersion: v1
kind: ConfigMap
metadata:
  name: prowlarr-config
data:
  PGID: "{{ .Values.general.pgid }}"
  PUID: "{{ .Values.general.puid }}"
---
### DEPLOYMENT
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prowlarr
  labels:
    {{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
  replicas: 1
  selector:
    matchLabels:
      {{- include "k8s-mediaserver.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "k8s-mediaserver.selectorLabels" . | nindent 8 }}
        app: prowlarr
    spec:
      initContainers:
        - name: config-prowlarr
          image: docker.io/ubuntu:groovy
          command: ["/init-prowlarr/init-prowlarr.sh"]
          volumeMounts:
            - mountPath: /init-prowlarr
              name: init-files-prowlarr
            - mountPath: /prowlarr-config
              name: mediaserver-volume
              subPath: "{{ .Values.general.storage.subPaths.config }}/prowlarr"
          securityContext:
            runAsUser: {{ .Values.general.puid }}
            runAsGroup: {{ .Values.general.pgid }}
      containers:
        - name: {{ .Chart.Name }}
          envFrom:
            - configMapRef:
                name: prowlarr-config
          image: lscr.io/linuxserver/prowlarr:{{ .Values.prowlarr.container.image_tag }}
          imagePullPolicy: Always
          readinessProbe:
            tcpSocket:
              port: {{ .Values.prowlarr.container.port }}
            initialDelaySeconds: 10
            periodSeconds: 20
          ports:
            - name: prowlarr-port
              containerPort: {{ .Values.prowlarr.container.port }}
              protocol: TCP
          volumeMounts:
            - name: mediaserver-volume
              mountPath: "/config"
              subPath: "{{ .Values.general.storage.subPaths.config }}/prowlarr"
          {{- with .Values.prowlarr.resources }}
          resources:
            {{- toYaml . | nindent 12 }}
          {{- end }}
      volumes:
        {{ if not .Values.general.storage.customVolume }}
        - name: mediaserver-volume
          persistentVolumeClaim:
            claimName: {{ .Values.general.storage.pvcName }}
        {{ else }}
        - name: mediaserver-volume
          {{- toYaml .Values.general.storage.volumes | nindent 10 }}
        {{ end }}
        - name: init-files-prowlarr
          configMap:
            defaultMode: 493
            name: init-prowlarr-cm
      {{- with .Values.general.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
---
### SERVICES
apiVersion: v1
kind: Service
metadata:
  name: prowlarr
  labels:
    {{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
  type: {{ .Values.prowlarr.service.type }}
  ports:
    - port: {{ .Values.prowlarr.service.port }}
      targetPort: {{ .Values.prowlarr.container.port }}
      protocol: TCP
{{ if eq .Values.prowlarr.service.type "NodePort" }}
      nodePort: {{ .Values.prowlarr.service.nodePort }}
{{ end }}
      name: prowlarr-port
  selector:
    app: prowlarr

---
{{ if .Values.prowlarr.service.extraLBService }}
apiVersion: v1
kind: Service
metadata:
  name: prowlarr-lb
  annotations:
    service.beta.kubernetes.io/azure-dns-label-name: prowlarr-fds-mediaserver-v2
  labels:
    {{- include "k8s-mediaserver.labels" . | nindent 4 }}
spec:
  type: LoadBalancer
  ports:
    - port: {{ .Values.prowlarr.service.port }}
      targetPort: {{ .Values.prowlarr.container.port }}
      protocol: TCP
      name: prowlarr-port
  selector:
    app: prowlarr
{{ end }}
---
### INGRESS ###
{{ if .Values.prowlarr.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prowlarr
  labels:
    {{- include "k8s-mediaserver.labels" . | nindent 4 }}
  {{- with .Values.prowlarr.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
{{ if .Values.prowlarr.ingress.tls.enabled }}
  tls:
    - hosts:
        - {{ .Values.general.ingress_host | quote }}
      secretName: {{ .Values.prowlarr.ingress.tls.secretName }}
{{ end }}     
  ingressClassName: {{ .Values.general.ingress.ingressClassName }}
  rules:
    - host: {{ .Values.general.ingress_host | quote }}
      http:
        paths:
          - path: {{ .Values.prowlarr.ingress.path }}
            pathType: Prefix
            backend:
              service:
                name: prowlarr
                port:
                  number: {{ .Values.prowlarr.service.port }}
{{ end }}     
{{ end }}

dsfrederic avatar Oct 16 '22 19:10 dsfrederic

I'll add this one and do the config for the custom volume after we're done with #39 and #28

Should be pretty straightforward since @dsfrederic has already done the heavy lifting

InputObject2 avatar Nov 13 '22 00:11 InputObject2