1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2026-02-04 04:22:43 +03:00

Autodetect nocloud if CLOUD is unset

Set default CLOUD to 'auto', which will try autodetect the cloud
provider.

Each cloud can have an autodetect script which should print:
  <priority> <cloud>
if cloud was detected.
This commit is contained in:
Natanael Copa 2024-06-13 21:56:37 +02:00
parent d0a39db18d
commit 11789c272f
4 changed files with 68 additions and 2 deletions

View File

@ -0,0 +1,11 @@
#!/bin/sh
# Tiny Cloud - Autodetect
# vim:set filetype=sh:
# shellcheck shell=sh
grep -w 'ds=nocloud' "$ROOT"/proc/cmdline 2>/dev/null \
|| grep -w "^ds=nocloud" "$ROOT"/sys/class/dmi/id/product_serial 2>/dev/null \
|| findfs LABEL=cidata >/dev/null 2>&1 \
|| findfs LABEL=CIDATA >/dev/null 2>&1 \
&& echo "10 nocloud"

View File

@ -4,7 +4,7 @@
# set defaults # set defaults
[ -f "$ROOT/etc/tiny-cloud.conf" ] && . "$ROOT/etc/tiny-cloud.conf" [ -f "$ROOT/etc/tiny-cloud.conf" ] && . "$ROOT/etc/tiny-cloud.conf"
: "${CLOUD:=unknown}" : "${CLOUD:=auto}"
: "${CLOUD_USER:=alpine}" : "${CLOUD_USER:=alpine}"
: "${TINY_CLOUD_LOGS:=$ROOT/var/log}" : "${TINY_CLOUD_LOGS:=$ROOT/var/log}"
: "${TINY_CLOUD_VAR:=$ROOT/var/lib/cloud}" : "${TINY_CLOUD_VAR:=$ROOT/var/lib/cloud}"

View File

@ -37,6 +37,20 @@ DEFAULT_ACTIONS_FINAL=""
[ ! -d "$TINY_CLOUD_LOGS" ] && mkdir -p "$TINY_CLOUD_LOGS" || true [ ! -d "$TINY_CLOUD_LOGS" ] && mkdir -p "$TINY_CLOUD_LOGS" || true
[ ! -d "$TINY_CLOUD_VAR" ] && mkdir -p "$TINY_CLOUD_VAR" || true [ ! -d "$TINY_CLOUD_VAR" ] && mkdir -p "$TINY_CLOUD_VAR" || true
# autodetect cloud
if [ "$CLOUD" = "auto" ]; then
CLOUD=$(cat "$TINY_CLOUD_VAR"/.autodetect 2>/dev/null) || {
CLOUD=$(
for i in "$LIBDIR"/tiny-cloud/cloud/*/autodetect; do
if [ -f "$i" ]; then
"$i"
fi
done | sort -n | cut -d' ' -f2 | head -n 1
)
: ${CLOUD:=unknown}
printf "%s\n" "$CLOUD" > "$TINY_CLOUD_VAR"/.autodetect
}
fi
### standard boot phase functions... ### standard boot phase functions...

View File

@ -23,7 +23,11 @@ init_tests \
set_hostname \ set_hostname \
set_ssh_keys \ set_ssh_keys \
userdata_type \ userdata_type \
run_userdata run_userdata \
autodetect_unknown \
autodetect_nocloud_cmdline \
autodetect_nocloud_dmi \
autodetect_nocloud_volume
PROVIDERS="aws azure gcp nocloud oci scaleway hetzner" PROVIDERS="aws azure gcp nocloud oci scaleway hetzner"
@ -225,3 +229,40 @@ run_userdata_body() {
grep "hello from user-data" var/log/user-data.log || atf_fail "user-data.log failed" grep "hello from user-data" var/log/user-data.log || atf_fail "user-data.log failed"
grep -w "0" var/log/user-data.exit || atf_fail "user-data.exit failed" grep -w "0" var/log/user-data.exit || atf_fail "user-data.exit failed"
} }
autodetect_unknown_body() {
atf_check \
-o match:"unknown" \
sh -c ". \"$lib\"; echo \$CLOUD"
}
autodetect_nocloud_cmdline_body() {
mkdir -p proc
echo "quiet ds=nocloud;s=https://10.42.42.42/ console=ttyS0" > proc/cmdline
atf_check \
-o match:"nocloud" \
sh -c ". \"$lib\"; echo \$CLOUD"
}
autodetect_nocloud_dmi_body() {
mkdir -p sys/class/dmi/id
echo "ds=nocloud;s=https://10.42.42.42/" > sys/class/dmi/id/product_serial
atf_check \
-o match:"nocloud" \
sh -c ". \"$lib\"; echo \$CLOUD"
}
autodetect_nocloud_volume_body() {
fake_bin findfs <<-EOF
#!/bin/sh
case "\$1" in
LABEL=cidata) echo "/dev/sda1";;
LABEL=CIDATA) echo "/dev/sda2";;
*) exit 1;;
esac
EOF
atf_check \
-o match:"nocloud" \
sh -c ". \"$lib\"; echo \$CLOUD"
}