mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-15 11:22:43 +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_before create_default_user userdata_user $INIT_ACTIONS_MAIN)"
|
||||||
INIT_ACTIONS_MAIN="$(insert_after set_hostname \
|
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)"
|
||||||
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 userdata_autoinstall"
|
INIT_ACTIONS_FINAL="$INIT_ACTIONS_FINAL userdata_runcmd userdata_autoinstall"
|
||||||
@ -248,6 +248,47 @@ init__userdata_groups() {
|
|||||||
done
|
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() {
|
find_biggest_empty_disk() {
|
||||||
local d
|
local d
|
||||||
for d in "$ROOT"/sys/class/block/*/device; do
|
for d in "$ROOT"/sys/class/block/*/device; do
|
||||||
|
|||||||
@ -16,6 +16,12 @@ init_tests \
|
|||||||
userdata_user_missing_name \
|
userdata_user_missing_name \
|
||||||
userdata_create_default_user \
|
userdata_create_default_user \
|
||||||
userdata_no_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_ssh_authorized_keys \
|
||||||
userdata_groups \
|
userdata_groups \
|
||||||
userdata_bootcmd \
|
userdata_bootcmd \
|
||||||
@ -149,6 +155,95 @@ userdata_no_default_user_body() {
|
|||||||
tiny-cloud main
|
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() {
|
userdata_ssh_authorized_keys_body() {
|
||||||
fake_bin getent <<-EOF
|
fake_bin getent <<-EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user