registryImage:=fs.String("registry-image","","in-cluster registry image (default: registry 2.8.3, pinned by digest)")
backupPVC:=fs.String("backup-pvc","felis-backups","name of the world-archive PVC this bundle renders in the Minecraft namespace and advertises to the backup/restore executors via FELIS_BACKUP_PVC (default: felis-backups; pass an empty value to render none, leaving backup/restore answering 503)")
worldsHostPath:=fs.String("worlds-host-path","","node directory the reaper reads worlds from: each world PVC resolves as <path>/<pvc>, or as the stock local-path directory <path>/<pv-name>_<ns>_<pvc-name> (k3s storage root: /var/lib/rancher/k3s/storage); enables the reaper CronJob (requires --archive-local-path and a non-empty --backup-pvc)")
archiveLocalPath:=fs.String("archive-local-path","","path the backup PVC is mounted at in the reaper CronJob; MUST equal felis.toml [archive] local_path")
archiveLocalPath:=fs.String("archive-local-path","","path the backup PVC is mounted at in the reaper CronJob; MUST equal felis.toml [archive] local_path. With the backup PVC alone it renders the retention-only CronJob, which deletes backups past their expiry and never touches a world")
registryStorage:=fs.String("registry-storage","","capacity the registry PVC requests (default 10Gi; k3s local-path does not enforce it)")
uploadsStorage:=fs.String("uploads-storage","","capacity the uploads PVC requests (default 5Gi; k3s local-path does not enforce it)")
backupStorage:=fs.String("backup-storage","","capacity the world-archive PVC requests (default 10Gi; k3s local-path does not enforce it)")
cfgPath:=fs.String("config","/etc/felis/felis.toml","path to felis.toml")
worldsRoot:=fs.String("worlds-root","/worlds","mount root under which world PVCs are visible (tarLocal: <root>/<pvc>, else the stock local-path <root>/<pv-name>_<ns>_<pvc-name>)")
retentionOnly:=fs.Bool("retention-only",false,"only expire, read back and sweep the archive store: no server is evaluated and no world is read or deleted, so neither the worlds root nor the Kubernetes API is needed")
log "idle-world retention is off: the daily reaper deletes expired backups and keeps every world (set FELIS_WORLDS_HOST_PATH=${K3S_STORAGE_ROOT} to reap worlds idle for 15 days)"
fi
fi
if [ -n "$FELIS_WORLDS_HOST_PATH" ]; then
log "retention enabled: the daily reaper will read worlds from ${FELIS_WORLDS_HOST_PATH}"
# The reaper reads this root as root with DAC_OVERRIDE (platform.reaperPodSecurityContext)
@@ -3478,7 +3486,7 @@ deploy_bundle() {
warn "worlds root ${FELIS_WORLDS_HOST_PATH} does not exist yet; the reaper CronJob cannot start until it does (hostPath type Directory)"