# ServiceDefinition: radarr # Source of truth: spec docs/13-service-catalog.md row 3; docs/15-identity-and-access.md; docs/03. # internal | egress VPN (+ kill-switch) | config on Longhorn | auth forward-auth | arr→downloaders. # Radarr (movies) scrapes indexers and hands releases to the download client; both of those hops leave # the cluster over the shared PIA/WireGuard egress gateway (egress: vpn, ADR-0015; R-NET-05/06), and # the intra-cluster hops to qbittorrent/jackett are EXPLICIT east-west allows on top of default-deny # (R-NET-01/02). Validates against schemas/servicedefinition.schema.json. name: radarr kind: container source: image: lscr.io/linuxserver/radarr:5.21.1 # pinned stable v5 tag (R-UPD-01); update.range governs advancement exposure: internal # LAN-only web UI at radarr.home.keithjackson.dev (docs/13 row 3; R-DNS/R-NET) egress: vpn # indexer scrape + downloader handoff steered via the shared VPN egress gateway, # kill-switch enforced OUTSIDE the workload (docs/03; ADR-0015; R-NET-05/06) storage: - name: config size: 5Gi class: longhorn # app DB / config on the 3-replica tier; DR-critical (docs/04; R-STATE-02) # NOTE (bulk-media PREREQUISITE): docs/13 row 3 places the media library / downloads volume on the # `bulk` tier (docs/04 bulk storage). The `bulk` StorageClass exists (platform/longhorn/storageclasses.yaml) # but is a NON-provisioning STUB pending OQ-2 (NFS/SMB backing = REPLACE-ME). Adding a `class: bulk` # volume now would leave the PVC (and therefore the pod) Pending. The media/downloads volume is # therefore DEFERRED until OQ-2 is resolved; config-only on longhorn keeps Radarr deployable today. dependencies: - to: qbittorrent # arr → download client (docs/13 dependency graph; R-NET-02 explicit allow) port: 8080 protocol: tcp - to: jackett # arr → indexer proxy (docs/13 dependency graph; R-NET-02 explicit allow) port: 9117 protocol: tcp ingressRoutes: - host: radarr.home.keithjackson.dev port: 7878 # Radarr web/API; TLS terminates at the shared Gateway (docs/08, docs/09) auth: mode: forward-auth # bare UI, no usable OIDC: oauth2-proxy → Keycloak at the Gateway (docs/15; R-IDP-02) groups: - media-users # authenticated AND in the media group (R-IDP-06) update: channel: stable # R-UPD-01 range: ">=5.0.0 <6.0.0" # stay on the Radarr v5 stable line cadence: "0 4 * * *" autoRollbackOnFailedHealth: true # R-UPD-03 observability: metrics: true slis: - up # arr down => alert (docs/10; R-OBS-01) backup: policy: daily-offcluster # Radarr config/DB is irreplaceable, backed up off-cluster (docs/04; R-STATE-03)