# Tiny Cloud - Init Functions
# vim:set filetype=sh:
# shellcheck shell=sh

INIT_ACTIONS_BOOT="$(replace_word set_default_interfaces set_network_interfaces $INIT_ACTIONS_BOOT)"

set_resolv_conf() {
	# resolv.conf
	local nameservers="$(imds meta-data/resolv_conf/nameservers)"
	for i in $nameservers; do
		local server="$(imds meta-data/resolv_conf/nameservers/$i)"
		add_once "$ETC"/resolv.conf "nameserver $server"
	done
}

has_ipv4_address() {
	$MOCK ip -4 -o addr show | awk '$2 != "lo" {print $4}' \
		| grep -q -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
}

want_ephemeral_network() {
	if has_ipv4_address; then
		return 1
	fi
	for i in $(cat "$PROC"/cmdline 2>/dev/null) \
			$(cat "$SYS"/class/dmi/id/product_serial 2>/dev/null); do
		case "$i" in
			"ds=nocloud;"*)
				for kv in $(echo "${i#*;}" | tr \; ' '); do
					k="${kv%%=*}"
					v="${kv#*=}"
					case "$k" in
						s|seedfrom)
							case "$v" in
								http://*|https://*) return 0;;
							esac
							;;
					esac
				done
				;;
		esac
	done
	return 1
}

init__set_network_interfaces() {
	local interfaces="$(imds meta-data/network-interfaces)"
	mkdir -p "$ETC"/network
	if [ -n "$interfaces" ]; then
		printf "%s\n" "$interfaces" > "$ETC"/network/interfaces
	elif ! [ -f "$ETC"/network/interfaces ]; then
		init__set_default_interfaces
	fi
	if ! grep -q dhcp "$ETC"/network/interfaces; then
		set_resolv_conf
	fi
}
