nuageinit: implement final_message support

This commit is contained in:
Baptiste Daroussin
2026-06-05 23:03:45 +02:00
parent 71e8122b3f
commit e01f202ecf
2 changed files with 41 additions and 0 deletions
+25
View File
@@ -784,6 +784,30 @@ local function power_state_change(obj)
os.execute(cmd)
end
local function get_uptime()
-- Get system uptime in seconds
local f = io.popen("sysctl -n kern.boottime 2>/dev/null")
local boottime = f:read("*a")
f:close()
local sec = boottime:match("sec = (%d+)")
if sec then
return os.time() - tonumber(sec)
end
return 0
end
local function final_message(obj)
if obj.final_message == nil then return end
local msg = obj.final_message
if type(msg) ~= "string" then
nuage.warn("final_message must be a string")
return
end
local uptime = tostring(math.floor(get_uptime()))
msg = msg:gsub("%$UPTIME", uptime)
nuage.warn(msg, false)
end
local function chpasswd(obj)
if obj.chpasswd == nil then return end
nuage.chpasswd(obj.chpasswd)
@@ -1090,6 +1114,7 @@ elseif line == "#cloud-config" then
users,
chpasswd,
write_files_deferred,
final_message,
power_state_change,
}
+16
View File
@@ -46,6 +46,7 @@ atf_test_case config2_userdata_locale
atf_test_case config2_userdata_fqdn_and_hostname
atf_test_case config2_userdata_write_files
atf_test_case config2_userdata_encode_base64
atf_test_case config2_userdata_final_message
setup_test_adduser()
{
@@ -1401,6 +1402,20 @@ config2_userdata_encode_base64_body()
/usr/libexec/flua -e "print(require('nuage').encode_base64(''))"
}
config2_userdata_final_message_body()
{
mkdir -p media/nuageinit
setup_test_adduser
export NUAGE_RUN_TESTS=1
printf "{}" > media/nuageinit/meta_data.json
cat > media/nuageinit/user_data << 'EOF'
#cloud-config
final_message: "System ready after $UPTIME seconds"
EOF
atf_check -e match:"System ready after [0-9]+ seconds" \
/usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
}
atf_init_test_cases()
{
atf_add_test_case args
@@ -1442,4 +1457,5 @@ atf_init_test_cases()
atf_add_test_case config2_userdata_fqdn_and_hostname
atf_add_test_case config2_userdata_write_files
atf_add_test_case config2_userdata_encode_base64
atf_add_test_case config2_userdata_final_message
}