#!/usr/bin/env bash __gce_sd_here="$(dirname "${BASH_SOURCE[0]}")" # shellcheck disable=SC1091 __gce_sd_conf="${__gce_sd_here}/gce-self-destruct.conf" gce_metadata_req() { declare endpoint url endpoint="$1" url="http://metadata.google.internal/computeMetadata/v1/$endpoint" curl -sf -H Metadata-Flavor:Google "$url" } unix_to_at_time() { declare unix="$1" date --date="@$unix" "+%Y%m%d%H%M.%S" } timeout_to_destruct() { declare timeout_sec now_unix declare timeout_hrs=$1 timeout_sec=$((timeout_hrs * 60 * 60)) now_unix=$(date +%s) echo $((now_unix + timeout_sec)) } relative_timespan() { declare timeSpan="$1" declare -a units divs units+=( s ); divs+=( 60 ) units+=( m ); divs+=( 60 ) units+=( h ); divs+=( 24 ) units+=( d ); divs+=( 7 ) units+=( w ); divs+=( 52 ) numUnits="${#units[@]}" units+=( y ); divs+=( 100 ) declare -a outs declare i div remain for (( i=0; i < "$numUnits"; i++ )); do div="${divs[$i]}" [[ "$timeSpan" -lt "$div" ]] && break remain="$((timeSpan % div))" timeSpan="$((timeSpan / div))" outs+=( "$remain" ) done outs+=( "$timeSpan" ) numOut="${#outs[@]}" out1="$((numOut-1))" out2="$((numOut-2))" if [[ "$numOut" -eq 1 ]] || \ [[ "$numOut" -ge "$numUnits" && \ "${outs[out1]}" -ge "${divs[out1]}" ]]; then printf "%d%s" "${outs[out1]}" "${units[out1]}" else printf "%d%s%02d%s" "${outs[out1]}" \ "${units[out1]}" "${outs[out2]}" "${units[out2]}" fi } gce_self_destruct_ttl() { declare colorize="${1:-true}" declare prefix="${2}" declare suffix="${3}" declare output=0 if [[ -f "${__gce_sd_conf}" ]]; then # shellcheck disable=SC1090 source "${__gce_sd_conf}" declare ttl pttl color ttl="$((destruct - $(date +%s)))" if [[ "$ttl" -lt 0 ]]; then ttl=0 fi pttl="$(relative_timespan "$ttl")" color= if [[ ttl -lt 3600 ]]; then color="\033[01;31m" fi output="${prefix}${pttl}${suffix}" if $colorize; then output="${color}${output}\033[01;00m" fi fi echo -e "$output" } gce_self_destruct_setup() { declare destruct at_time zone destruct="$(timeout_to_destruct "$1")" at_time="$(unix_to_at_time "$destruct")" zone=$(gce_metadata_req "instance/zone") zone=$(basename "$zone") cat >"${__gce_sd_conf}" <