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:
parent
8303a4a3f2
commit
b366e4e3f7
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user