nuageinit: implement runcmd

runcmd contains a list of string, each item will be executed in order.

Sponsored by:	OVHCloud
This commit is contained in:
Sebastien Baylocq
2025-06-05 23:11:33 +02:00
committed by Baptiste Daroussin
parent e38f521f53
commit 2f35a52183
2 changed files with 45 additions and 1 deletions
+8 -1
View File
@@ -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
+37
View File
@@ -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
}