The branch stable/14 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=5444803b745efe61f5cbb5cb56e41369b16e7228
commit 5444803b745efe61f5cbb5cb56e41369b16e7228 Author: Sebastien Baylocq <sebastien.bayl...@ovhcloud.com> AuthorDate: 2025-06-05 21:11:33 +0000 Commit: Baptiste Daroussin <b...@freebsd.org> CommitDate: 2025-06-23 07:43:12 +0000 nuageinit: implement runcmd runcmd contains a list of string, each item will be executed in order. Sponsored by: OVHCloud (cherry picked from commit 2f35a5218323b3da7fb71933778c03bbb1c2bb7f) --- libexec/nuageinit/nuageinit | 9 ++++++++- libexec/nuageinit/tests/nuageinit.sh | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/libexec/nuageinit/nuageinit b/libexec/nuageinit/nuageinit index 74a75c88098a..ef215af00924 100755 --- a/libexec/nuageinit/nuageinit +++ b/libexec/nuageinit/nuageinit @@ -362,7 +362,14 @@ if line == "#cloud-config" then if obj.chpasswd ~= nil then nuage.chpasswd(obj.chpasswd) end - + if obj.runcmd then + for _, c in ipairs(obj.runcmd) do + if not os.execute(c) then + nuage.warn("Failed to execute '" .. c .. "'") + -- execute the next command anyway -- + end + end + end else local res, err = os.execute(path .. "/" .. ud) if not res then diff --git a/libexec/nuageinit/tests/nuageinit.sh b/libexec/nuageinit/tests/nuageinit.sh index 811eb9c0c73b..06f4a12d7503 100644 --- a/libexec/nuageinit/tests/nuageinit.sh +++ b/libexec/nuageinit/tests/nuageinit.sh @@ -23,6 +23,7 @@ atf_test_case nocloud_userdata_cloudconfig_ssh_pwauth atf_test_case nocloud_userdata_cloudconfig_chpasswd atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_string atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_list +atf_test_case config2_userdata_runcmd setup_test_adduser() { @@ -700,6 +701,41 @@ EOF atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root } +config2_userdata_runcmd_head() +{ + atf_set "require.user" root +} +config2_userdata_runcmd_body() +{ + mkdir -p media/nuageinit + setup_test_adduser + printf "{}" > media/nuageinit/meta_data.json + cat > media/nuageinit/user_data << 'EOF' +#cloud-config +runcmd: +EOF + chmod 755 "${PWD}"/media/nuageinit/user_data + atf_check -s exit:1 -e match:"attempt to index a nil value" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 + cat > media/nuageinit/user_data << 'EOF' +#cloud-config +runcmd: + - plop +EOF + chmod 755 "${PWD}"/media/nuageinit/user_data + atf_check -s exit:0 -e inline:"sh: plop: not found\nnuageinit: Failed to execute 'plop'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 + + cat > media/nuageinit/user_data << 'EOF' +#cloud-config +runcmd: + - echo "yeah!" > "${PWD}"/media/nuageinit/runcmd_echo + - uname -s > "${PWD}"/media/nuageinit/runcmd_uname +EOF + chmod 755 "${PWD}"/media/nuageinit/user_data + atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 + atf_check -s exit:0 -o inline:"yeah!\n" cat "${PWD}"/media/nuageinit/runcmd_echo + atf_check -s exit:0 -o inline:"FreeBSD\n" cat "${PWD}"/media/nuageinit/runcmd_uname +} + atf_init_test_cases() { atf_add_test_case args @@ -719,4 +755,5 @@ atf_init_test_cases() atf_add_test_case nocloud_userdata_cloudconfig_chpasswd atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_string atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list + atf_add_test_case config2_userdata_runcmd }