lidarr-empty-folders.yaml 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. ---
  2. apiVersion: batch/v1
  3. kind: CronJob
  4. metadata:
  5. name: lidarr-empty-folders
  6. namespace: plex
  7. spec:
  8. schedule: "*/30 * * * *"
  9. successfulJobsHistoryLimit: 1
  10. failedJobsHistoryLimit: 1
  11. concurrencyPolicy: Forbid
  12. jobTemplate:
  13. spec:
  14. template:
  15. metadata:
  16. labels:
  17. app: lidarr-empty-folders
  18. annotations:
  19. backup.velero.io/backup-volumes-excludes: media
  20. spec:
  21. securityContext:
  22. runAsUser: 1000
  23. runAsGroup: 1000
  24. restartPolicy: OnFailure
  25. containers:
  26. - name: lidarr-empty-folders
  27. image: jibby0/server-python3-requests:3.11-alpine
  28. command:
  29. - /bin/sh
  30. - -c
  31. - python3 /script/lidarr_empty_folders.py $LIDARR_HOST $LIDARR_API_KEY $LIDARR_MUSIC_PATH
  32. env:
  33. - name: LIDARR_HOST
  34. value: https://lidarr.lan.jibby.org
  35. - name: LIDARR_API_KEY
  36. valueFrom:
  37. secretKeyRef:
  38. name: lidarr-empty-folders
  39. key: api-key
  40. - name: LIDARR_MUSIC_PATH
  41. value: /media/Music/
  42. volumeMounts:
  43. - mountPath: "/media"
  44. name: media
  45. - mountPath: /script
  46. name: lidarr-empty-folders
  47. volumes:
  48. - name: media
  49. persistentVolumeClaim:
  50. claimName: plex-pvc
  51. - name: lidarr-empty-folders
  52. configMap:
  53. name: lidarr-empty-folders
  54. items:
  55. - key: lidarr_empty_folders.py
  56. path: lidarr_empty_folders.py
  57. ---
  58. apiVersion: v1
  59. kind: ConfigMap
  60. metadata:
  61. name: lidarr-empty-folders
  62. namespace: plex
  63. data:
  64. lidarr_empty_folders.py: |
  65. import requests
  66. from requests.adapters import HTTPAdapter, Retry
  67. import os
  68. import sys
  69. if len(sys.argv) != 4:
  70. print("One or more args are undefined")
  71. sys.exit(1)
  72. lidarr_server, lidarr_api_key, music_folder = sys.argv[1:4]
  73. retries = Retry(total=10,
  74. backoff_factor=1,
  75. status_forcelist=[ 500, 502, 503, 504 ])
  76. s = requests.Session()
  77. s.mount('http://', HTTPAdapter(max_retries=retries))
  78. resp = s.get(
  79. f"{lidarr_server}/api/v1/artist",
  80. headers={"Authorization": f"Bearer {lidarr_api_key}"}
  81. )
  82. artists = resp.json()
  83. for artist in artists:
  84. artist_name = artist.get("artistName")
  85. artist_path = music_folder + artist_name
  86. if ('/' not in artist_name) and (not os.path.exists(artist_path)):
  87. print("Creating ", artist_path)
  88. os.mkdir(artist_path)