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

unset IMDS_SELECTED_SOURCE IMDS_SELECTED_FORMAT IMDS_DOCUMENT_DIR
IMDS_HOSTNAME="hostname"
IMDS_LOCAL_HOSTNAME="$IMDS_HOSTNAME"
IMDS_SSH_KEYS="public-keys"
: "${IMDS_NAMESERVERS:=dns/nameservers}"

# TODO: flesh out networking
unset \
	IMDS_NICS \
	IMDS_MAC \
	IMDS_IPV4 \
	IMDS_IPV6 \
	IMDS_IPV4_NET \
	IMDS_IPV6_NET \
	IMDS_IPV4_PREFIX \
	IMDS_IPV6_PREFIX

_imds_init() {
	[ -z "$IMDS_SELECTED_SOURCE" ] || return 0
	IMDS_SELECTED_SOURCE=$(_digitalocean_select_source) || return
	if [ "$IMDS_SELECTED_SOURCE" = configdrive ]; then
		IMDS_DOCUMENT_DIR=$(configdrive_directory digitalocean native \
			"${IMDS_API_VERSION:-latest}") || return
		IMDS_SELECTED_FORMAT=native
		IMDS_HOSTNAME="meta_data.json/hostname"
		IMDS_LOCAL_HOSTNAME="$IMDS_HOSTNAME"
		IMDS_SSH_KEYS="meta_data.json/public_keys"
		IMDS_USERDATA=user_data
		unset IMDS_NAMESERVERS

		_imds() {
			configdrive_document "$IMDS_DOCUMENT_DIR" "$1"
		}
	else
		IMDS_URI="metadata/${IMDS_API_VERSION:-v1}"
	fi
}

_imds_ssh_keys() {
	if [ "$IMDS_SELECTED_SOURCE" = configdrive ]; then
		configdrive_ssh_keys "$IMDS_DOCUMENT_DIR" "$IMDS_SSH_KEYS" native
	else
		_imds "$IMDS_SSH_KEYS"
	fi
}
