Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jun 2025 16:26:59 GMT
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 2f35a5218323 - main - nuageinit: implement runcmd
Message-ID:  <202506061626.556GQx10066435@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=2f35a5218323b3da7fb71933778c03bbb1c2bb7f

commit 2f35a5218323b3da7fb71933778c03bbb1c2bb7f
Author:     Sebastien Baylocq <sebastien.baylocq@ovhcloud.com>
AuthorDate: 2025-06-05 21:11:33 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2025-06-06 16:26:37 +0000

    nuageinit: implement runcmd
    
    runcmd contains a list of string, each item will be executed in order.
    
    Sponsored by:   OVHCloud
---
 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
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506061626.556GQx10066435>