diff --git a/lib/tiny-cloud/init b/lib/tiny-cloud/init index 3d6eac6..8eb7329 100644 --- a/lib/tiny-cloud/init +++ b/lib/tiny-cloud/init @@ -164,7 +164,12 @@ init__create_default_user() { fi $MOCK addgroup "$user" - $MOCK adduser -h "/home/$user" -s /bin/sh -G "$user" -D "$user" + $MOCK adduser -D \ + -h "${CLOUD_USER_HOMEDIR:-/home/$user}" \ + -s "${CLOUD_USER_SHELL:-/bin/sh}" \ + -G "${CLOUD_USER_PRIMARY_GROUP:-$user}" \ + ${CLOUD_USER_GECOS:+-g "$CLOUD_USER_GECOS"} \ + "$user" $MOCK addgroup "$user" wheel echo "$user:*" | $MOCK chpasswd -e diff --git a/lib/tiny-cloud/user-data/cloud-config b/lib/tiny-cloud/user-data/cloud-config index cdd2af7..370987b 100644 --- a/lib/tiny-cloud/user-data/cloud-config +++ b/lib/tiny-cloud/user-data/cloud-config @@ -30,10 +30,24 @@ init__userdata_user() { local default_user="$(get_userdata users/1)" if [ "$default_user" != "default" ]; then CLOUD_USER="$(get_userdata users/1/name)" + CLOUD_USER_HOMEDIR="$(get_userdata users/1/homedir)" + CLOUD_USER_SHELL="$(get_userdata users/1/shell)" + CLOUD_USER_PRIMARY_GROUP="$(get_userdata users/1/primary_group)" + CLOUD_USER_GECOS="$(get_userdata users/1/gecos)" return 0 fi fi + + local homedir="$(get_userdata user/homedir)" + local shell="$(get_userdata user/shell)" + local primary_group="$(get_userdata user/primary_group)" + local gecos="$(get_userdata user/gecos)" + CLOUD_USER="${name:-$CLOUD_USER}" + CLOUD_USER_HOMEDIR="${homedir:-$CLOUD_USER_HOMEDIR}" + CLOUD_USER_SHELL="${shell:-$CLOUD_USER_SHELL}" + CLOUD_USER_PRIMARY_GROUP="${primary_group:-$CLOUD_USER_PRIMARY_GROUP}" + CLOUD_USER_GECOS="${gecos:-$CLOUD_USER_GECOS}" } set_ssh_authorized_keys_for() { diff --git a/tests/tiny-cloud-alpine.test b/tests/tiny-cloud-alpine.test index cba50b4..43dab1d 100755 --- a/tests/tiny-cloud-alpine.test +++ b/tests/tiny-cloud-alpine.test @@ -13,6 +13,10 @@ init_tests \ set_network_config_network_interfaces \ set_network_config_auto \ userdata_user_name \ + userdata_user_homedir \ + userdata_user_gecos \ + userdata_user_shell \ + userdata_user_primary_group \ userdata_user_missing_name \ userdata_create_default_user \ userdata_no_default_user \ @@ -126,6 +130,62 @@ userdata_user_name_body() { tiny-cloud main } +userdata_user_homedir_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + name: joeuser + homedir: /var/lib/joe + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o match:"adduser.*-h /var/lib/joe" \ + tiny-cloud main +} + +userdata_user_gecos_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + name: joeuser + gecos: Joe User + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o match:"adduser.*-g Joe User" \ + tiny-cloud main +} + +userdata_user_shell_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + name: joeuser + shell: /bin/bash + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o match:"adduser.*-s /bin/bash" \ + tiny-cloud main +} + +userdata_user_primary_group_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + name: joeuser + primary_group: baz + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o match:"adduser.*-G baz" \ + tiny-cloud main +} + userdata_user_missing_name_body() { fake_userdata_nocloud <<-EOF #alpine-config