git: de0a279c8b69 - main - nuageinit: apply meta-data if user-data is a script

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Sat, 03 Oct 2026 22:46:01 UTC
The branch main has been updated by bapt:

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

commit de0a279c8b6967ffd1cb0c9f76d3cc4658a0f1aa
Author:     Adam Mizerski <adam.mizerski@ovhcloud.com>
AuthorDate: 2026-09-25 08:54:48 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2026-10-03 22:45:22 +0000

    nuageinit: apply meta-data if user-data is a script
    
    Tested by:      adam.mizerski@ovhcloud.com
    Sponsored by:   OVHcloud
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/2446
---
 libexec/nuageinit/nuageinit          | 26 ++++++++++++++------------
 libexec/nuageinit/tests/nuageinit.sh | 19 ++++++++++++++++---
 2 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/libexec/nuageinit/nuageinit b/libexec/nuageinit/nuageinit
index 712a516c5195..758a7f20b305 100755
--- a/libexec/nuageinit/nuageinit
+++ b/libexec/nuageinit/nuageinit
@@ -1173,18 +1173,8 @@ end
 local metadata = load_metadata(citype)
 local line, obj = load_userdata()
 
--- No user-data
-if line == nil then
-	local calls_table = {
-		sethostname,
-		create_default_user,
-	}
-
-	for i = 1, #calls_table do
-		calls_table[i](obj, metadata)
-	end
 --  YAML user-data
-elseif line == "#cloud-config" then
+if line == "#cloud-config" then
 	local pre_network_calls = {
 		ca_certs,
 		mounts,
@@ -1231,7 +1221,19 @@ elseif line == "#cloud-config" then
 			calls_table[i](obj, metadata)
 		end
 	end
-elseif line:sub(1, 2) == "#!" then
+-- No YAML user-data
+else
+	local calls_table = {
+		sethostname,
+		create_default_user,
+	}
+
+	for i = 1, #calls_table do
+		calls_table[i](obj, metadata)
+	end
+end
+
+if line ~= nil and line:sub(1, 2) == "#!" then
 	-- delay for execution at rc.local time --
 	nuage.chmod(root .. "/var/cache/nuageinit/user_data", "0755")
 end
diff --git a/libexec/nuageinit/tests/nuageinit.sh b/libexec/nuageinit/tests/nuageinit.sh
index bfc7e9f13c88..9d443940e92b 100644
--- a/libexec/nuageinit/tests/nuageinit.sh
+++ b/libexec/nuageinit/tests/nuageinit.sh
@@ -92,23 +92,36 @@ EOF
 nocloud_userdata_script_body()
 {
 	mkdir -p media/nuageinit
-	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
+	setup_test_adduser
+	cat > media/nuageinit/meta-data << EOF
+instance-id: iid-local01
+hostname: myhost
+EOF
 	# ensure this is an invalid when parsed with the yaml parser
 	printf "#!/bin/sh\n: ${test:-yes}\necho $test\n" > "${PWD}"/media/nuageinit/user-data
 	chmod 644 "${PWD}"/media/nuageinit/user-data
 	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
 	atf_check test -x var/cache/nuageinit/user_data
 	atf_check -o inline:"#!/bin/sh\n: ${test:-yes}\necho $test\n" cat var/cache/nuageinit/user_data
+	# ensure meta-data is applied, regardless of what is in user-data
+	atf_check -o inline:"hostname='myhost'\n" cat etc/rc.conf.d/hostname
 }
 
 nocloud_user_data_script_body()
 {
 	mkdir -p media/nuageinit
-	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
+	setup_test_adduser
+	cat > media/nuageinit/meta-data << EOF
+instance-id: iid-local01
+hostname: myhost
+EOF
 	printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user_data
-	chmod 755 "${PWD}"/media/nuageinit/user_data
+	chmod 644 "${PWD}"/media/nuageinit/user_data
 	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
+	atf_check test -x var/cache/nuageinit/user_data
 	atf_check -o inline:"#!/bin/sh\necho yeah\n" cat var/cache/nuageinit/user_data
+	# ensure meta-data is applied, regardless of what is in user-data
+	atf_check -o inline:"hostname='myhost'\n" cat etc/rc.conf.d/hostname
 }
 
 nocloud_userdata_cloudconfig_users_head()