1
0
mirror of https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git synced 2025-12-14 19:02:45 +03:00

Implement user creation for alpine-config

ref: https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud/-/issues/35
This commit is contained in:
Natanael Copa 2024-07-31 17:32:43 +02:00
parent 8303a4a3f2
commit b366e4e3f7
2 changed files with 137 additions and 1 deletions

View File

@ -4,7 +4,7 @@
INIT_ACTIONS_MAIN="$(insert_before create_default_user userdata_user $INIT_ACTIONS_MAIN)"
INIT_ACTIONS_MAIN="$(insert_after set_hostname \
"userdata_bootcmd userdata_groups userdata_write_files userdata_ntp userdata_apk_cache userdata_apk_repositories userdata_package_update userdata_package_upgrade userdata_packages" \
"userdata_bootcmd userdata_groups userdata_users 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="$(insert_after set_ssh_keys ssh_authorized_keys $INIT_ACTIONS_MAIN)"
INIT_ACTIONS_FINAL="$INIT_ACTIONS_FINAL userdata_runcmd userdata_autoinstall"
@ -248,6 +248,47 @@ init__userdata_groups() {
done
}
in_list() {
local i needle="$1"
shift
for i in "$@"; do
if [ "$i" = "$needle" ]; then
return 0
fi
done
return 1
}
init__userdata_users() {
local users="$(get_userdata users)"
local name gecos homedir shell
for i in $users; do
local keys="$(get_userdata users/$i)"
if [ "$i" = 1 ] && [ "$keys" = "default" ]; then
continue
fi
if in_list name $keys; then
name="$(get_userdata users/$i/name)"
else
continue
fi
if in_list gecos $keys; then
gecos="$(get_userdata users/$i/gecos)"
fi
if in_list homedir $keys; then
homedir="$(get_userdata users/$i/homedir)"
fi
if in_list shell $keys; then
shell="$(get_userdata users/$i/shell)"
fi
if getent passwd "$user" >/dev/null; then
log -i -t "$phase" info "$ACTION: user $user already exists"
else
$MOCK adduser -D ${gecos:+-g "$gecos"} ${homedir:+-h "$homedir"} ${shell:+-s "$shell"} "$name"
fi
done
}
find_biggest_empty_disk() {
local d
for d in "$ROOT"/sys/class/block/*/device; do

View File

@ -16,6 +16,12 @@ init_tests \
userdata_user_missing_name \
userdata_create_default_user \
userdata_no_default_user \
userdata_users_default_user \
userdata_users_default_name_only \
userdata_users_name_only \
userdata_users_gecos \
userdata_users_homedir \
userdata_users_shell \
userdata_ssh_authorized_keys \
userdata_groups \
userdata_bootcmd \
@ -149,6 +155,95 @@ userdata_no_default_user_body() {
tiny-cloud main
}
userdata_users_default_user_body() {
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- default
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"create_default_user: done" \
-o match:"adduser.*alpine" \
tiny-cloud main
}
userdata_users_default_name_only_body() {
# first specified user will replace default user
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- name: foo
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o match:"adduser.*foo" \
tiny-cloud main
}
userdata_users_name_only_body() {
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- default
- name: foo
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o match:"adduser.*foo" \
tiny-cloud main
}
userdata_users_gecos_body() {
# first specified user will replace default user
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- default
- name: foo
gecos: Joe User
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o match:"adduser.*-g Joe User.*foo" \
tiny-cloud main
}
userdata_users_homedir_body() {
# first specified user will replace default user
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- default
- name: foo
homedir: /foo
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o match:"adduser.*-h /foo.*foo" \
tiny-cloud main
}
userdata_users_shell_body() {
# first specified user will replace default user
fake_userdata_nocloud <<-EOF
#alpine-config
users:
- default
- name: foo
shell: /bin/zsh
EOF
atf_check -e ignore -o ignore tiny-cloud early
atf_check \
-e match:"userdata_users: done" \
-o match:"adduser.*-s /bin/zsh.*foo" \
tiny-cloud main
}
userdata_ssh_authorized_keys_body() {
fake_bin getent <<-EOF
#!/bin/sh