#!/bin/bash
# upload-devthomson.sh <qcow2_pronto>
#
# Publica o disco ja convertido+corrigido e manda a WCI puxar.
# Roda NO nfs01 (138.59.146.8), que e a unica origem que a Wevy aceita:
# o roteamento privado dela so baixa da malha 138.59.146.x.
set -o pipefail
SRC="${1:?uso: $0 <qcow2_pronto>}"
DEST=DEVTHOMSON-WCI
SERVE=/NFS01/migrate/$DEST
VOL=$DEST-disk-0
SENHA='In0v@t3ch'

WEVY_API_URL=https://wci.wevy.cloud
WEVY_API_KEY=CdtgOI3geW_Ma-J-9IEZISATGKA_jZYD_Y5PhoM2NIt2CVFFOqCaMHD5rAu0
WEVY_SECRET_KEY=aYscrHrpoYR2c4GIPpLNa2CV2sMyXD7xdxK5evE-VOHQVn0TSMEGIoD-1rim
WEVY_ZONE_UUID=0a91b8da-efe9-4673-8ff0-db97ab212290
TRANSFER_BASE=https://transfer.cloudax.cloud

api() { curl -s -m 120 -H "apikey: $WEVY_API_KEY" -H "secretkey: $WEVY_SECRET_KEY" \
        -H "Content-Type: application/json" "$@"; }

echo "=== $(date -u) upload $DEST ==="
[ -s "$SRC" ] || { echo "ABORT: origem vazia/inexistente"; exit 1; }

mkdir -p "$SERVE"
# o apache so serve com extensao .qcow2; a saida do virt-v2v vem como "<nome>-sda"
echo "--- publicando ---"
if [ "$SRC" != "$SERVE/$VOL.qcow2" ]; then
  echo "$SENHA" | sudo -S mv "$SRC" "$SERVE/$VOL.qcow2"
fi
echo "$SENHA" | sudo -S chmod 644 "$SERVE/$VOL.qcow2"
ls -lh "$SERVE/$VOL.qcow2"
qemu-img info "$SERVE/$VOL.qcow2" | head -5

# O smoke test TEM de ser local. As policies 132/274 do FortiGate tem
# srcintf=wan1 e nao ha hairpin NAT: testar pela URL publica daqui da sempre
# 000 e aborta a migracao por engano.
echo "--- smoke test LOCAL ---"
RC=$(curl -sI -o /dev/null -w "%{http_code}" "http://localhost:9000/$DEST/$VOL.qcow2")
echo "  http://localhost:9000/$DEST/$VOL.qcow2 -> $RC"
[ "$RC" != "200" ] && { echo "ABORT: apache-migrate nao esta servindo"; exit 2; }

URL="$TRANSFER_BASE/$DEST/$VOL.qcow2"
echo "--- uploadVolume (a WCI vai puxar de $URL) ---"
api -X POST "$WEVY_API_URL/restapi/volume/uploadVolume" \
  -d "{\"name\":\"$VOL\",\"format\":\"QCOW2\",\"url\":\"$URL\",\"zoneUuid\":\"$WEVY_ZONE_UUID\"}"
echo

echo "--- polling (ALLOCATED com size=0 travado = origem nao confiavel) ---"
for i in $(seq 1 240); do
  R=$(api "$WEVY_API_URL/restapi/volume/volumeList?zoneUuid=$WEVY_ZONE_UUID")
  L=$(echo "$R" | python3 -c "
import sys,json
try: d=json.load(sys.stdin)
except Exception: print('sem-json'); raise SystemExit
k=[x for x in d if isinstance(d.get(x),list)]
if not k: print('sem-lista'); raise SystemExit
for v in d[k[0]]:
    if v.get('name')=='$VOL':
        print(v.get('state') or v.get('status'), v.get('storageDiskSize') or 0)
        raise SystemExit
print('ainda-nao-aparece 0')
")
  echo "  [$i] $(date -u +%H:%M:%S) $L"
  case "$L" in Ready*|UPLOADED*|Uploaded*) echo "PRONTO"; break;; esac
  sleep 30
done
