git: 5444803b745e - stable/14 - nuageinit: implement runcmd
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 23 Jun 2025 07:44:08 UTC
The branch stable/14 has been updated by bapt:
URL: https://cgit.FreeBSD.org/src/commit/?id=5444803b745efe61f5cbb5cb56e41369b16e7228
commit 5444803b745efe61f5cbb5cb56e41369b16e7228
Author: Sebastien Baylocq <sebastien.baylocq@ovhcloud.com>
AuthorDate: 2025-06-05 21:11:33 +0000
Commit: Baptiste Daroussin <bapt@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
}