harkaq: granja con volumen + auto-shutdown VALIDADA end-to-end
Test real (worker + volumen + helper), no en el papel. Las 3 piezas:
1. worker midió lz4+bzip2 → volumen
2. tras 1 ciclo idle SE AUTO-ELIMINÓ (verificado: el server desapareció solo)
3. volumen SOBREVIVIÓ con los 2 verdicts; helper efímero ccx13 los recogió al
hub y se auto-destruyó
3 bugs cazados EN EL TEST (no adivinados):
- falta --exclude /work: work/=69GB colgó el rsync del up horas
- cpx11 'unsupported' en hel1 (AMD sin stock) → ccx13
- collect llamaba harvest con 'local' (rsync a un worker inexistente): ahora
sólo recoge; clasificar es paso aparte (worker mide, hub clasifica)
+ auto-delete por API REST (curl+metadata), NO hcloud CLI (la golden no lo trae).
El ID propio sale del metadata service, no del nombre.
Cierra los 2 huecos de la 1ª campaña: idle cobrando (ahora auto-delete) y
dependencia de que yo esté viva (ahora el volumen persiste). Runbook:
docs/runbooks/harkaq-granja-volumen.md. Volumen clausurado tras el test (€0).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -26,7 +26,7 @@ cd "$HUB"
|
||||
VOL="${VOL:-harkaq-cosecha}"
|
||||
IMAGE="${IMAGE:-408909310}" # golden con kernel 6.17 (Landlock ABI 7)
|
||||
TYPE="${TYPE:-ccx23}"
|
||||
HELPER_TYPE="${HELPER_TYPE:-cx22}" # para collect: el más barato que monte el volumen
|
||||
HELPER_TYPE="${HELPER_TYPE:-ccx13}" # para collect: el más barato que monte el volumen
|
||||
LOCATION="${LOCATION:-hel1}"
|
||||
SSHKEY="${SSHKEY:-desarrollo@jlsoltech.com}"
|
||||
SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
|
||||
@@ -75,8 +75,11 @@ EOF
|
||||
ip=$(hcloud server ip "$name")
|
||||
wait_ssh "$ip" || { echo " $name no responde"; continue; }
|
||||
# Provisión: código + harkaq + montaje del volumen + servicio con auto-shutdown.
|
||||
rsync -az -e "$SSH" --exclude /store --exclude '/store-*' --exclude /target --exclude /dist \
|
||||
--exclude /.dev-fs --exclude /.git --exclude /.scratch --exclude '*.png' --exclude '/content*' \
|
||||
# --exclude /work es CRÍTICO: work/ son 69GB (sources, tandas). Sin él el rsync manda
|
||||
# decenas de GB y el up cuelga horas — pasó. farm-up.sh ya lo excluye; se perdió al copiar.
|
||||
rsync -az -e "$SSH" --exclude /work --exclude /store --exclude '/store-*' --exclude /target \
|
||||
--exclude /dist --exclude /tandas --exclude /.dev-fs --exclude /.git --exclude /.scratch \
|
||||
--exclude '*.png' --exclude '/content*' \
|
||||
./ "root@$ip:$REMOTE/" >/dev/null
|
||||
$SSH "root@$ip" "MNT=/mnt/cosecha; mkdir -p \$MNT; mount $DEV \$MNT 2>/dev/null || (mkfs.ext4 -q -F $DEV && mount $DEV \$MNT); mkdir -p \$MNT/verdicts \$MNT/logs"
|
||||
scripts/farm/harkaq-farm-setup.sh "$ip" >/dev/null 2>&1 || echo " (setup con avisos, sigo)"
|
||||
@@ -120,9 +123,13 @@ collect)
|
||||
mkdir -p work/harkaq-campana
|
||||
rsync -az -e "$SSH" "root@$ip:/mnt/cosecha/verdicts/" work/harkaq-campana/ 2>/dev/null || true
|
||||
[ -n "$helper" ] && { echo "== destruyo el helper"; hcloud server delete "$helper" >/dev/null; }
|
||||
echo "== corriendo el harvest sobre lo recogido"
|
||||
scripts/farm/harvest-harkaq.sh "local" 2>/dev/null || \
|
||||
echo " (harvest necesita un worker; recogido a work/harkaq-campana/, clasificá con harvest-harkaq)"
|
||||
# NO se corre el harvest acá: harvest-harkaq.sh rsync-ea de un WORKER, y en este punto los
|
||||
# verdicts ya están locales (los trajo el rsync del volumen). Clasificarlos es un paso aparte
|
||||
# —lo hace el hub con el store COMPLETO (el worker mide, el hub clasifica)— y su edición de
|
||||
# recetas + commit no debe colgar de un `collect`. Se reporta y se deja al operador/harvest.
|
||||
n=$(ls work/harkaq-campana/*.verdicts 2>/dev/null | wc -l)
|
||||
echo "== recogidos $n verdicts a work/harkaq-campana/. Clasificar/declarar:"
|
||||
echo " scripts/farm/harkaq-suggest.py <v> ~/.cache/harkaq/base.policy \$PWD/store \$PWD/recipes"
|
||||
;;
|
||||
|
||||
close)
|
||||
|
||||
Reference in New Issue
Block a user