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
 }

Reply via email to