-
Notifications
You must be signed in to change notification settings - Fork 0
feat(music-arr): initial template for arr stack for music #71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| apiVersion: apps/v1 | ||
| kind: Deployment | ||
| metadata: | ||
| name: aurral | ||
| namespace: media | ||
| labels: | ||
| app: aurral | ||
| app.kubernetes.io/name: aurral | ||
| spec: | ||
| replicas: 1 | ||
| selector: | ||
| matchLabels: | ||
| app: aurral | ||
| app.kubernetes.io/name: aurral | ||
| template: | ||
| metadata: | ||
| labels: | ||
| app: aurral | ||
| app.kubernetes.io/name: aurral | ||
| spec: | ||
| securityContext: | ||
| runAsUser: 1000 | ||
| runAsGroup: 1000 | ||
| fsGroup: 1000 | ||
| containers: | ||
| - name: aurral | ||
| image: ghcr.io/lklynet/aurral:1.76.3 | ||
| imagePullPolicy: IfNotPresent | ||
| securityContext: | ||
| allowPrivilegeEscalation: false | ||
| ports: | ||
| - containerPort: 8080 | ||
| name: http | ||
| env: | ||
| - name: ADMIN_PASSWORD | ||
| valueFrom: | ||
| secretKeyRef: | ||
| name: aurral-secrets | ||
| key: admin_password | ||
| - name: APP_DOCS_URL | ||
| value: "https://github.com/lklynet/aurral" | ||
| volumeMounts: | ||
| - name: config-data | ||
| mountPath: /config | ||
| - name: media-data | ||
| mountPath: /media | ||
| resources: | ||
| requests: | ||
| memory: "128Mi" | ||
| cpu: "100m" | ||
| limits: | ||
| memory: "512Mi" | ||
| cpu: "500m" | ||
| livenessProbe: | ||
| tcpSocket: | ||
| port: 8080 | ||
| initialDelaySeconds: 60 | ||
| periodSeconds: 30 | ||
| failureThreshold: 3 | ||
| readinessProbe: | ||
| tcpSocket: | ||
| port: 8080 | ||
| initialDelaySeconds: 10 | ||
| periodSeconds: 10 | ||
| failureThreshold: 3 | ||
| volumes: | ||
| - name: config-data | ||
| persistentVolumeClaim: | ||
| claimName: aurral-config | ||
| - name: media-data | ||
| persistentVolumeClaim: | ||
| claimName: media-shared | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| apiVersion: gateway.networking.k8s.io/v1 | ||
| kind: HTTPRoute | ||
| metadata: | ||
| labels: | ||
| app.kubernetes.io/name: aurral | ||
| name: aurral-httproute | ||
| namespace: aurral | ||
| spec: | ||
| hostnames: | ||
| - aurral.${DOMAIN} | ||
| parentRefs: | ||
| - name: traefik-gateway | ||
| namespace: traefik | ||
| sectionName: websecure | ||
| rules: | ||
| - backendRefs: | ||
| - name: aurral | ||
| port: 80 | ||
| matches: | ||
| - path: | ||
| type: PathPrefix | ||
| value: / | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| apiVersion: kustomize.config.k8s.io/v1beta1 | ||
| kind: Kustomization | ||
| resources: | ||
| - namespace.yaml | ||
| - secret-aurral.sops.yaml | ||
| - pvc.yaml | ||
| - deployment.yaml | ||
| - service.yaml | ||
| - httproute.yaml | ||
| metadata: | ||
| name: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| apiVersion: v1 | ||
| kind: Namespace | ||
| metadata: | ||
| name: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| apiVersion: v1 | ||
| kind: PersistentVolumeClaim | ||
| metadata: | ||
| name: aurral-config | ||
| namespace: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral-config | ||
| spec: | ||
| accessModes: | ||
| - ReadWriteMany | ||
| resources: | ||
| requests: | ||
| storage: 5Gi | ||
| storageClassName: nfs-flash | ||
| --- | ||
| apiVersion: v1 | ||
| kind: PersistentVolumeClaim | ||
| metadata: | ||
| name: aurral-media | ||
| namespace: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral-media | ||
| spec: | ||
| accessModes: | ||
| - ReadWriteMany | ||
| resources: | ||
| requests: | ||
| storage: 200Gi | ||
| storageClassName: nfs-spacex | ||
| --- | ||
| apiVersion: v1 | ||
| kind: PersistentVolumeClaim | ||
| metadata: | ||
| name: aurral-storage | ||
| namespace: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral-storage | ||
| spec: | ||
| accessModes: | ||
| - ReadWriteMany | ||
| resources: | ||
| requests: | ||
| storage: 10Gi | ||
| storageClassName: nfs-flash |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| apiVersion: v1 | ||
| kind: Secret | ||
| metadata: | ||
| name: aurral-secrets | ||
| namespace: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral-secrets | ||
| type: Opaque | ||
| stringData: | ||
| # TODO: replace with real secrets and encrypt with sops | ||
| admin_password: "" | ||
| api_key: "" | ||
| sops: | ||
| version: "3.11.0" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| apiVersion: v1 | ||
| kind: Service | ||
| metadata: | ||
| name: aurral | ||
| namespace: aurral | ||
| labels: | ||
| app.kubernetes.io/name: aurral | ||
| spec: | ||
| type: ClusterIP | ||
| ports: | ||
| - name: http | ||
| port: 80 | ||
| targetPort: 8080 | ||
| protocol: TCP | ||
| selector: | ||
| app: aurral | ||
| app.kubernetes.io/name: aurral |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| apiVersion: helm.toolkit.fluxcd.io/v2 | ||
| kind: HelmRelease | ||
| metadata: | ||
| name: flaresolverr | ||
| namespace: flaresolverr | ||
| labels: | ||
| app.kubernetes.io/name: flaresolverr | ||
| spec: | ||
| interval: 1h | ||
| chart: | ||
| spec: | ||
| chart: ./charts/flaresolverr | ||
| sourceRef: | ||
| kind: GitRepository | ||
| name: media-servarr | ||
| namespace: flux-system | ||
| targetNamespace: flaresolverr | ||
| values: | ||
| podSecurityContext: | ||
| fsGroup: 1000 | ||
| securityContext: | ||
| runAsUser: 1000 | ||
| resources: | ||
| requests: | ||
| cpu: "50m" | ||
| memory: "64Mi" | ||
| limits: | ||
| cpu: "250m" | ||
| memory: "256Mi" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| apiVersion: gateway.networking.k8s.io/v1 | ||
| kind: HTTPRoute | ||
| metadata: | ||
| name: flaresolverr-httproute | ||
| namespace: flaresolverr | ||
| labels: | ||
| app.kubernetes.io/name: flaresolverr | ||
| spec: | ||
| hostnames: | ||
| - "flaresolverr.${DOMAIN}" | ||
| parentRefs: | ||
| - name: traefik-gateway | ||
| namespace: traefik | ||
| sectionName: websecure | ||
| rules: | ||
| - matches: | ||
| - path: | ||
| type: PathPrefix | ||
| value: / | ||
| backendRefs: | ||
| - name: flaresolverr | ||
| port: 8191 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| apiVersion: kustomize.config.k8s.io/v1beta1 | ||
| kind: Kustomization | ||
| resources: | ||
| - namespace.yaml | ||
| - helm-release.yaml | ||
| - secret-flaresolverr.sops.yaml | ||
| - httproute.yaml | ||
| metadata: | ||
| name: flaresolverr | ||
| labels: | ||
| app.kubernetes.io/name: flaresolverr |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| apiVersion: v1 | ||
| kind: Namespace | ||
| metadata: | ||
| name: flaresolverr | ||
| labels: | ||
| app.kubernetes.io/name: flaresolverr |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| apiVersion: v1 | ||
| kind: Secret | ||
| metadata: | ||
| name: flaresolverr-secrets | ||
| namespace: flaresolverr | ||
| labels: | ||
| app.kubernetes.io/name: flaresolverr-secrets | ||
| type: Opaque | ||
| stringData: | ||
| # TODO: encrypt with sops | ||
| api_key: "" | ||
| sops: | ||
| version: "3.11.0" | ||
|
Comment on lines
+9
to
+13
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Secret is not properly encrypted with SOPS. The 🔐 How to encrypt with SOPSAfter filling in the sops --encrypt --in-place apps/flaresolverr/secret-flaresolverr.sops.yamlEnsure your As per coding guidelines: "Review Kubernetes manifests for correctness, security (no hardcoded secrets, proper RBAC), and best practices." 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| apiVersion: helm.toolkit.fluxcd.io/v2 | ||
| kind: HelmRelease | ||
| metadata: | ||
| name: jellyfin | ||
| namespace: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin | ||
| spec: | ||
| interval: 1h | ||
| chart: | ||
| spec: | ||
| chart: ./charts/jellyfin | ||
| sourceRef: | ||
| kind: GitRepository | ||
| name: media-servarr | ||
| namespace: flux-system | ||
| targetNamespace: jellyfin | ||
| values: | ||
| podSecurityContext: | ||
| fsGroup: 1000 | ||
| securityContext: | ||
| runAsUser: 1000 | ||
| persistence: | ||
| config: | ||
| enabled: true | ||
| existingClaim: jellyfin-config | ||
| media: | ||
| enabled: true | ||
| existingClaim: jellyfin-media | ||
| # transcode/cache: consider emptyDir for performance, or create a small fast PVC | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Align the trailing comment indentation to satisfy yamllint. Line 30 is flagged by CI ( 🧰 Tools🪛 GitHub Actions: Validate Flux Manifests / 3_YAML Lint.txt[warning] 30-30: yamllint: comment not indented like content (comments-indentation) 🪛 GitHub Actions: Validate Flux Manifests / YAML Lint[warning] 30-30: Yamllint warning: comment not indented like content (comments-indentation) 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| apiVersion: gateway.networking.k8s.io/v1 | ||
| kind: HTTPRoute | ||
| metadata: | ||
| name: jellyfin-httproute | ||
| namespace: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin | ||
| spec: | ||
| hostnames: | ||
| - "jellyfin.${DOMAIN}" | ||
| parentRefs: | ||
| - name: traefik-gateway | ||
| namespace: traefik | ||
| sectionName: websecure | ||
| rules: | ||
| - matches: | ||
| - path: | ||
| type: PathPrefix | ||
| value: / | ||
| backendRefs: | ||
| - name: jellyfin | ||
| port: 8096 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| apiVersion: kustomize.config.k8s.io/v1beta1 | ||
| kind: Kustomization | ||
| resources: | ||
| - namespace.yaml | ||
| - helm-release.yaml | ||
| - pvc.yaml | ||
| - secret-jellyfin.sops.yaml | ||
| - httproute.yaml | ||
| metadata: | ||
| name: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| apiVersion: v1 | ||
| kind: Namespace | ||
| metadata: | ||
| name: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| apiVersion: v1 | ||
| kind: PersistentVolumeClaim | ||
| metadata: | ||
| name: jellyfin-config | ||
| namespace: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin-config | ||
| spec: | ||
| accessModes: | ||
| - ReadWriteMany | ||
| resources: | ||
| requests: | ||
| storage: 5Gi | ||
| storageClassName: nfs-flash | ||
| # Use `nfs-flash` for small config/DB-like storage. | ||
| --- | ||
| apiVersion: v1 | ||
| kind: PersistentVolumeClaim | ||
| metadata: | ||
| name: jellyfin-media | ||
| namespace: jellyfin | ||
| labels: | ||
| app.kubernetes.io/name: jellyfin-media | ||
| spec: | ||
| accessModes: | ||
| - ReadWriteMany | ||
| resources: | ||
| requests: | ||
| storage: 500Gi | ||
| storageClassName: nfs-spacex | ||
| # Use `nfs-spacex` for large media libraries. | ||
| # For transcodes/cache prefer an `emptyDir` or a small fast PVC; persistent transcode | ||
| # state is optional and may be slower on NFS. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix invalid indentation in
volumeMounts(build-blocking YAML syntax error).Line 44 and Line 45 are misindented, which causes the parser failure reported in CI and prevents Flux/Kustomize from building this app.
Proposed fix
As per coding guidelines, "
apps/**: This is a Kubernetes (Talos) GitOps repository managed by Flux CD. Review Kubernetes manifests for correctness, security (no hardcoded secrets, proper RBAC), and best practices."📝 Committable suggestion
🧰 Tools
🪛 GitHub Actions: Validate Flux Manifests / 1_Kustomize Build (apps).txt
[error] 44-44: kustomize build failed with MalformedYAMLError: yaml: line 44: mapping values are not allowed in this context while accumulating resources from 'aurral'.
🪛 GitHub Actions: Validate Flux Manifests / 3_YAML Lint.txt
[error] 44-44: yamllint: syntax error: mapping values are not allowed here (syntax)
🪛 GitHub Actions: Validate Flux Manifests / Kustomize Build (apps)
[error] 44-44: Kustomize build failed with MalformedYAMLError: yaml: line 44: mapping values are not allowed in this context (while accumulating resources).
🪛 GitHub Actions: Validate Flux Manifests / YAML Lint
[error] 44-44: Yamllint failed with syntax error: mapping values are not allowed here (syntax)
🤖 Prompt for AI Agents