mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-16 03:42:44 +03:00
Add initial support for alpine autoinstall
Run setup-disk on the biggest empty disk found when autoinstall: true is set.
This commit is contained in:
parent
c39a3a4228
commit
cd385f5610
@ -7,7 +7,7 @@ INIT_ACTIONS_MAIN="$(insert_after set_hostname \
|
|||||||
"userdata_bootcmd userdata_write_files userdata_ntp userdata_apk_cache userdata_apk_repositories userdata_package_update userdata_package_upgrade userdata_packages" \
|
"userdata_bootcmd userdata_write_files userdata_ntp userdata_apk_cache userdata_apk_repositories userdata_package_update userdata_package_upgrade userdata_packages" \
|
||||||
$INIT_ACTIONS_MAIN)"
|
$INIT_ACTIONS_MAIN)"
|
||||||
INIT_ACTIONS_MAIN="$(insert_after set_ssh_keys ssh_authorized_keys $INIT_ACTIONS_MAIN)"
|
INIT_ACTIONS_MAIN="$(insert_after set_ssh_keys ssh_authorized_keys $INIT_ACTIONS_MAIN)"
|
||||||
INIT_ACTIONS_FINAL="$INIT_ACTIONS_FINAL userdata_runcmd"
|
INIT_ACTIONS_FINAL="$INIT_ACTIONS_FINAL userdata_runcmd userdata_autoinstall"
|
||||||
|
|
||||||
get_userdata() {
|
get_userdata() {
|
||||||
IFS="/"
|
IFS="/"
|
||||||
@ -227,3 +227,29 @@ init__userdata_runcmd() {
|
|||||||
sh -c "$cmd"
|
sh -c "$cmd"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
find_biggest_empty_disk() {
|
||||||
|
local d
|
||||||
|
for d in "$ROOT"/sys/class/block/*/device; do
|
||||||
|
p=${d%/device}
|
||||||
|
if [ -e "$p"/size ] && [ -z "$(blkid /dev/${p##*/})" ]; then
|
||||||
|
echo "$(cat $p/size) ${p##*/}"
|
||||||
|
fi
|
||||||
|
done | sort -n | tail -n 1 | cut -d' ' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
init__userdata_autoinstall() {
|
||||||
|
local autoinstall="$(get_userdata autoinstall)"
|
||||||
|
if [ "$autoinstall" = "true" ]; then
|
||||||
|
local disk="$(find_biggest_empty_disk)"
|
||||||
|
if [ -n "$disk" ]; then
|
||||||
|
rm -f "$ROOT"/etc/runlevels/*/tiny-cloud*
|
||||||
|
$MOCK lbu include /root/.ssh /home
|
||||||
|
$MOCK ERASE_DISKS=/dev/$disk setup-disk -m sys /dev/$disk
|
||||||
|
# TODO: make reboot configurable
|
||||||
|
$MOCK reboot
|
||||||
|
else
|
||||||
|
log err "no empty disk found"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|||||||
@ -120,3 +120,10 @@ fake_interfaces() {
|
|||||||
n=$((n+1))
|
n=$((n+1))
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fake_disk() {
|
||||||
|
local dev="$1" size="$2"
|
||||||
|
mkdir -p sys/class/block/$dev
|
||||||
|
touch sys/class/block/$dev/device
|
||||||
|
echo "$size" > sys/class/block/$1/size
|
||||||
|
}
|
||||||
|
|||||||
@ -28,7 +28,8 @@ init_tests \
|
|||||||
userdata_package_update \
|
userdata_package_update \
|
||||||
userdata_package_upgrade \
|
userdata_package_upgrade \
|
||||||
userdata_packages \
|
userdata_packages \
|
||||||
userdata_runcmd
|
userdata_runcmd \
|
||||||
|
userdata_autoinstall
|
||||||
|
|
||||||
set_ephemeral_network_cmdline_body() {
|
set_ephemeral_network_cmdline_body() {
|
||||||
fake_interfaces eth0 eth1 eth2
|
fake_interfaces eth0 eth1 eth2
|
||||||
@ -413,3 +414,24 @@ userdata_write_files_body() {
|
|||||||
world
|
world
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
userdata_autoinstall_body() {
|
||||||
|
fake_userdata_nocloud <<-EOF
|
||||||
|
#alpine-config
|
||||||
|
autoinstall: true
|
||||||
|
EOF
|
||||||
|
fake_bin blkid <<-EOF
|
||||||
|
#!/bin/sh
|
||||||
|
true
|
||||||
|
EOF
|
||||||
|
fake_disk nvme0n8 10000
|
||||||
|
fake_disk vda 20000
|
||||||
|
|
||||||
|
# run net phase to extract the user data
|
||||||
|
atf_check -e ignore -o ignore tiny-cloud early
|
||||||
|
atf_check \
|
||||||
|
-e match:"userdata_autoinstall: done" \
|
||||||
|
-o match:"setup-disk" \
|
||||||
|
tiny-cloud final
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user