add cross-seed to sabz

This commit is contained in:
Joseph Hanson 2024-10-29 17:12:17 -05:00
parent 7283590a5c
commit a56785f067
Signed by: jahanson
SSH key fingerprint: SHA256:vy6dKBECV522aPAwklFM3ReKAVB086rT3oWwiuiFG7o
4 changed files with 161 additions and 8 deletions

View file

@ -13,8 +13,15 @@ spec:
template: template:
engineVersion: v2 engineVersion: v2
data: data:
CROSS_SEED_API_KEY: "{{ .CROSS_SEED_API_KEY }}"
PUSHOVER_TOKEN: "{{ .sabz_token }}"
PUSHOVER_USER_KEY: "{{ .userkey_jahanson }}"
SABNZBD__API_KEY: "{{ .api_key }}" SABNZBD__API_KEY: "{{ .api_key }}"
SABNZBD__NZB_KEY: "{{ .nzb_key }}" SABNZBD__NZB_KEY: "{{ .nzb_key }}"
dataFrom: dataFrom:
- extract:
key: cross-seed
- extract:
key: pushover
- extract: - extract:
key: sabnzbd key: sabnzbd

View file

@ -22,6 +22,11 @@ spec:
remediation: remediation:
retries: 3 retries: 3
strategy: rollback strategy: rollback
dependsOn:
- name: rook-ceph-cluster
namespace: rook-ceph
- name: volsync
namespace: volsync-system
values: values:
controllers: controllers:
sabnzbd: sabnzbd:
@ -43,6 +48,11 @@ spec:
sabnzbd.default.svc.cluster.local, sabnzbd.default.svc.cluster.local,
sabz.jahanson.tech, sabz.jahanson.tech,
sabnzbd.jahanson.tech sabnzbd.jahanson.tech
CROSS_SEED_ENABLED: true
CROSS_SEED_HOST: cross-seed.qbittorrent.svc.cluster.local
CROSS_SEED_PORT: 80
CROSS_SEED_SLEEP_INTERVAL: 30
PUSHOVER_ENABLED: true
envFrom: envFrom:
- secretRef: - secretRef:
name: sabnzbd-secret name: sabnzbd-secret
@ -70,14 +80,15 @@ spec:
cpu: 100m cpu: 100m
limits: limits:
memory: 16Gi memory: 16Gi
pod: defaultPodOptions:
securityContext: securityContext:
runAsNonRoot: true
runAsUser: 568 runAsUser: 568
runAsGroup: 568 runAsGroup: 568
runAsNonRoot: true
fsGroup: 568 fsGroup: 568
fsGroupChangePolicy: OnRootMismatch fsGroupChangePolicy: OnRootMismatch
supplementalGroups: [10000] supplementalGroups: [10000]
seccompProfile: { type: RuntimeDefault }
service: service:
app: app:
controller: sabnzbd controller: sabnzbd
@ -104,6 +115,12 @@ spec:
existingClaim: sabnzbd existingClaim: sabnzbd
tmp: tmp:
type: emptyDir type: emptyDir
scripts:
type: configMap
name: sabnzbd-scripts
defaultMode: 0775
globalMounts:
- readOnly: true
media: media:
type: nfs type: nfs
server: 10.1.1.13 server: 10.1.1.13

View file

@ -6,3 +6,11 @@ resources:
- ./externalsecret.yaml - ./externalsecret.yaml
- ./helmrelease.yaml - ./helmrelease.yaml
- ../../../../templates/volsync - ../../../../templates/volsync
configMapGenerator:
- name: sabnzbd-scripts
files:
- post-process.sh=./resources/post-process.sh
generatorOptions:
disableNameSuffixHash: true
annotations:
kustomize.toolkit.fluxcd.io/substitute: disabled

View file

@ -0,0 +1,121 @@
#!/usr/bin/env bash
# shellcheck disable=SC2154
set -euo pipefail
# User-defined variables
CROSS_SEED_ENABLED="${CROSS_SEED_ENABLED:-false}"
CROSS_SEED_HOST="${CROSS_SEED_HOST:-required}"
CROSS_SEED_PORT="${CROSS_SEED_PORT:-required}"
CROSS_SEED_API_KEY="${CROSS_SEED_API_KEY:-required}"
CROSS_SEED_SLEEP_INTERVAL="${CROSS_SEED_SLEEP_INTERVAL:-30}"
PUSHOVER_ENABLED="${PUSHOVER_ENABLED:-false}"
PUSHOVER_USER_KEY="${PUSHOVER_USER_KEY:-required}"
PUSHOVER_TOKEN="${PUSHOVER_TOKEN:-required}"
# Function to set release variables from SABnzbd
set_sab_vars() {
RELEASE_NAME="${SAB_FILENAME:-}"
RELEASE_DIR="${SAB_COMPLETE_DIR:-}"
RELEASE_CAT="${SAB_CAT:-}"
RELEASE_SIZE="${SAB_BYTES:-}"
RELEASE_STATUS="${SAB_PP_STATUS:-}"
RELEASE_INDEXER="${SAB_URL:-}"
RELEASE_TYPE="NZB"
}
# Function to set release variables from qBittorrent
set_qb_vars() {
RELEASE_NAME="$1" # %N
RELEASE_DIR="$2" # %F
RELEASE_CAT="$3" # %L
RELEASE_SIZE="$4" # %Z
RELEASE_INDEXER="$5" # %T
RELEASE_STATUS=0 # Always 0 for qBittorrent
RELEASE_TYPE="Torrent"
}
# Function to send pushover notification
send_pushover_notification() {
local pushover_message status_code json_data
printf -v pushover_message \
"<b>%s</b><small>\n<b>Category:</b> %s</small><small>\n<b>Indexer:</b> %s</small><small>\n<b>Size:</b> %s</small>" \
"${RELEASE_NAME%.*}" \
"${RELEASE_CAT}" \
"$(trurl --url "${RELEASE_INDEXER}" --get '{idn:host}')" \
"$(numfmt --to iec --format "%8.2f" "${RELEASE_SIZE}")"
json_data=$(jo \
token="${PUSHOVER_TOKEN}" \
user="${PUSHOVER_USER_KEY}" \
title="${RELEASE_TYPE} Downloaded" \
message="${pushover_message}" \
priority="-2" \
html="1"
)
status_code=$(curl \
--silent \
--write-out "%{http_code}" \
--output /dev/null \
--request POST \
--header "Content-Type: application/json" \
--data-binary "${json_data}" \
"https://api.pushover.net/1/messages.json"
)
printf "pushover notification returned with HTTP status code %s and payload: %s\n" \
"${status_code}" \
"$(echo "${json_data}" | jq --compact-output)" >&2
}
# Function to search for cross-seed
search_cross_seed() {
local status_code
status_code=$(curl \
--silent \
--output /dev/null \
--write-out "%{http_code}" \
--request POST \
--data-urlencode "path=${RELEASE_DIR}" \
--header "X-Api-Key: ${CROSS_SEED_API_KEY}" \
"http://${CROSS_SEED_HOST}:${CROSS_SEED_PORT}/api/webhook"
)
printf "cross-seed search returned with HTTP status code %s and path %s\n" \
"${status_code}" \
"${RELEASE_DIR}" >&2
sleep "${CROSS_SEED_SLEEP_INTERVAL}"
}
main() {
# Determine the source and set release variables accordingly
if env | grep -q "^SAB_"; then
set_sab_vars
else
set_qb_vars "$@"
fi
# Check if post-processing was successful
if [[ "${RELEASE_STATUS}" -ne 0 ]]; then
printf "post-processing failed with sabnzbd status code %s\n" \
"${RELEASE_STATUS}" >&2
exit 1
fi
# Update permissions on the release directory
chmod -R 750 "${RELEASE_DIR}"
# Send pushover notification
if [[ "${PUSHOVER_ENABLED}" == "true" ]]; then
send_pushover_notification
fi
# Search for cross-seed
if [[ "${CROSS_SEED_ENABLED}" == "true" ]]; then
search_cross_seed
fi
}
main "$@"