From b4776260db977c722a1e68d15f831e4df14f64bd Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 23 May 2023 14:28:23 +0000 Subject: [PATCH] Move create_default_user to main phase --- lib/tiny-cloud/common | 12 ++++++++ lib/tiny-cloud/init | 2 +- lib/tiny-cloud/user-data/alpine-config | 13 +++++++++ tests/tiny-cloud-alpine.test | 40 ++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/lib/tiny-cloud/common b/lib/tiny-cloud/common index a993895..164561e 100644 --- a/lib/tiny-cloud/common +++ b/lib/tiny-cloud/common @@ -46,6 +46,18 @@ replace_word() { done } +# usage: insert_after ... +insert_before() { + local search="$1" addition="$2" + shift 2 + for i in "$@"; do + if [ "$i" = "$search" ]; then + echo "$addition" + fi + echo "$i" + done +} + # usage: insert_after ... insert_after() { local search="$1" addition="$2" diff --git a/lib/tiny-cloud/init b/lib/tiny-cloud/init index f75d7ad..1834dcd 100644 --- a/lib/tiny-cloud/init +++ b/lib/tiny-cloud/init @@ -15,13 +15,13 @@ DEFAULT_ACTIONS_BOOT=" expand_root install_hotplugs set_default_interfaces - create_default_user enable_sshd " DEFAULT_ACTIONS_EARLY=" save_userdata " DEFAULT_ACTIONS_MAIN=" + create_default_user set_hostname set_ssh_keys " diff --git a/lib/tiny-cloud/user-data/alpine-config b/lib/tiny-cloud/user-data/alpine-config index f0de44b..03e0075 100644 --- a/lib/tiny-cloud/user-data/alpine-config +++ b/lib/tiny-cloud/user-data/alpine-config @@ -2,6 +2,7 @@ # vim:set ft=sh: # shellcheck shell=sh +INIT_ACTIONS_MAIN="$(insert_before create_default_user userdata_user $INIT_ACTIONS_MAIN)" INIT_ACTIONS_MAIN="$(insert_after set_hostname \ "userdata_bootcmd userdata_write_files userdata_ntp userdata_apk_cache userdata_apk_repositories userdata_package_update userdata_package_upgrade userdata_packages" \ $INIT_ACTIONS_MAIN)" @@ -13,6 +14,18 @@ get_userdata() { unset IFS } +init__userdata_user() { + local name="$(get_userdata user/name)" + if [ -z "$name" ]; then + name="$(get_userdata user)" + if [ -n "$(get_userdata user/$name)" ]; then + log -s err "user/name is required" + return + fi + fi + CLOUD_USER="${name:-$CLOUD_USER}" +} + init__userdata_bootcmd() { # run bootcmd local bootcmds="$(get_userdata bootcmd)" diff --git a/tests/tiny-cloud-alpine.test b/tests/tiny-cloud-alpine.test index c009473..6a8ccc3 100755 --- a/tests/tiny-cloud-alpine.test +++ b/tests/tiny-cloud-alpine.test @@ -12,6 +12,9 @@ lib="$srcdir"/lib/tiny-cloud/cloud/alpine/init init_tests \ set_network_config_network_interfaces \ set_network_config_auto \ + userdata_user_name \ + userdata_user_missing_name \ + userdata_create_default_user \ userdata_bootcmd \ userdata_write_files \ userdata_ntp \ @@ -82,6 +85,43 @@ set_network_config_auto_body() { fi } +userdata_user_name_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + name: joeuser + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o match:"adduser.*joeuser" \ + tiny-cloud main +} + +userdata_user_missing_name_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + user: + gecos: Foo B. Baz + EOF + atf_check -e ignore -o ignore tiny-cloud early + atf_check \ + -e match:"create_default_user: done" \ + -o not-match:"adduser.*gecos" \ + tiny-cloud main +} + +userdata_create_default_user_body() { + fake_userdata_nocloud <<-EOF + #alpine-config + 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_bootcmd_body() { fake_userdata_nocloud <<-EOF #alpine-config