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:
parent
d0a39db18d
commit
11789c272f
11
lib/tiny-cloud/cloud/nocloud/autodetect
Executable file
11
lib/tiny-cloud/cloud/nocloud/autodetect
Executable 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"
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
# set defaults
|
||||
[ -f "$ROOT/etc/tiny-cloud.conf" ] && . "$ROOT/etc/tiny-cloud.conf"
|
||||
: "${CLOUD:=unknown}"
|
||||
: "${CLOUD:=auto}"
|
||||
: "${CLOUD_USER:=alpine}"
|
||||
: "${TINY_CLOUD_LOGS:=$ROOT/var/log}"
|
||||
: "${TINY_CLOUD_VAR:=$ROOT/var/lib/cloud}"
|
||||
|
||||
@ -37,6 +37,20 @@ DEFAULT_ACTIONS_FINAL=""
|
||||
[ ! -d "$TINY_CLOUD_LOGS" ] && mkdir -p "$TINY_CLOUD_LOGS" || 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...
|
||||
|
||||
|
||||
@ -23,7 +23,11 @@ init_tests \
|
||||
set_hostname \
|
||||
set_ssh_keys \
|
||||
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"
|
||||
|
||||
@ -225,3 +229,40 @@ run_userdata_body() {
|
||||
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"
|
||||
}
|
||||
|
||||
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"
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user