# AWS Instance MetaData Service variables and functions
# vim:set filetype=sh:
# shellcheck shell=sh

IMDS_HEADER="X-aws-ec2-metadata-token"
IMDS_TOKEN_TTL_HEADER="X-aws-ec2-metadata-token-ttl-seconds"
: "${IMDS_TOKEN_TTL:=5}"
: "${IMDS_API_VERSION:=latest}"
IMDS_URI="$IMDS_API_VERSION"

_imds_token() {
	# Only try to get token if using IMDSv2
	# IMDSv1: API versions 2009-04-04 and earlier (no token support)
	# IMDSv2: API versions 2009-04-05 and later, or 'latest' (requires token)
	expr "$IMDS_API_VERSION" "<=" "2009-04-04" > /dev/null && return
	# IMDSv2 - request token
	printf "PUT /latest/api/token HTTP/1.0\r\n%s: %s\r\n\r\n" \
		"$IMDS_TOKEN_TTL_HEADER" "$IMDS_TOKEN_TTL" \
		| nc -w 1 "$IMDS_ENDPOINT" 80 | tail -n 1
}

_imds_header() {
	local token="$(_imds_token)"
	if [ -n "$token" ]; then
		echo "$IMDS_HEADER: $token"
	fi
}
