1	#!/bin/bash
2	# ==============================================================================================
3	# ========================== HOSTN CONFIGURATION — (hostname) ==================================
4	# ==============================================================================================
5	# HOSTN-specific variables — credentials, container names, share paths, failover lists.
6	# Sourced after master.conf — values here extend shared profile arrays and add HOSTN-specific
7	# identity, credentials, and container configuration.
8	#
9	# Sparse checkout (git) ensures other hosts never receive this file.
10	#
11	# DO NOT put shared config here — thresholds, toggles, profiles belong in master.conf.
12	# DO NOT put other hosts' variables here — they belong in their own host*.conf files.
13	#
14	# ── HOW TO USE THIS TEMPLATE ──────────────────────────────────────────────────────────────────
15	# This file was generated by the Varaverk first-run wizard.
16	# Fill in the sections that apply to your setup — leave unused sections empty.
17	# All scripts self-guard against empty values — safe to leave sections blank until needed.
18	#
19	# ── INDEX ─────────────────────────────────────────────────────────────────────────────────────
20	#
21	#   ── IDENTITY & CONNECTIVITY ────────────────────────────────────────────────────────────────
22	#   IDENTITY                hostname, SSH key, Unraid API key
23	#   EMBY                    container name, URL, API key
24	#   JELLYFIN                container name, URL, API key
25	#   GITEA                   API token for SSH key registration
26	#   NOTIFICATIONS           Discord webhook
27	#
28	#   ── PARTNERSHIP ────────────────────────────────────────────────────────────────────────────
29	#   PARTNERSHIP             auth containers, backup paths, emby provisioning
30	#
31	#   ── RSYNC ──────────────────────────────────────────────────────────────────────────────────
32	#   DAILY SYNC SHARES       media shares this host owns and pushes
33	#   PERSONAL SHARES         private encrypted shares for offsite backup
34	#   WEEKLY SYNC SHARES      appdata shares synced weekly
35	#   INTERMEDIATE SYNC       mid-day appdata propagation
36	#   CRITICAL SYNC SHARES    appdata shares synced every 30 minutes
37	#   BACKUP VERIFY           shares for checksum verification against remote
38	#   HOSTN RSYNC PROFILE     host-specific appdata sync profile
39	#
40	#   ── FALLBACK ───────────────────────────────────────────────────────────────────────────────
41	#   DDNS                    DDNS containers managed by this host
42	#   INTERNET LOSS           containers stopped when internet is lost
43	#   FALLBACK TIERS          what this host runs for the remote per tier
44	#   TIER DELAYS             delays before each tier activates
45	#   RSYNC WRITEBACK         appdata synced back on handback
46	#
47	#   ── DOCKER ─────────────────────────────────────────────────────────────────────────────────
48	#   DOCKER DAILY RESTART    containers restarted daily
49	#   DOCKER WEEKLY RESTART   containers restarted weekly
50	#   DOCKER WATCHDOG         memory limits, health URLs, required containers
51	#   NETWORK WATCHDOG        DDNS domain, NPM URL for connectivity checks
52	#   DOCKER NETWORK CONNECT  networks and containers for array start
53	#
54	#   ── MEDIA ──────────────────────────────────────────────────────────────────────────────────
55	#   MEDIA PERMISSIONS       share list for permissions script
56	#   MEDIA CLEANER           folder lists for media_cleaner.sh
57	#
58	#   ── ARR STACK ──────────────────────────────────────────────────────────────────────────────
59	#   DOWNLOADERS             slskd, SABnzbd, qBittorrent credentials and URLs
60	#   LIDARR / SONARR / RADARR  URL, API key, path map
61	#   ARR RECOVERY            per-arr recovery toggles
62	#
63	#   ── TRANSCODES ─────────────────────────────────────────────────────────────────────────────
64	#   TRANSCODES              ramdisk size, thresholds, SSD path, server array
65	#
66	#   ── MONITORS ───────────────────────────────────────────────────────────────────────────────
67	#   CERTIFICATE MONITOR     domains checked for SSL expiry
68	#   SMART HEALTH            drives to skip in SMART monitoring
69	#   ZFS REPORT              pools to exclude from ZFS health report
70	#
71	#   ── RESOURCE MANAGER ───────────────────────────────────────────────────────────────────────
72	#   RESOURCE MANAGER        containers paused/stopped under memory pressure
73	#
74	#   ── SYSTEM WATCHDOG ────────────────────────────────────────────────────────────────────────
75	#   SYSTEM WATCHDOG         per-host check toggles and NIC configuration
76	#
77	# ==============================================================================================
78
79	# ==============================================================================================
80	# ── STORAGE MODE ──────────────────────────────────────────────────────────────────────────────
81	# ==============================================================================================
82
83	# ━━━ Storage mode ━━━
84	# Controls where Varaverk stores scripts, conf, and state files.
85	# true  = internal NVMe/SSD — /boot/config/plugins/varaverk  (write-safe, git-direct)
86	# false = USB flash boot    — /mnt/user/appdata/Varaverk      (preserves flash lifetime)
87	# Auto-detected from boot device transport on first setup.
88	# To change: Settings → Storage → Migrate.
89	    HOSTN_STORAGE_MODE_INTERNAL=true
90
91	# ==============================================================================================
92	# ── IDENTITY & CONNECTIVITY ───────────────────────────────────────────────────────────────────
93	# ==============================================================================================
94
95	# ━━━ Identity ━━━
96	# HOSTN hostname lives in master.conf (not a credential — safe for all servers).
97	# SSH key used for all server-to-server operations — rsync, failover, conf sync.
98	# Convention: /root/.ssh/<hostname-lowercase-no-unraid-prefix>_rsync_automation
99	# Must be in /root/.ssh/ and authorised in the partner's /root/.ssh/authorized_keys.
100	# Run Partnership/ssh_setup.sh to generate the key and copy it to the partner.
101	    HOSTN_SSH_KEY=""    # e.g. /root/.ssh/myserver_rsync_automation
102	    HOSTN_OWNER=""      # short identifier for this server (e.g. myserver)
103	    HOSTN_OWNER_EMAIL=""
104
105	# ━━━ Unraid API ━━━
106	# Used by the Varaverk plugin to query this server's Unraid GraphQL API.
107	# Generate in Unraid: Settings → Management Access → API Keys → + New Key
108	    HOSTN_UNRAID_API_KEY=""
109
110	# ━━━ Emby ━━━
111	    HOSTN_EMBY_CONTAINER="Emby"
112	    HOSTN_EMBY_URL="http://localhost:8096"
113	    HOSTN_EMBY_API_KEY=""   # Emby Dashboard → API Keys → + New Key
114
115	# ━━━ Jellyfin ━━━
116	    HOSTN_JELLYFIN_CONTAINER="Jellyfin"
117	    HOSTN_JELLYFIN_URL="http://localhost:8095"
118	    HOSTN_JELLYFIN_API_KEY=""   # Jellyfin Dashboard → Administration → API Keys
119
120	# ━━━ Gitea ━━━
121	# Personal access token for gitea_ssh_setup.sh.
122	# Create in Gitea: Settings → Applications → Generate Token → scope: write:user
123	    HOSTN_GITEA_API_TOKEN=""
124
125	# ━━━ Notifications ━━━
126	# Discord webhook — leave blank to disable.
127	    HOSTN_DISCORD_WEBHOOK=""
128
129	# ==============================================================================================
130	# ── PARTNERSHIP ───────────────────────────────────────────────────────────────────────────────
131	# ==============================================================================================
132
133	# Auth containers reconfigured on onboard/offboard.
134	# Format: "ContainerName|WebUIPort"
135	    HOSTN_PARTNERSHIP_AUTH_WEBUIS=(
136	        # "NginxProxyManager|81"
137	        # "Authelia|9091"
138	    )
139
140	# XML templates pushed to mirror during onboard — auth stack.
141	# Dependencies (databases) must come before apps that depend on them.
142	    HOSTN_PARTNERSHIP_AUTH_STACK=(
143	        # "my-Authelia.xml"
144	        # "my-NginxProxyManager.xml"
145	    )
146
147	# XML templates pushed to mirror during onboard — arr stack.
148	    HOSTN_PARTNERSHIP_ARR_STACK=(
149	        # "my-Sonarr.xml"
150	        # "my-Radarr.xml"
151	    )
152
153	# Paths the partner should collect during the grace window after offboard.
154	    HOSTN_PARTNERSHIP_MIRROR_BACKUPS=(
155	        # "/mnt/user/appdata-Fallback/Partner-Emby"
156	    )
157
158	# Containers parked on this server when partnership is active.
159	    HOSTN_PARTNERSHIP_OWN_CONTAINERS=(
160	        # "Emby"
161	    )
162
163	# Emby admin provisioning — owner controls whether Emby is shared.
164	    HOSTN_PARTNERSHIP_PROVISION_EMBY_ADMIN=false
165	    HOSTN_PARTNERSHIP_EMBY_PORT=8096
166	    HOSTN_PARTNERSHIP_EMBY_ADMIN_USER=""
167	    HOSTN_PARTNERSHIP_EMBY_ADMIN_PASS=""
168
169	# ==============================================================================================
170	# ── RSYNC ─────────────────────────────────────────────────────────────────────────────────────
171	# ==============================================================================================
172
173	# ━━━ Daily Sync Shares ━━━
174	# Media shares this host pushes to all other nodes every night.
175	# Uses DEFAULT_RSYNC_OPTS from master.conf — no profile needed.
176	    HOSTN_DAILY_SYNC_SHARES=(
177	        # /mnt/user/Movies
178	        # /mnt/user/Tv_Shows
179	        # /mnt/user/Music
180	    )
181
182	# ━━━ Personal Shares ━━━
183	# Private encrypted shares synced for offsite backup, independent of media shares.
184	    HOSTN_PERSONAL_SHARES=(
185	        # /mnt/user/Personal     # e.g. ZFS-encrypted dataset
186	    )
187
188	# ━━━ Weekly Sync Shares ━━━
189	# Appdata shares synced during the weekly maintenance window.
190	# Profiles (emby, critical-data) drive container stops — define in master.conf.
191	    HOSTN_WEEKLY_SYNC_SHARES=(
192	        # "/mnt/user/Media_Server/Emby"              # emby profile
193	        # "/mnt/user/appdata-Fallback/Critical-Data" # critical-data profile
194	    )
195
196	# ━━━ Intermediate Sync Shares ━━━
197	# Shares synced every 4 hours. Leave empty to skip mid-day rsync.
198	    HOSTN_INTERMEDIATE_SYNC_SHARES=(
199	        # Add shares here to enable mid-day rsync
200	    )
201
202	# ━━━ Critical Sync Shares ━━━
203	# Appdata shares synced every 30 minutes.
204	# Format: "/path/to/share" or "/path/to/share|profile-name"
205	    HOSTN_CRITICAL_SYNC_SHARES=(
206	        # "/mnt/user/appdata-Fallback/Critical-Data|critical-fallback"
207	        # "/mnt/user/Media_Server/Emby|emby-fallback"
208	    )
209
210	# ━━━ Backup Verify ━━━
211	# Leave empty to use HOSTN_DAILY_SYNC_SHARES automatically.
212	    HOSTN_BACKUP_VERIFY_SHARES=(
213	        # leave empty to use HOSTN_DAILY_SYNC_SHARES automatically
214	    )
215
216	# ━━━ HOSTN Rsync Profile — hostn-appdata ━━━
217	# Host-specific appdata sync profile.
218	    PROFILE_RSYNC_OPTS[hostn-appdata]="-av --info=progress2 --bwlimit=${PROFILE_BW_LIMIT[hostn-appdata]:-8000}"
219	    PROFILE_BW_LIMIT[hostn-appdata]=8000
220	    PROFILE_RETRY_COUNT[hostn-appdata]=3
221	    PROFILE_SLEEP[hostn-appdata]=300
222	    PROFILE_CRITICAL_CONTAINER_NAMES[hostn-appdata]=""
223	    PROFILE_DELAYED_CONTAINERS[hostn-appdata]=""
224	    PROFILE_CONTAINER_DELAY[hostn-appdata]=5
225	    PROFILE_EXCLUDE_DIRS[hostn-appdata]="logs *.tmp"
226
227	# ==============================================================================================
228	# ── FALLBACK ──────────────────────────────────────────────────────────────────────────────────
229	# ==============================================================================================
230
231	# ━━━ DDNS ━━━
232	# DDNS containers this host manages.
233	    HOSTN_DDNS_CONTAINERS=(
234	        # "MyServer.com"
235	    )
236
237	# ━━━ Internet Loss ━━━
238	# Containers stopped immediately when internet is lost.
239	    FALLBACK_HOSTN_STOP_ON_NO_NET=(
240	        # "MyServer.com"
241	    )
242
243	# ━━━ Fallback Tiers — HOSTN Runs for Partner ━━━
244	# Containers this host starts when the partner goes down.
245	# Replace REMOTE_ID below with the actual remote host ID (HOST1, HOST2, etc.)
246	    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER1=(
247	        # "Partner-DDNS-Container"
248	    )
249
250	    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER2=(
251	        # "container-placeholder"
252	    )
253
254	    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER3=(
255	        # "container-placeholder"
256	    )
257
258	    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER4=(
259	        # "container-placeholder"
260	    )
261
262	# ━━━ Tier Delays — Partner's Containers on this Host ━━━
263	# How long the partner must be down before each tier activates here — in minutes.
264	# Replace REMOTE_ID with the actual remote host ID (HOST1, HOST2, etc.)
265	    REMOTE_ID_TIER2_DELAY=240           # 4 hours
266	    REMOTE_ID_TIER3_DELAY=720           # 12 hours
267	    REMOTE_ID_TIER4_DELAY=1440          # 24 hours
268
269	# ━━━ Rsync Writeback ━━━
270	    HOSTN_TIER1_WRITEBACK_DELAY=60      # skip Emby writeback if outage under 1hr
271
272	    FALLBACK_HOSTN_WRITEBACK_TIER1=(
273	        # "/mnt/user/Media_Server/Emby"
274	    )
275
276	    FALLBACK_HOSTN_WRITEBACK_TIER2=(
277	        # "/mnt/user/appdata-Fallback/Important-Data"
278	    )
279
280	    FALLBACK_HOSTN_WRITEBACK_TIER3=(
281	        # "location-placeholder"
282	    )
283
284	    FALLBACK_HOSTN_WRITEBACK_TIER4=(
285	        # "/mnt/user/appdata-Fallback/Arrs_Stack"
286	    )
287
288	# ==============================================================================================
289	# ── DOCKER ────────────────────────────────────────────────────────────────────────────────────
290	# ==============================================================================================
291
292	# ━━━ Docker Daily Restart ━━━
293	    HOSTN_DAILY_RESTART_CONTAINERS=(
294	        # "NginxProxyManager"
295	        # "Authelia"
296	    )
297
298	# ━━━ Docker Weekly Restart ━━━
299	    HOSTN_WEEKLY_RESTART_CONTAINERS=(
300	        # "NextCloud"
301	        # "AdGuard-Home"
302	    )
303
304	# ━━━ Docker Watchdog ━━━
305
306	# Memory hard limits in MB — immediate restart if exceeded.
307	# 20GB=20480  16GB=16384  8GB=8192  4GB=4096  2GB=2048  1GB=1024
308	    declare -A HOSTN_WATCHDOG_CONTAINERS=(
309	        # ["Emby"]=18432
310	    )
311
312	# HTTP health check URLs — checked every cycle.
313	    declare -A HOSTN_WATCHDOG_CONTAINER_URLS=(
314	        # ["Emby"]="http://localhost:8096"
315	    )
316
317	# Required containers — must always be running.
318	    HOSTN_WATCHDOG_REQUIRED_CONTAINERS=(
319	        # "NginxProxyManager"
320	        # "Authelia"
321	    )
322
323	# Containers to skip in Tier 2 global scan.
324	    HOSTN_WATCHDOG_SCAN_IGNORE=(
325	        # "my-occasional-container"
326	    )
327
328	# Dependency ordering — skip restarting a container if its dependency is also down.
329	    declare -A HOSTN_WATCHDOG_DEPENDENCIES=(
330	        # ["Authelia"]="Mariadb Redis-Authelia"
331	    )
332
333	# Per-container appdata growth suppress ceilings in MB.
334	    declare -A HOSTN_WATCHDOG_APPDATA_SIZES=(
335	        # ["Tdarr"]="25600"
336	    )
337
338	# ━━━ Network Watchdog ━━━
339	    HOSTN_NETWORK_WATCHDOG_DDNS_DOMAIN=""       # e.g. myserver.com
340	    HOSTN_NETWORK_WATCHDOG_DDNS_CONTAINER=""    # e.g. MyServer.com
341	    HOSTN_NETWORK_WATCHDOG_NPM_URL=""           # e.g. https://myserver.com
342
343	# ━━━ Docker Network Connect ━━━
344	    HOSTN_NETWORK_CONNECT_CONTAINERS=(
345	        # "memcached"
346	    )
347
348	    HOSTN_NETWORK_CONNECT_NETWORKS=(
349	        # "high-availability"
350	    )
351
352	# ==============================================================================================
353	# ── MEDIA ─────────────────────────────────────────────────────────────────────────────────────
354	# ==============================================================================================
355
356	# ━━━ Media Permissions ━━━
357	    HOSTN_MEDIA_PERMISSION_SHARES=(
358	        # /mnt/user/Movies
359	        # /mnt/user/Tv_Shows
360	        # /mnt/user/Music
361	        # /mnt/user/Downloads
362	    )
363
364	# ━━━ Media Cleaner ━━━
365	    HOSTN_ANIME_CLEAN_FOLDERS=(
366	        # /mnt/user/Anime_Movies
367	        # /mnt/user/Anime_Shows
368	    )
369
370	    HOSTN_MEDIA_CLEAN_FOLDERS=(
371	        # /mnt/user/Movies
372	        # /mnt/user/Tv_Shows
373	    )
374
375	# ==============================================================================================
376	# ── ARR STACK ─────────────────────────────────────────────────────────────────────────────────
377	# ==============================================================================================
378
379	# ━━━ Downloaders ━━━
380	    HOSTN_SLSKD_URL="http://localhost:8980"
381	    HOSTN_SLSKD_API_KEY=""
382	    HOSTN_SLSKD_FAILED_IMPORTS_DIR=""
383
384	    HOSTN_SABNZBD_URL="http://localhost:8180"
385	    HOSTN_SABNZBD_API_KEY=""
386
387	    HOSTN_QBIT_URL="http://localhost:8080"
388	    HOSTN_QBIT_USERNAME="admin"
389	    HOSTN_QBIT_PASSWORD=""
390
391	# ━━━ Lidarr ━━━
392	    HOSTN_LIDARR_URL="http://localhost:8686"
393	    HOSTN_LIDARR_API_KEY=""
394	    HOSTN_LIDARR_MUSIC_ROOT="/mnt/user/Music"
395	    HOSTN_FANART_API_KEY=""
396	    HOSTN_LASTFM_API_KEY=""
397
398	    declare -A HOSTN_LIDARR_PATH_MAP=(
399	        # ["/music"]="/mnt/user/Music"
400	    )
401
402	# ━━━ Sonarr ━━━
403	    HOSTN_SONARR_URL="http://localhost:8989"
404	    HOSTN_SONARR_API_KEY=""
405	    HOSTN_SONARR_TV_ROOT="/mnt/user/Tv_Shows"
406
407	    declare -A HOSTN_SONARR_PATH_MAP=(
408	        # ["/tv"]="/mnt/user/Tv_Shows"
409	    )
410
411	# ━━━ Radarr ━━━
412	    HOSTN_RADARR_URL="http://localhost:7878"
413	    HOSTN_RADARR_API_KEY=""
414	    HOSTN_TMDB_API_KEY=""
415	    HOSTN_RADARR_MOVIE_ROOT="/mnt/user/Movies"
416
417	    declare -A HOSTN_RADARR_PATH_MAP=(
418	        # ["/movies"]="/mnt/user/Movies"
419	    )
420
421	# ━━━ Arr Recovery Toggles ━━━
422	    HOSTN_LIDARR_RECOVERY=false
423	    HOSTN_SONARR_RECOVERY=true
424	    HOSTN_RADARR_RECOVERY=true
425
426	# ==============================================================================================
427	# ── TRANSCODES ────────────────────────────────────────────────────────────────────────────────
428	# ==============================================================================================
429
430	    HOSTN_RAMDISK_SIZE="10G"
431	    HOSTN_RAMDISK_WARN_GB=8.5
432	    HOSTN_RAMDISK_LOW_GB=7
433	    HOSTN_TRANSCODE_SSD="/mnt/cache/Temp_Storage/Emby/Transcodes/"
434
435	    HOSTN_TRANSCODE_SERVERS=(
436	        "${HOSTN_EMBY_CONTAINER}|${HOSTN_EMBY_URL}|${HOSTN_EMBY_API_KEY}|emby"
437	    )
438
439	# ==============================================================================================
440	# ── MONITORS ──────────────────────────────────────────────────────────────────────────────────
441	# ==============================================================================================
442
443	# ━━━ Certificate Monitor ━━━
444	    HOSTN_CERT_MONITOR_DOMAINS=(
445	        # "myserver.com"
446	    )
447
448	# ━━━ SMART Health ━━━
449	    HOSTN_SMART_IGNORE_DRIVES=(
450	        "sda"   # boot USB — SMART not meaningful on flash drives
451	    )
452
453	# ━━━ ZFS Report ━━━
454	    HOSTN_ZFS_REPORT_IGNORE_POOLS=(
455	        # "disk5"
456	    )
457
458	# ==============================================================================================
459	# ── RESOURCE MANAGER ──────────────────────────────────────────────────────────────────────────
460	# ==============================================================================================
461
462	    HOSTN_RW_PAUSE_CONTAINERS=(
463	        # "Tdarr"
464	        # "LidaTube"
465	    )
466
467	    HOSTN_RW_STOP_CONTAINERS=(
468	        # "Tdarr"
469	    )
470
471	# ==============================================================================================
472	# ── SYSTEM WATCHDOG ───────────────────────────────────────────────────────────────────────────
473	# ==============================================================================================
474
475	    HOSTN_SYS_WATCHDOG_NIC=""   # e.g. eth0 — for network monitoring
476
477	    HOSTN_SYS_WATCHDOG_CHECK_DOCKER=true
478	    HOSTN_SYS_WATCHDOG_CHECK_ROOTFS=true
479	    HOSTN_SYS_WATCHDOG_CHECK_KERNEL_OOPS=true
480	    HOSTN_SYS_WATCHDOG_CHECK_FD=true
481	    HOSTN_SYS_WATCHDOG_CHECK_BOOT=true
482	    HOSTN_SYS_WATCHDOG_CHECK_OOM=true
483	    HOSTN_SYS_WATCHDOG_CHECK_RAM=true
484	    HOSTN_SYS_WATCHDOG_CHECK_LOG=true
485	    HOSTN_SYS_WATCHDOG_CHECK_ARC=true
486	    HOSTN_SYS_WATCHDOG_CHECK_TEMP=true
487	    HOSTN_SYS_WATCHDOG_CHECK_LOAD=true
488	    HOSTN_SYS_WATCHDOG_CHECK_ZOMBIES=true
489	    HOSTN_SYS_WATCHDOG_CHECK_CONTAINERS=true
490	    HOSTN_SYS_WATCHDOG_CHECK_TMP=true
491	    HOSTN_SYS_WATCHDOG_CHECK_MDSTAT=true
492	    HOSTN_SYS_WATCHDOG_CHECK_NETWORK=true
493	    HOSTN_SYS_WATCHDOG_CHECK_SSHD=true
494	    HOSTN_SYS_WATCHDOG_CHECK_RUNAWAY=false
495

#!/bin/bash
# ==============================================================================================
# ========================== HOSTN CONFIGURATION — (hostname) ==================================
# ==============================================================================================
# HOSTN-specific variables — credentials, container names, share paths, failover lists.
# Sourced after master.conf — values here extend shared profile arrays and add HOSTN-specific
# identity, credentials, and container configuration.
#
# Sparse checkout (git) ensures other hosts never receive this file.
#
# DO NOT put shared config here — thresholds, toggles, profiles belong in master.conf.
# DO NOT put other hosts' variables here — they belong in their own host*.conf files.
#
# ── HOW TO USE THIS TEMPLATE ──────────────────────────────────────────────────────────────────
# This file was generated by the Varaverk first-run wizard.
# Fill in the sections that apply to your setup — leave unused sections empty.
# All scripts self-guard against empty values — safe to leave sections blank until needed.
#
# ── INDEX ─────────────────────────────────────────────────────────────────────────────────────
#
#   ── IDENTITY & CONNECTIVITY ────────────────────────────────────────────────────────────────
#   IDENTITY                hostname, SSH key, Unraid API key
#   EMBY                    container name, URL, API key
#   JELLYFIN                container name, URL, API key
#   GITEA                   API token for SSH key registration
#   NOTIFICATIONS           Discord webhook
#
#   ── PARTNERSHIP ────────────────────────────────────────────────────────────────────────────
#   PARTNERSHIP             auth containers, backup paths, emby provisioning
#
#   ── RSYNC ──────────────────────────────────────────────────────────────────────────────────
#   DAILY SYNC SHARES       media shares this host owns and pushes
#   PERSONAL SHARES         private encrypted shares for offsite backup
#   WEEKLY SYNC SHARES      appdata shares synced weekly
#   INTERMEDIATE SYNC       mid-day appdata propagation
#   CRITICAL SYNC SHARES    appdata shares synced every 30 minutes
#   BACKUP VERIFY           shares for checksum verification against remote
#   HOSTN RSYNC PROFILE     host-specific appdata sync profile
#
#   ── FALLBACK ───────────────────────────────────────────────────────────────────────────────
#   DDNS                    DDNS containers managed by this host
#   INTERNET LOSS           containers stopped when internet is lost
#   FALLBACK TIERS          what this host runs for the remote per tier
#   TIER DELAYS             delays before each tier activates
#   RSYNC WRITEBACK         appdata synced back on handback
#
#   ── DOCKER ─────────────────────────────────────────────────────────────────────────────────
#   DOCKER DAILY RESTART    containers restarted daily
#   DOCKER WEEKLY RESTART   containers restarted weekly
#   DOCKER WATCHDOG         memory limits, health URLs, required containers
#   NETWORK WATCHDOG        DDNS domain, NPM URL for connectivity checks
#   DOCKER NETWORK CONNECT  networks and containers for array start
#
#   ── MEDIA ──────────────────────────────────────────────────────────────────────────────────
#   MEDIA PERMISSIONS       share list for permissions script
#   MEDIA CLEANER           folder lists for media_cleaner.sh
#
#   ── ARR STACK ──────────────────────────────────────────────────────────────────────────────
#   DOWNLOADERS             slskd, SABnzbd, qBittorrent credentials and URLs
#   LIDARR / SONARR / RADARR  URL, API key, path map
#   ARR RECOVERY            per-arr recovery toggles
#
#   ── TRANSCODES ─────────────────────────────────────────────────────────────────────────────
#   TRANSCODES              ramdisk size, thresholds, SSD path, server array
#
#   ── MONITORS ───────────────────────────────────────────────────────────────────────────────
#   CERTIFICATE MONITOR     domains checked for SSL expiry
#   SMART HEALTH            drives to skip in SMART monitoring
#   ZFS REPORT              pools to exclude from ZFS health report
#
#   ── RESOURCE MANAGER ───────────────────────────────────────────────────────────────────────
#   RESOURCE MANAGER        containers paused/stopped under memory pressure
#
#   ── SYSTEM WATCHDOG ────────────────────────────────────────────────────────────────────────
#   SYSTEM WATCHDOG         per-host check toggles and NIC configuration
#
# ==============================================================================================

# ==============================================================================================
# ── STORAGE MODE ──────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Storage mode ━━━
# Controls where Varaverk stores scripts, conf, and state files.
# true  = internal NVMe/SSD — /boot/config/plugins/varaverk  (write-safe, git-direct)
# false = USB flash boot    — /mnt/user/appdata/Varaverk      (preserves flash lifetime)
# Auto-detected from boot device transport on first setup.
# To change: Settings → Storage → Migrate.
    HOSTN_STORAGE_MODE_INTERNAL=true

# ==============================================================================================
# ── IDENTITY & CONNECTIVITY ───────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Identity ━━━
# HOSTN hostname lives in master.conf (not a credential — safe for all servers).
# SSH key used for all server-to-server operations — rsync, failover, conf sync.
# Convention: /root/.ssh/<hostname-lowercase-no-unraid-prefix>_rsync_automation
# Must be in /root/.ssh/ and authorised in the partner's /root/.ssh/authorized_keys.
# Run Partnership/ssh_setup.sh to generate the key and copy it to the partner.
    HOSTN_SSH_KEY=""    # e.g. /root/.ssh/myserver_rsync_automation
    HOSTN_OWNER=""      # short identifier for this server (e.g. myserver)
    HOSTN_OWNER_EMAIL=""

# ━━━ Unraid API ━━━
# Used by the Varaverk plugin to query this server's Unraid GraphQL API.
# Generate in Unraid: Settings → Management Access → API Keys → + New Key
    HOSTN_UNRAID_API_KEY=""

# ━━━ Emby ━━━
    HOSTN_EMBY_CONTAINER="Emby"
    HOSTN_EMBY_URL="http://localhost:8096"
    HOSTN_EMBY_API_KEY=""   # Emby Dashboard → API Keys → + New Key

# ━━━ Jellyfin ━━━
    HOSTN_JELLYFIN_CONTAINER="Jellyfin"
    HOSTN_JELLYFIN_URL="http://localhost:8095"
    HOSTN_JELLYFIN_API_KEY=""   # Jellyfin Dashboard → Administration → API Keys

# ━━━ Gitea ━━━
# Personal access token for gitea_ssh_setup.sh.
# Create in Gitea: Settings → Applications → Generate Token → scope: write:user
    HOSTN_GITEA_API_TOKEN=""

# ━━━ Notifications ━━━
# Discord webhook — leave blank to disable.
    HOSTN_DISCORD_WEBHOOK=""

# ==============================================================================================
# ── PARTNERSHIP ───────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# Auth containers reconfigured on onboard/offboard.
# Format: "ContainerName|WebUIPort"
    HOSTN_PARTNERSHIP_AUTH_WEBUIS=(
        # "NginxProxyManager|81"
        # "Authelia|9091"
    )

# XML templates pushed to mirror during onboard — auth stack.
# Dependencies (databases) must come before apps that depend on them.
    HOSTN_PARTNERSHIP_AUTH_STACK=(
        # "my-Authelia.xml"
        # "my-NginxProxyManager.xml"
    )

# XML templates pushed to mirror during onboard — arr stack.
    HOSTN_PARTNERSHIP_ARR_STACK=(
        # "my-Sonarr.xml"
        # "my-Radarr.xml"
    )

# Paths the partner should collect during the grace window after offboard.
    HOSTN_PARTNERSHIP_MIRROR_BACKUPS=(
        # "/mnt/user/appdata-Fallback/Partner-Emby"
    )

# Containers parked on this server when partnership is active.
    HOSTN_PARTNERSHIP_OWN_CONTAINERS=(
        # "Emby"
    )

# Emby admin provisioning — owner controls whether Emby is shared.
    HOSTN_PARTNERSHIP_PROVISION_EMBY_ADMIN=false
    HOSTN_PARTNERSHIP_EMBY_PORT=8096
    HOSTN_PARTNERSHIP_EMBY_ADMIN_USER=""
    HOSTN_PARTNERSHIP_EMBY_ADMIN_PASS=""

# ==============================================================================================
# ── RSYNC ─────────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Daily Sync Shares ━━━
# Media shares this host pushes to all other nodes every night.
# Uses DEFAULT_RSYNC_OPTS from master.conf — no profile needed.
    HOSTN_DAILY_SYNC_SHARES=(
        # /mnt/user/Movies
        # /mnt/user/Tv_Shows
        # /mnt/user/Music
    )

# ━━━ Personal Shares ━━━
# Private encrypted shares synced for offsite backup, independent of media shares.
    HOSTN_PERSONAL_SHARES=(
        # /mnt/user/Personal     # e.g. ZFS-encrypted dataset
    )

# ━━━ Weekly Sync Shares ━━━
# Appdata shares synced during the weekly maintenance window.
# Profiles (emby, critical-data) drive container stops — define in master.conf.
    HOSTN_WEEKLY_SYNC_SHARES=(
        # "/mnt/user/Media_Server/Emby"              # emby profile
        # "/mnt/user/appdata-Fallback/Critical-Data" # critical-data profile
    )

# ━━━ Intermediate Sync Shares ━━━
# Shares synced every 4 hours. Leave empty to skip mid-day rsync.
    HOSTN_INTERMEDIATE_SYNC_SHARES=(
        # Add shares here to enable mid-day rsync
    )

# ━━━ Critical Sync Shares ━━━
# Appdata shares synced every 30 minutes.
# Format: "/path/to/share" or "/path/to/share|profile-name"
    HOSTN_CRITICAL_SYNC_SHARES=(
        # "/mnt/user/appdata-Fallback/Critical-Data|critical-fallback"
        # "/mnt/user/Media_Server/Emby|emby-fallback"
    )

# ━━━ Backup Verify ━━━
# Leave empty to use HOSTN_DAILY_SYNC_SHARES automatically.
    HOSTN_BACKUP_VERIFY_SHARES=(
        # leave empty to use HOSTN_DAILY_SYNC_SHARES automatically
    )

# ━━━ HOSTN Rsync Profile — hostn-appdata ━━━
# Host-specific appdata sync profile.
    PROFILE_RSYNC_OPTS[hostn-appdata]="-av --info=progress2 --bwlimit=${PROFILE_BW_LIMIT[hostn-appdata]:-8000}"
    PROFILE_BW_LIMIT[hostn-appdata]=8000
    PROFILE_RETRY_COUNT[hostn-appdata]=3
    PROFILE_SLEEP[hostn-appdata]=300
    PROFILE_CRITICAL_CONTAINER_NAMES[hostn-appdata]=""
    PROFILE_DELAYED_CONTAINERS[hostn-appdata]=""
    PROFILE_CONTAINER_DELAY[hostn-appdata]=5
    PROFILE_EXCLUDE_DIRS[hostn-appdata]="logs *.tmp"

# ==============================================================================================
# ── FALLBACK ──────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ DDNS ━━━
# DDNS containers this host manages.
    HOSTN_DDNS_CONTAINERS=(
        # "MyServer.com"
    )

# ━━━ Internet Loss ━━━
# Containers stopped immediately when internet is lost.
    FALLBACK_HOSTN_STOP_ON_NO_NET=(
        # "MyServer.com"
    )

# ━━━ Fallback Tiers — HOSTN Runs for Partner ━━━
# Containers this host starts when the partner goes down.
# Replace REMOTE_ID below with the actual remote host ID (HOST1, HOST2, etc.)
    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER1=(
        # "Partner-DDNS-Container"
    )

    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER2=(
        # "container-placeholder"
    )

    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER3=(
        # "container-placeholder"
    )

    FALLBACK_HOSTN_COVERS_REMOTE_ID_TIER4=(
        # "container-placeholder"
    )

# ━━━ Tier Delays — Partner's Containers on this Host ━━━
# How long the partner must be down before each tier activates here — in minutes.
# Replace REMOTE_ID with the actual remote host ID (HOST1, HOST2, etc.)
    REMOTE_ID_TIER2_DELAY=240           # 4 hours
    REMOTE_ID_TIER3_DELAY=720           # 12 hours
    REMOTE_ID_TIER4_DELAY=1440          # 24 hours

# ━━━ Rsync Writeback ━━━
    HOSTN_TIER1_WRITEBACK_DELAY=60      # skip Emby writeback if outage under 1hr

    FALLBACK_HOSTN_WRITEBACK_TIER1=(
        # "/mnt/user/Media_Server/Emby"
    )

    FALLBACK_HOSTN_WRITEBACK_TIER2=(
        # "/mnt/user/appdata-Fallback/Important-Data"
    )

    FALLBACK_HOSTN_WRITEBACK_TIER3=(
        # "location-placeholder"
    )

    FALLBACK_HOSTN_WRITEBACK_TIER4=(
        # "/mnt/user/appdata-Fallback/Arrs_Stack"
    )

# ==============================================================================================
# ── DOCKER ────────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Docker Daily Restart ━━━
    HOSTN_DAILY_RESTART_CONTAINERS=(
        # "NginxProxyManager"
        # "Authelia"
    )

# ━━━ Docker Weekly Restart ━━━
    HOSTN_WEEKLY_RESTART_CONTAINERS=(
        # "NextCloud"
        # "AdGuard-Home"
    )

# ━━━ Docker Watchdog ━━━

# Memory hard limits in MB — immediate restart if exceeded.
# 20GB=20480  16GB=16384  8GB=8192  4GB=4096  2GB=2048  1GB=1024
    declare -A HOSTN_WATCHDOG_CONTAINERS=(
        # ["Emby"]=18432
    )

# HTTP health check URLs — checked every cycle.
    declare -A HOSTN_WATCHDOG_CONTAINER_URLS=(
        # ["Emby"]="http://localhost:8096"
    )

# Required containers — must always be running.
    HOSTN_WATCHDOG_REQUIRED_CONTAINERS=(
        # "NginxProxyManager"
        # "Authelia"
    )

# Containers to skip in Tier 2 global scan.
    HOSTN_WATCHDOG_SCAN_IGNORE=(
        # "my-occasional-container"
    )

# Dependency ordering — skip restarting a container if its dependency is also down.
    declare -A HOSTN_WATCHDOG_DEPENDENCIES=(
        # ["Authelia"]="Mariadb Redis-Authelia"
    )

# Per-container appdata growth suppress ceilings in MB.
    declare -A HOSTN_WATCHDOG_APPDATA_SIZES=(
        # ["Tdarr"]="25600"
    )

# ━━━ Network Watchdog ━━━
    HOSTN_NETWORK_WATCHDOG_DDNS_DOMAIN=""       # e.g. myserver.com
    HOSTN_NETWORK_WATCHDOG_DDNS_CONTAINER=""    # e.g. MyServer.com
    HOSTN_NETWORK_WATCHDOG_NPM_URL=""           # e.g. https://myserver.com

# ━━━ Docker Network Connect ━━━
    HOSTN_NETWORK_CONNECT_CONTAINERS=(
        # "memcached"
    )

    HOSTN_NETWORK_CONNECT_NETWORKS=(
        # "high-availability"
    )

# ==============================================================================================
# ── MEDIA ─────────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Media Permissions ━━━
    HOSTN_MEDIA_PERMISSION_SHARES=(
        # /mnt/user/Movies
        # /mnt/user/Tv_Shows
        # /mnt/user/Music
        # /mnt/user/Downloads
    )

# ━━━ Media Cleaner ━━━
    HOSTN_ANIME_CLEAN_FOLDERS=(
        # /mnt/user/Anime_Movies
        # /mnt/user/Anime_Shows
    )

    HOSTN_MEDIA_CLEAN_FOLDERS=(
        # /mnt/user/Movies
        # /mnt/user/Tv_Shows
    )

# ==============================================================================================
# ── ARR STACK ─────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Downloaders ━━━
    HOSTN_SLSKD_URL="http://localhost:8980"
    HOSTN_SLSKD_API_KEY=""
    HOSTN_SLSKD_FAILED_IMPORTS_DIR=""

    HOSTN_SABNZBD_URL="http://localhost:8180"
    HOSTN_SABNZBD_API_KEY=""

    HOSTN_QBIT_URL="http://localhost:8080"
    HOSTN_QBIT_USERNAME="admin"
    HOSTN_QBIT_PASSWORD=""

# ━━━ Lidarr ━━━
    HOSTN_LIDARR_URL="http://localhost:8686"
    HOSTN_LIDARR_API_KEY=""
    HOSTN_LIDARR_MUSIC_ROOT="/mnt/user/Music"
    HOSTN_FANART_API_KEY=""
    HOSTN_LASTFM_API_KEY=""

    declare -A HOSTN_LIDARR_PATH_MAP=(
        # ["/music"]="/mnt/user/Music"
    )

# ━━━ Sonarr ━━━
    HOSTN_SONARR_URL="http://localhost:8989"
    HOSTN_SONARR_API_KEY=""
    HOSTN_SONARR_TV_ROOT="/mnt/user/Tv_Shows"

    declare -A HOSTN_SONARR_PATH_MAP=(
        # ["/tv"]="/mnt/user/Tv_Shows"
    )

# ━━━ Radarr ━━━
    HOSTN_RADARR_URL="http://localhost:7878"
    HOSTN_RADARR_API_KEY=""
    HOSTN_TMDB_API_KEY=""
    HOSTN_RADARR_MOVIE_ROOT="/mnt/user/Movies"

    declare -A HOSTN_RADARR_PATH_MAP=(
        # ["/movies"]="/mnt/user/Movies"
    )

# ━━━ Arr Recovery Toggles ━━━
    HOSTN_LIDARR_RECOVERY=false
    HOSTN_SONARR_RECOVERY=true
    HOSTN_RADARR_RECOVERY=true

# ==============================================================================================
# ── TRANSCODES ────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

    HOSTN_RAMDISK_SIZE="10G"
    HOSTN_RAMDISK_WARN_GB=8.5
    HOSTN_RAMDISK_LOW_GB=7
    HOSTN_TRANSCODE_SSD="/mnt/cache/Temp_Storage/Emby/Transcodes/"

    HOSTN_TRANSCODE_SERVERS=(
        "${HOSTN_EMBY_CONTAINER}|${HOSTN_EMBY_URL}|${HOSTN_EMBY_API_KEY}|emby"
    )

# ==============================================================================================
# ── MONITORS ──────────────────────────────────────────────────────────────────────────────────
# ==============================================================================================

# ━━━ Certificate Monitor ━━━
    HOSTN_CERT_MONITOR_DOMAINS=(
        # "myserver.com"
    )

# ━━━ SMART Health ━━━
    HOSTN_SMART_IGNORE_DRIVES=(
        "sda"   # boot USB — SMART not meaningful on flash drives
    )

# ━━━ ZFS Report ━━━
    HOSTN_ZFS_REPORT_IGNORE_POOLS=(
        # "disk5"
    )

# ==============================================================================================
# ── RESOURCE MANAGER ──────────────────────────────────────────────────────────────────────────
# ==============================================================================================

    HOSTN_RW_PAUSE_CONTAINERS=(
        # "Tdarr"
        # "LidaTube"
    )

    HOSTN_RW_STOP_CONTAINERS=(
        # "Tdarr"
    )

# ==============================================================================================
# ── SYSTEM WATCHDOG ───────────────────────────────────────────────────────────────────────────
# ==============================================================================================

    HOSTN_SYS_WATCHDOG_NIC=""   # e.g. eth0 — for network monitoring

    HOSTN_SYS_WATCHDOG_CHECK_DOCKER=true
    HOSTN_SYS_WATCHDOG_CHECK_ROOTFS=true
    HOSTN_SYS_WATCHDOG_CHECK_KERNEL_OOPS=true
    HOSTN_SYS_WATCHDOG_CHECK_FD=true
    HOSTN_SYS_WATCHDOG_CHECK_BOOT=true
    HOSTN_SYS_WATCHDOG_CHECK_OOM=true
    HOSTN_SYS_WATCHDOG_CHECK_RAM=true
    HOSTN_SYS_WATCHDOG_CHECK_LOG=true
    HOSTN_SYS_WATCHDOG_CHECK_ARC=true
    HOSTN_SYS_WATCHDOG_CHECK_TEMP=true
    HOSTN_SYS_WATCHDOG_CHECK_LOAD=true
    HOSTN_SYS_WATCHDOG_CHECK_ZOMBIES=true
    HOSTN_SYS_WATCHDOG_CHECK_CONTAINERS=true
    HOSTN_SYS_WATCHDOG_CHECK_TMP=true
    HOSTN_SYS_WATCHDOG_CHECK_MDSTAT=true
    HOSTN_SYS_WATCHDOG_CHECK_NETWORK=true
    HOSTN_SYS_WATCHDOG_CHECK_SSHD=true
    HOSTN_SYS_WATCHDOG_CHECK_RUNAWAY=false


all the logs have errors, we moved and fixed the.confs but we missed a lot of stuff


Fix errors after configuration migration


The `host1.conf` is still using `HOSTN_` template placeholders — every variable should be `HOST1_*`. Let me verify this is the real issue by checking common.sh and what the scripts actually reference.