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
|
# 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}"
|
||||||
|
|||||||
@ -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...
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user