Add webhook setup, media seed, and listener start to onboarding (steps 9b-9d)
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
# Step 1: SSH key setup — generate keypair, copy to owner, update conf
|
||||
# Owner completes the rest remotely. Mirror is done.
|
||||
#
|
||||
# OWNER PATH (11 steps)
|
||||
# OWNER PATH (14 steps)
|
||||
# Step 1: SSH key setup — generate keypair, install on mirror, update conf
|
||||
# Step 1b: Docker network — ensure varaverk docker network exists on mirror
|
||||
# Step 1c: Share setup — create missing Unraid shares on mirror (pool-aware, idempotent)
|
||||
@@ -31,6 +31,10 @@
|
||||
# Step 7: Deploy services stack — push Emby/Jellyfin/Seerr XMLs, pull images, create + start
|
||||
# Step 8: Partnership onboard — configure WebUIs → owner IP, write state, Emby
|
||||
# Step 9: Arr bootstrap — bidirectional library sync (arr_sync.sh)
|
||||
# Step 9b: Webhook setup — register download webhook in arrs on both servers
|
||||
# Step 9c: Media seed — rsync all DAILY_SYNC_SHARES to mirror (--seed)
|
||||
# prevents arrs treating every file as missing after bootstrap
|
||||
# Step 9d: Webhook listener — start listener on mirror (runs continuously, no reboot needed)
|
||||
# Step 10: Conf push — push master.conf + setup state to all listed hosts
|
||||
#
|
||||
# ==============================================================================================
|
||||
@@ -143,6 +147,17 @@
|
||||
# Partnership/partnership_onboard.sh --skip-arr-sync
|
||||
# Skip arr library bootstrap (Step 9)
|
||||
#
|
||||
# Partnership/partnership_onboard.sh --skip-webhook-setup
|
||||
# Skip webhook registration in arrs (Step 9b)
|
||||
#
|
||||
# Partnership/partnership_onboard.sh --skip-media-seed
|
||||
# Skip initial media share rsync to mirror (Step 9c)
|
||||
# Use when mirror already has files or you want to seed manually
|
||||
#
|
||||
# Partnership/partnership_onboard.sh --skip-webhook-listener
|
||||
# Skip starting webhook listener on mirror (Step 9d)
|
||||
# Listener will start automatically on next array restart
|
||||
#
|
||||
# Partnership/partnership_onboard.sh --phase1-only
|
||||
# OWNER only: SSH key exchange + conf push. Safe to run before HOST2 has Varaverk.
|
||||
# Writes HOST2_PHASE1_DONE=true to varaverk_setup.db.
|
||||
@@ -168,18 +183,24 @@ SKIP_AUTH_STACK=false
|
||||
SKIP_ARR_STACK=false
|
||||
SKIP_SERVICES_STACK=false
|
||||
SKIP_ARR_SYNC=false
|
||||
SKIP_WEBHOOK_SETUP=false
|
||||
SKIP_MEDIA_SEED=false
|
||||
SKIP_WEBHOOK_LISTENER=false
|
||||
PHASE1_ONLY=false # OWNER: SSH + conf push only (HOST2 not yet installed)
|
||||
PHASE2_ONLY=false # OWNER: containers/arr/onboard only (triggered by HOST2 after it onboards)
|
||||
FILTERED_ARGS=()
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--skip-ssh) SKIP_SSH=true ;;
|
||||
--skip-share-setup) SKIP_SHARE_SETUP=true ;;
|
||||
--skip-auth-stack) SKIP_AUTH_STACK=true ;;
|
||||
--skip-arr-stack) SKIP_ARR_STACK=true ;;
|
||||
--skip-services-stack) SKIP_SERVICES_STACK=true ;;
|
||||
--skip-arr-sync) SKIP_ARR_SYNC=true ;;
|
||||
--skip-ssh) SKIP_SSH=true ;;
|
||||
--skip-share-setup) SKIP_SHARE_SETUP=true ;;
|
||||
--skip-auth-stack) SKIP_AUTH_STACK=true ;;
|
||||
--skip-arr-stack) SKIP_ARR_STACK=true ;;
|
||||
--skip-services-stack) SKIP_SERVICES_STACK=true ;;
|
||||
--skip-arr-sync) SKIP_ARR_SYNC=true ;;
|
||||
--skip-webhook-setup) SKIP_WEBHOOK_SETUP=true ;;
|
||||
--skip-media-seed) SKIP_MEDIA_SEED=true ;;
|
||||
--skip-webhook-listener) SKIP_WEBHOOK_LISTENER=true ;;
|
||||
--phase1-only) PHASE1_ONLY=true ;;
|
||||
--phase2-only) PHASE2_ONLY=true; SKIP_SSH=true ;;
|
||||
*) FILTERED_ARGS+=("$arg") ;;
|
||||
@@ -380,6 +401,10 @@ SERVICES_DEPLOYED=0
|
||||
SERVICES_FAILED=0
|
||||
ONBOARD_OK=false
|
||||
ARR_SYNC_OK=false
|
||||
WEBHOOK_SETUP_OK=false
|
||||
MEDIA_SEED_OK=false
|
||||
MEDIA_SEED_COUNT=0
|
||||
WEBHOOK_LISTENER_OK=false
|
||||
MASTER_PUSH_OK=false
|
||||
|
||||
# ── Step 1: SSH ───────────────────────────────────────────────────────────────────────────────
|
||||
@@ -652,6 +677,90 @@ else
|
||||
warn "Re-run Media/arr_sync.sh once all arr containers are live"
|
||||
fi
|
||||
|
||||
# ── Step 9b: Webhook setup ────────────────────────────────────────────────────────────────────
|
||||
# Register the download webhook in each arr on both servers. Arrs must be running.
|
||||
# webhook_setup.sh handles local + SSH to remote in one call.
|
||||
echo ""
|
||||
echo "━━━ Step 9b — Webhook Setup ━━━"
|
||||
|
||||
_webhook_script="$SCRIPTS_ROOT/Tools/webhook_setup.sh"
|
||||
if [[ "$SKIP_WEBHOOK_SETUP" == true ]]; then
|
||||
warn "Skipping (--skip-webhook-setup)"
|
||||
elif [[ "${WEBHOOK_PORT:-0}" -eq 0 ]]; then
|
||||
warn "WEBHOOK_PORT=0 — webhook disabled, skipping"
|
||||
elif [[ ! -f "$_webhook_script" ]]; then
|
||||
warn "Tools/webhook_setup.sh not found — run manually after onboard"
|
||||
elif [[ "$DRY_RUN" == true ]]; then
|
||||
warn "DRY RUN — would run webhook_setup.sh (local + remote)"
|
||||
WEBHOOK_SETUP_OK=true
|
||||
elif bash "$_webhook_script" "${EXTRA_FLAGS[@]}"; then
|
||||
echo "Webhook setup complete ✅"
|
||||
WEBHOOK_SETUP_OK=true
|
||||
else
|
||||
warn "Webhook setup had errors — run Tools/webhook_setup.sh manually once arrs are settled"
|
||||
fi
|
||||
unset _webhook_script
|
||||
|
||||
# ── Step 9c: Seed media shares on mirror ─────────────────────────────────────────────────────
|
||||
# arr_sync.sh bootstrapped the databases — mirror's arrs now know about all content but
|
||||
# have no files on disk. Without this rsync, every imported item looks missing and arrs
|
||||
# will immediately queue searches. --seed skips the empty-remote guard and does a clean push.
|
||||
echo ""
|
||||
echo "━━━ Step 9c — Media Share Seed ━━━"
|
||||
|
||||
if [[ "$SKIP_MEDIA_SEED" == true ]]; then
|
||||
warn "Skipping (--skip-media-seed)"
|
||||
elif [[ "${#DAILY_SYNC_SHARES[@]}" -eq 0 ]]; then
|
||||
warn "DAILY_SYNC_SHARES empty for $MY_ID — skipping media seed"
|
||||
warn "Configure HOST${MY_ID: -1}_DAILY_SYNC_SHARES in host${MY_ID: -1}.conf and run Rsync/rsync.sh --seed manually"
|
||||
else
|
||||
echo " Seeding ${#DAILY_SYNC_SHARES[@]} share(s) to $MIRROR — this may take a while"
|
||||
_rsync_script="$SCRIPTS_ROOT/Rsync/rsync.sh"
|
||||
_seed_flags=(--seed)
|
||||
[[ "$DRY_RUN" == true ]] && _seed_flags+=(--dry-run)
|
||||
[[ "$LOG_MODE" == true ]] && _seed_flags+=(--log)
|
||||
for _share in "${DAILY_SYNC_SHARES[@]}"; do
|
||||
echo " Seeding: $_share"
|
||||
if bash "$_rsync_script" "$_share" "${_seed_flags[@]}"; then
|
||||
(( MEDIA_SEED_COUNT++ )) || true
|
||||
else
|
||||
warn " Seed failed for $_share — re-run: Rsync/rsync.sh $_share --seed"
|
||||
fi
|
||||
done
|
||||
if [[ "$MEDIA_SEED_COUNT" -gt 0 ]]; then
|
||||
echo "Media seed complete — ${MEDIA_SEED_COUNT}/${#DAILY_SYNC_SHARES[@]} share(s) ✅"
|
||||
MEDIA_SEED_OK=true
|
||||
else
|
||||
warn "Media seed: no shares completed — check errors above"
|
||||
fi
|
||||
unset _rsync_script _seed_flags _share
|
||||
fi
|
||||
|
||||
# ── Step 9d: Start webhook listener on mirror ─────────────────────────────────────────────────
|
||||
# Listener is in ARRAY_START_SCRIPTS so it starts on next boot, but the mirror's array is
|
||||
# already running — kick it now so events are captured immediately after onboard.
|
||||
echo ""
|
||||
echo "━━━ Step 9d — Webhook Listener (Mirror) ━━━"
|
||||
|
||||
_listener_script="$SCRIPTS_ROOT/Media/start_webhook_listener.sh"
|
||||
if [[ "$SKIP_WEBHOOK_LISTENER" == true ]]; then
|
||||
warn "Skipping (--skip-webhook-listener)"
|
||||
elif [[ "${WEBHOOK_PORT:-0}" -eq 0 ]]; then
|
||||
warn "WEBHOOK_PORT=0 — webhook disabled, skipping"
|
||||
elif [[ "$DRY_RUN" == true ]]; then
|
||||
warn "DRY RUN — would start webhook listener on $MIRROR"
|
||||
WEBHOOK_LISTENER_OK=true
|
||||
elif timeout "$SSH_TIMEOUT" ssh -i "$MIRROR_SSH_KEY" \
|
||||
-o ConnectTimeout="$SSH_TIMEOUT" -o BatchMode=yes root@"$MIRROR_IP" \
|
||||
"nohup bash '$_listener_script' > /var/log/varaverk/upgrade_webhook.log 2>&1 & echo started" \
|
||||
2>/dev/null | grep -q started; then
|
||||
echo "Webhook listener started on $MIRROR ✅"
|
||||
WEBHOOK_LISTENER_OK=true
|
||||
else
|
||||
warn "Could not start listener on $MIRROR — it will start automatically on next array restart"
|
||||
fi
|
||||
unset _listener_script
|
||||
|
||||
# ── Step 10: Push master.conf to all listed hosts ─────────────────────────────────────────────
|
||||
# SSH is now established and all partners have the plugin installed.
|
||||
# Push the authoritative master.conf so every listed host is in sync immediately.
|
||||
@@ -701,6 +810,9 @@ echo " Step 6 — Stop services: $(_skip "$SKIP_SERVICES_STACK" "$STEP_ST
|
||||
echo " Step 7 — Services stack: $( [[ "$SKIP_SERVICES_STACK" == true ]] && echo "skipped" || echo "${SERVICES_DEPLOYED} deployed, ${SERVICES_FAILED} failed" )"
|
||||
echo " Step 8 — Onboard: $(_ok "$ONBOARD_OK")"
|
||||
echo " Step 9 — Arr bootstrap: $( [[ "$SKIP_ARR_SYNC" == true || "$ONBOARD_OK" == false ]] && echo "skipped" || echo "$(_ok "$ARR_SYNC_OK")" )"
|
||||
echo " Step 9b — Webhook setup: $(_skip "$SKIP_WEBHOOK_SETUP" "$WEBHOOK_SETUP_OK")"
|
||||
echo " Step 9c — Media seed: $( [[ "$SKIP_MEDIA_SEED" == true ]] && echo "skipped" || echo "${MEDIA_SEED_COUNT}/${#DAILY_SYNC_SHARES[@]} shares $(_ok "$MEDIA_SEED_OK")" )"
|
||||
echo " Step 9d — Webhook listener: $(_skip "$SKIP_WEBHOOK_LISTENER" "$WEBHOOK_LISTENER_OK")"
|
||||
echo " Step 10 — Conf push: $( [[ "$ONBOARD_OK" == false ]] && echo "skipped" || echo "$(_ok "$MASTER_PUSH_OK")" )"
|
||||
echo ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user