#!/bin/bash
# description "signals the hypervisor that the machine is booted"
# author "Scaleway <opensource@scaleway.com>"

export PATH="${PATH:+$PATH:}/usr/bin:/bin"

METADATA_HOST="$(scw-get-metadata-host)"
if [[ -z $METADATA_HOST ]] && [[ -z $METADATA_URL ]]; then
    echo "No metadata host/URL detected nor provided. Aborting..." >&2
    exit 1
fi

METADATA_URL=${METADATA_URL:-"http://${METADATA_HOST}/state"}

CURL_CONNTIMEOUT=2
CURL_MAXTIME=2
OVERALL_TRIES=5
SLEEP_INTERVAL=2
STATE=$1

for try in $(seq 1 "$OVERALL_TRIES"); do
    response=$(
        curl --connect-timeout "$CURL_CONNTIMEOUT" \
             --max-time "$CURL_MAXTIME" \
             --noproxy '*' \
             --silent \
             --fail \
             --output /dev/null \
             --write-out "\n%{http_code}\n" \
             --request PATCH \
             --header "Content-Type: application/json" \
             --data "{\"state_detail\": \"$STATE\"}" \
             "$METADATA_URL"
    )
    code=$(echo "$response" | tail -n 1)
    [[ $code == 200 ]] && break

    if ((try < OVERALL_TRIES)); then
        sleep $SLEEP_INTERVAL
    else
        echo "Can't send $STATE signal" >&2
        exit 1
    fi
done

echo "$STATE signal sent!"
