1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2025-12-15 11:22:43 +03:00

Enable sshd & Source UserData Handler

This commit is contained in:
Jake Buchholz Göktürk 2023-05-08 04:41:41 +00:00
parent 4f9386bb94
commit 4ccc16f18f
4 changed files with 57 additions and 35 deletions

View File

@ -15,21 +15,21 @@ INIT_ACTIONS_EARLY="
install_hotplugs
set_default_interfaces
create_default_user
enable_sshd
"
INIT_ACTIONS_MAIN="
save_userdata
set_hostname
set_ssh_keys
"
INIT_ACTIONS_FINAL="
run_userdata
"
INIT_ACTIONS_FINAL=""
# try to ensure existence of output directories, but otherwise don't panic
[ ! -d "$TINY_CLOUD_LOGS" ] && mkdir -p "$TINY_CLOUD_LOGS" || true
[ ! -d "$TINY_CLOUD_VAR" ] && mkdir -p "$TINY_CLOUD_VAR" || true
### init-early functions...
### standard init-early functions...
init__expand_root() {
local dev=$(awk '$2 == "/" {print $1}' "$ROOT"/proc/mounts)
@ -181,8 +181,14 @@ init__create_default_user() {
echo 'permit nopass :wheel' > "$TARGET/etc/doas.d/wheel.conf"
}
init__enable_sshd() {
$MOCK rc-update add sshd default
# in case something else has enabled/disabled dservices
$MOCK rc-update --update
}
### init-main functions
### standard init-main functions
init__set_hostname() {
local fqdn=$(imds @hostname)
@ -237,46 +243,35 @@ init__save_userdata() {
rm "$tmpfile"
}
### init-final functions
init__run_userdata() {
local log="$TINY_CLOUD_LOGS/user-data.log"
local exit="$TINY_CLOUD_LOGS/user-data.exit"
local userdata="$TINY_CLOUD_VAR/user-data"
### standard init-final functions would be here, if there were any
if [ $(userdata_type) != "script" ]; then
printf '(Not Executable) ' >&2
log info "$phase $ACTION - not exectutable"
return
fi
chmod +x "$userdata"
{ "$userdata" 2>& 1; echo $? > "$exit"; } | tee "$log"
### load cloud-specific init functions / vars (potentially overriding)
return $(cat "$exit")
}
### potentially override the above, per cloud
# load cloud-specific init functions / vars
if [ -f "$LIBDIR/tiny-cloud/cloud/$CLOUD/init" ]; then
. "$LIBDIR/tiny-cloud/cloud/$CLOUD/init"
fi
### load user-data type-specific init functions / vars (potentially overriding)
# this should be non-overrideable, but need this before we...
userdata_type() {
if [ -f "$TINY_CLOUD_VAR/user-data" ]; then
header=$(head -n1 "$TINY_CLOUD_VAR/user-data" | sed -e 's/[[:space:]].*//g')
case "$header" in
'#cloud-config') echo cloud-config;;
'#!'*) echo script;;
*) echo unknown;;
esac
else
if [ ! -f "$TINY_CLOUD_VAR/user-data" ]; then
echo missing
return
fi
header=$(head -n1 "$TINY_CLOUD_VAR/user-data" | sed -e 's/[[:space:]].*//g')
case "$header" in
'#!'*) echo script;;
'#'*) echo ${header#\#};;
*) echo unknown;;
esac
}
# ...load user-data type-specific init functions / vars
# TODO
USERDATA_TYPE="$(userdata_type)"
if [ -f "$LIBDIR/tiny-cloud/user-data/$USERDATA_TYPE" ]; then
. "$LIBDIR/tiny-cloud/user-data/$USERDATA_TYPE"
fi
# TODO: some indication that the user-data type is unsupported?

View File

@ -1,4 +1,16 @@
# Script UserData Functions
# vim:set ts=4 et ft=sh:
# TODO
init__run_userdata() {
local log="$TINY_CLOUD_LOGS/user-data.log"
local exit="$TINY_CLOUD_LOGS/user-data.exit"
local userdata="$TINY_CLOUD_VAR/user-data"
chmod +x "$userdata"
{ "$userdata" 2>& 1; echo $? > "$exit"; } | tee "$log"
return $(cat "$exit")
}
# add init actions
INIT_ACTIONS_FINAL="${INIT_ACTIONS_FINAL} run_userdata"

View File

@ -13,7 +13,8 @@ init_tests \
ethernets \
find_first_interface_up \
auto_detect_ethernet_interface \
set_default_interfaces
set_default_interfaces \
enable_sshd
PROVIDERS="aws azure gcp nocloud oci"
@ -99,3 +100,12 @@ set_default_interfaces_body() {
-o match:"use dhcp" \
cat etc/network/interfaces
}
enable_sshd_body() {
for provider in $PROVIDERS; do
CLOUD="$provider" atf_check \
-o match:"rc-update.* add sshd default" \
-o match:"rc-update.* --update" \
sh -c ". $lib; init__enable_sshd"
done
}

View File

@ -21,6 +21,11 @@ userdata_type_body() {
sh -c ". \"$lib\"; userdata_type"
echo "#tiny-cloud-config" > var/lib/cloud/user-data
CLOUD="$c" atf_check \
-o match:"tiny-cloud-config" \
sh -c ". \"$lib\"; userdata_type"
echo "no-content-type" > var/lib/cloud/user-data
CLOUD="$c" atf_check \
-o match:"unknown" \
sh -c ". \"$lib\"; userdata_type"