git: 68c7c28d0e65 - stable/14 - nuageinit: Lua check and lint files

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Tue, 08 Oct 2024 07:07:43 UTC
The branch stable/14 has been updated by bapt:

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

commit 68c7c28d0e65a3c59810a1b2d441c74bfaeab81a
Author:     Jose Luis Duran <jlduran@gmail.com>
AuthorDate: 2024-07-29 18:40:52 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2024-10-08 07:04:01 +0000

    nuageinit: Lua check and lint files
    
    Mostly white space, style, and luacheck compliance.
    
    Signed-off-by: Jose Luis Duran <jlduran@gmail.com>
    (cherry picked from commit 504981357aa36365784458cfe8d9e23097bfac7b)
---
 libexec/nuageinit/nuage.lua             |  56 +++++-----
 libexec/nuageinit/nuageinit             | 158 ++++++++++++++-------------
 libexec/nuageinit/tests/Makefile        |  10 +-
 libexec/nuageinit/tests/addgroup.lua    |   1 +
 libexec/nuageinit/tests/addsshkey.lua   |   3 +
 libexec/nuageinit/tests/adduser.lua     |   1 +
 libexec/nuageinit/tests/dirname.lua     |   7 +-
 libexec/nuageinit/tests/err.lua         |   1 +
 libexec/nuageinit/tests/nuage.sh        |  21 +++-
 libexec/nuageinit/tests/nuageinit.sh    | 187 ++++++++++++++++----------------
 libexec/nuageinit/tests/sethostname.lua |   1 +
 libexec/nuageinit/tests/utils.sh        |  18 ++-
 libexec/nuageinit/tests/warn.lua        |   1 +
 libexec/nuageinit/yaml.lua              |   1 +
 14 files changed, 258 insertions(+), 208 deletions(-)

diff --git a/libexec/nuageinit/nuage.lua b/libexec/nuageinit/nuage.lua
index 116ab143ccfa..d35d3725fa99 100644
--- a/libexec/nuageinit/nuage.lua
+++ b/libexec/nuageinit/nuage.lua
@@ -1,15 +1,17 @@
+---
 -- SPDX-License-Identifier: BSD-2-Clause
 --
 -- Copyright(c) 2022 Baptiste Daroussin <bapt@FreeBSD.org>
 
+local lfs = require("lfs")
 local pu = require("posix.unistd")
 
 local function warnmsg(str)
-	io.stderr:write(str.."\n")
+	io.stderr:write(str .. "\n")
 end
 
 local function errmsg(str)
-	io.stderr:write(str.."\n")
+	io.stderr:write(str .. "\n")
 	os.exit(1)
 end
 
@@ -28,15 +30,17 @@ local function mkdir_p(path)
 	if lfs.attributes(path, "mode") ~= nil then
 		return true
 	end
-	local r,err = mkdir_p(dirname(path))
+	local r, err = mkdir_p(dirname(path))
 	if not r then
-		return nil,err.." (creating "..path..")"
+		return nil, err .. " (creating " .. path .. ")"
 	end
 	return lfs.mkdir(path)
 end
 
 local function sethostname(hostname)
-	if hostname == nil then return end
+	if hostname == nil then
+		return
+	end
 	local root = os.getenv("NUAGE_FAKE_ROOTDIR")
 	if not root then
 		root = ""
@@ -44,12 +48,12 @@ local function sethostname(hostname)
 	local hostnamepath = root .. "/etc/rc.conf.d/hostname"
 
 	mkdir_p(dirname(hostnamepath))
-	local f,err = io.open(hostnamepath, "w")
+	local f, err = io.open(hostnamepath, "w")
 	if not f then
-		warnmsg("Impossible to open "..hostnamepath .. ":" ..err)
+		warnmsg("Impossible to open " .. hostnamepath .. ":" .. err)
 		return
 	end
-	f:write("hostname=\""..hostname.."\"\n")
+	f:write('hostname="' .. hostname .. '"\n')
 	f:close()
 end
 
@@ -62,7 +66,7 @@ local function splitlist(list)
 	elseif type(list) == "table" then
 		ret = list
 	else
-		warnmsg("Invalid type ".. type(list) ..", expecting table or string")
+		warnmsg("Invalid type " .. type(list) .. ", expecting table or string")
 	end
 	return ret
 end
@@ -77,7 +81,7 @@ local function adduser(pwd)
 	if root then
 		cmd = cmd .. "-R " .. root .. " "
 	end
-	local f = io.popen(cmd .. " usershow " ..pwd.name .. " -7 2>/dev/null")
+	local f = io.popen(cmd .. " usershow " .. pwd.name .. " -7 2> /dev/null")
 	local pwdstr = f:read("*a")
 	f:close()
 	if pwdstr:len() ~= 0 then
@@ -89,10 +93,10 @@ local function adduser(pwd)
 	if not pwd.homedir then
 		pwd.homedir = "/home/" .. pwd.name
 	end
-	local extraargs=""
+	local extraargs = ""
 	if pwd.groups then
 		local list = splitlist(pwd.groups)
-		extraargs = " -G ".. table.concat(list, ',')
+		extraargs = " -G " .. table.concat(list, ",")
 	end
 	-- pw will automatically create a group named after the username
 	-- do not add a -g option in this case
@@ -108,23 +112,23 @@ local function adduser(pwd)
 	local precmd = ""
 	local postcmd = ""
 	if pwd.passwd then
-		precmd = "echo "..pwd.passwd .. "| "
+		precmd = "echo " .. pwd.passwd .. "| "
 		postcmd = " -H 0 "
 	elseif pwd.plain_text_passwd then
-		precmd = "echo "..pwd.plain_text_passwd .. "| "
+		precmd = "echo " .. pwd.plain_text_passwd .. "| "
 		postcmd = " -h 0 "
 	end
 	cmd = precmd .. "pw "
 	if root then
 		cmd = cmd .. "-R " .. root .. " "
 	end
-	cmd = cmd .. "useradd -n ".. pwd.name .. " -M 0755 -w none "
-	cmd = cmd .. extraargs .. " -c '".. pwd.gecos
-	cmd = cmd .. "' -d '" .. pwd.homedir .. "' -s "..pwd.shell .. postcmd
+	cmd = cmd .. "useradd -n " .. pwd.name .. " -M 0755 -w none "
+	cmd = cmd .. extraargs .. " -c '" .. pwd.gecos
+	cmd = cmd .. "' -d '" .. pwd.homedir .. "' -s " .. pwd.shell .. postcmd
 
 	local r = os.execute(cmd)
 	if not r then
-		warnmsg("nuageinit: fail to add user "..pwd.name);
+		warnmsg("nuageinit: fail to add user " .. pwd.name)
 		warnmsg(cmd)
 		return nil
 	end
@@ -149,7 +153,7 @@ local function addgroup(grp)
 	if root then
 		cmd = cmd .. "-R " .. root .. " "
 	end
-	local f = io.popen(cmd .. " groupshow " ..grp.name .. " 2>/dev/null")
+	local f = io.popen(cmd .. " groupshow " .. grp.name .. " 2> /dev/null")
 	local grpstr = f:read("*a")
 	f:close()
 	if grpstr:len() ~= 0 then
@@ -158,16 +162,16 @@ local function addgroup(grp)
 	local extraargs = ""
 	if grp.members then
 		local list = splitlist(grp.members)
-		extraargs = " -M " .. table.concat(list, ',')
+		extraargs = " -M " .. table.concat(list, ",")
 	end
 	cmd = "pw "
 	if root then
 		cmd = cmd .. "-R " .. root .. " "
 	end
-	cmd = cmd .. "groupadd -n ".. grp.name .. extraargs
+	cmd = cmd .. "groupadd -n " .. grp.name .. extraargs
 	local r = os.execute(cmd)
 	if not r then
-		warnmsg("nuageinit: fail to add group ".. grp.name);
+		warnmsg("nuageinit: fail to add group " .. grp.name)
 		warnmsg(cmd)
 		return false
 	end
@@ -196,7 +200,7 @@ local function addsshkey(homedir, key)
 
 	local f = io.open(ak_path, "a")
 	if not f then
-		warnmsg("nuageinit: impossible to open "..ak_path)
+		warnmsg("nuageinit: impossible to open " .. ak_path)
 		return
 	end
 	f:write(key .. "\n")
@@ -214,12 +218,12 @@ end
 local n = {
 	warn = warnmsg,
 	err = errmsg,
+	dirname = dirname,
+	mkdir_p = mkdir_p,
 	sethostname = sethostname,
 	adduser = adduser,
 	addgroup = addgroup,
-	addsshkey = addsshkey,
-	dirname = dirname,
-	mkdir_p = mkdir_p,
+	addsshkey = addsshkey
 }
 
 return n
diff --git a/libexec/nuageinit/nuageinit b/libexec/nuageinit/nuageinit
index 622e294bb531..50d77dfef9f5 100755
--- a/libexec/nuageinit/nuageinit
+++ b/libexec/nuageinit/nuageinit
@@ -1,18 +1,18 @@
 #!/usr/libexec/flua
-
+---
 -- SPDX-License-Identifier: BSD-2-Clause-FreeBSD
 --
 -- Copyright(c) 2022 Baptiste Daroussin <bapt@FreeBSD.org>
 
 local nuage = require("nuage")
+local ucl = require("ucl")
 local yaml = require("yaml")
 
 if #arg ~= 2 then
-	nuage.err("Usage ".. arg[0] .." <cloud-init directory> [config-2|nocloud]")
+	nuage.err("Usage " .. arg[0] .. " <cloud-init directory> [config-2|nocloud]")
 end
 local path = arg[1]
 local citype = arg[2]
-local ucl = require("ucl")
 
 local default_user = {
 	name = "freebsd",
@@ -30,9 +30,9 @@ end
 
 local function open_config(name)
 	nuage.mkdir_p(root .. "/etc/rc.conf.d")
-	local f,err = io.open(root .. "/etc/rc.conf.d/" .. name, "w")
+	local f, err = io.open(root .. "/etc/rc.conf.d/" .. name, "w")
 	if not f then
-		nuage.err("nuageinit: unable to open "..name.." config: " .. err)
+		nuage.err("nuageinit: unable to open " .. name .. " config: " .. err)
 	end
 	return f
 end
@@ -40,17 +40,17 @@ end
 local function get_ifaces()
 	local parser = ucl.parser()
 	-- grab ifaces
-	local ns  = io.popen('netstat -i --libxo json')
+	local ns = io.popen("netstat -i --libxo json")
 	local netres = ns:read("*a")
 	ns:close()
-	local res,err = parser:parse_string(netres)
+	local res, err = parser:parse_string(netres)
 	if not res then
 		nuage.warn("Error parsing netstat -i --libxo json outout: " .. err)
 		return nil
 	end
 	local ifaces = parser:get_object()
 	local myifaces = {}
-	for _,iface in pairs(ifaces["statistics"]["interface"]) do
+	for _, iface in pairs(ifaces["statistics"]["interface"]) do
 		if iface["network"]:match("<Link#%d>") then
 			local s = iface["address"]
 			myifaces[s:lower()] = iface["name"]
@@ -67,7 +67,7 @@ local function config2_network(p)
 		return
 	end
 	f:close()
-	local res,err = parser:parse_file(p .. "/network_data.json")
+	local res, err = parser:parse_file(p .. "/network_data.json")
 	if not res then
 		nuage.warn("nuageinit: error parsing network_data.json: " .. err)
 		return
@@ -80,7 +80,7 @@ local function config2_network(p)
 		return
 	end
 	local mylinks = {}
-	for _,v in pairs(obj["links"]) do
+	for _, v in pairs(obj["links"]) do
 		local s = v["ethernet_mac_address"]:lower()
 		mylinks[v["id"]] = ifaces[s]
 	end
@@ -91,66 +91,72 @@ local function config2_network(p)
 	local ipv6 = {}
 	local ipv6_routes = {}
 	local ipv4 = {}
-	for _,v in pairs(obj["networks"]) do
+	for _, v in pairs(obj["networks"]) do
 		local interface = mylinks[v["link"]]
 		if v["type"] == "ipv4_dhcp" then
-			network:write("ifconfig_"..interface.."=\"DHCP\"\n")
+			network:write("ifconfig_" .. interface .. '="DHCP"\n')
 		end
 		if v["type"] == "ipv4" then
-			network:write("ifconfig_"..interface.."=\"inet "..v["ip_address"].." netmask " .. v["netmask"] .. "\"\n")
+			network:write(
+				"ifconfig_" .. interface .. '="inet ' .. v["ip_address"] .. " netmask " .. v["netmask"] .. '"\n'
+			)
 			if v["gateway"] then
-				routing:write("defaultrouter=\""..v["gateway"].."\"\n")
+				routing:write('defaultrouter="' .. v["gateway"] .. '"\n')
 			end
 			if v["routes"] then
-				for i,r in ipairs(v["routes"]) do
+				for i, r in ipairs(v["routes"]) do
 					local rname = "cloudinit" .. i .. "_" .. interface
-					if v["gateway"] and v["gateway"] == r["gateway"] then goto next end
+					if v["gateway"] and v["gateway"] == r["gateway"] then
+						goto next
+					end
 					if r["network"] == "0.0.0.0" then
-						routing:write("defaultrouter=\""..r["gateway"].."\"\n")
+						routing:write('defaultrouter="' .. r["gateway"] .. '"\n')
 						goto next
 					end
-					routing:write("route_".. rname .. "=\"-net ".. r["network"] .. " ")
-					routing:write(r["gateway"] .. " " .. r["netmask"] .. "\"\n")
+					routing:write("route_" .. rname .. '="-net ' .. r["network"] .. " ")
+					routing:write(r["gateway"] .. " " .. r["netmask"] .. '"\n')
 					ipv4[#ipv4 + 1] = rname
 					::next::
 				end
 			end
 		end
 		if v["type"] == "ipv6" then
-			ipv6[#ipv6+1] = interface
-			ipv6_routes[#ipv6_routes+1] = interface
-			network:write("ifconfig_"..interface.."_ipv6=\"inet6 "..v["ip_address"].."\"\n")
+			ipv6[#ipv6 + 1] = interface
+			ipv6_routes[#ipv6_routes + 1] = interface
+			network:write("ifconfig_" .. interface .. '_ipv6="inet6 ' .. v["ip_address"] .. '"\n')
 			if v["gateway"] then
-				routing:write("ipv6_defaultrouter=\""..v["gateway"].."\"\n")
-				routing:write("ipv6_route_"..interface.."=\""..v["gateway"])
-				routing:write(" -prefixlen 128 -interface "..interface.."\"\n")
+				routing:write('ipv6_defaultrouter="' .. v["gateway"] .. '"\n')
+				routing:write("ipv6_route_" .. interface .. '="' .. v["gateway"])
+				routing:write(" -prefixlen 128 -interface " .. interface .. '"\n')
 			end
 			-- TODO compute the prefixlen for the routes
 			--if v["routes"] then
-			--	for i,r in ipairs(v["routes"]) do
+			--	for i, r in ipairs(v["routes"]) do
 			--	local rname = "cloudinit" .. i .. "_" .. mylinks[v["link"]]
 			--		-- skip all the routes which are already covered by the default gateway, some provider
 			--		-- still list plenty of them.
-			--		if v["gateway"] == r["gateway"] then goto next end
-			--		routing:write("ipv6_route_" .. rname .. "\"\n")
-			--		ipv6_routes[#ipv6_routes+1] = rname
+			--		if v["gateway"] == r["gateway"] then
+			--			goto next
+			--		end
+			--		routing:write("ipv6_route_" .. rname .. '"\n')
+			--		ipv6_routes[#ipv6_routes + 1] = rname
 			--		::next::
 			--	end
 			--end
 		end
 	end
 	if #ipv4 > 0 then
-		routing:write("static_routes=\"")
-		routing:write(table.concat(ipv4, " ") .. "\"\n")
+		routing:write('static_routes="')
+		routing:write(table.concat(ipv4, " ") .. '"\n')
 	end
 	if #ipv6 > 0 then
-		network:write("ipv6_network_interfaces=\"")
-		network:write(table.concat(ipv6, " ") .. "\"\n")
-		network:write("ipv6_default_interface=\""..ipv6[1].."\"\n")
+		network:write('ipv6_network_interfaces="')
+		network:write(table.concat(ipv6, " ") .. '"\n')
+		network:write('ipv6_default_interface="' .. ipv6[1] .. '"\n')
 	end
 	if #ipv6_routes > 0 then
-		routing:write("ipv6_static_routes=\"")
-		routing:write(table.concat(ipv6, " ") .. "\"\n")
+		routing:write('ipv6_static_routes="')
+		routing:write(table.concat(ipv6, " ") .. '"\n')
 	end
 	network:close()
 	routing:close()
@@ -158,7 +164,7 @@ end
 
 if citype == "config-2" then
 	local parser = ucl.parser()
-	local res,err = parser:parse_file(path..'/meta_data.json')
+	local res, err = parser:parse_file(path .. "/meta_data.json")
 
 	if not res then
 		nuage.err("nuageinit: error parsing config-2: meta_data.json: " .. err)
@@ -175,32 +181,32 @@ if citype == "config-2" then
 	-- network
 	config2_network(path)
 elseif citype == "nocloud" then
-	local f,err = io.open(path.."/meta-data")
+	local f, err = io.open(path .. "/meta-data")
 	if err then
-		nuage.err("nuageinit: error parsing nocloud meta-data: ".. err)
+		nuage.err("nuageinit: error parsing nocloud meta-data: " .. err)
 	end
 	local obj = yaml.eval(f:read("*a"))
 	f:close()
 	if not obj then
 		nuage.err("nuageinit: error parsing nocloud meta-data")
 	end
-	local hostname = obj['local-hostname']
+	local hostname = obj["local-hostname"]
 	if not hostname then
-		hostname = obj['hostname']
+		hostname = obj["hostname"]
 	end
 	if hostname then
 		nuage.sethostname(hostname)
 	end
 else
-	nuage.err("Unknown cloud init type: ".. citype)
+	nuage.err("Unknown cloud init type: " .. citype)
 end
 
 -- deal with user-data
 local ud = nil
 local f = nil
-userdatas = { "user-data", "user_data" }
-for _,v in pairs(userdatas) do
-	f = io.open(path..'/' .. v, "r")
+userdatas = {"user-data", "user_data"}
+for _, v in pairs(userdatas) do
+	f = io.open(path .. "/" .. v, "r")
 	if f then
 		ud = v
 		break
@@ -209,33 +215,33 @@ end
 if not f then
 	os.exit(0)
 end
-local line = f:read('*l')
+local line = f:read("*l")
 f:close()
 if line == "#cloud-config" then
-	f = io.open(path.."/" .. ud)
+	f = io.open(path .. "/" .. ud)
 	local obj = yaml.eval(f:read("*a"))
 	f:close()
 	if not obj then
 		nuage.err("nuageinit: error parsing cloud-config file: " .. ud)
 	end
 	if obj.groups then
-		for n,g in pairs(obj.groups) do
+		for n, g in pairs(obj.groups) do
 			if (type(g) == "string") then
 				local r = nuage.addgroup({name = g})
 				if not r then
-					nuage.warn("nuageinit: failed to add group: ".. g)
+					nuage.warn("nuageinit: failed to add group: " .. g)
 				end
 			elseif type(g) == "table" then
-				for k,v in pairs(g) do
+				for k, v in pairs(g) do
 					nuage.addgroup({name = k, members = v})
 				end
 			else
-				nuage.warn("nuageinit: invalid type : "..type(g).." for users entry number "..n);
+				nuage.warn("nuageinit: invalid type: " .. type(g) .. " for users entry number " .. n)
 			end
 		end
 	end
 	if obj.users then
-		for n,u in pairs(obj.users) do
+		for n, u in pairs(obj.users) do
 			if type(u) == "string" then
 				if u == "default" then
 					nuage.adduser(default_user)
@@ -249,12 +255,12 @@ if line == "#cloud-config" then
 				end
 				local homedir = nuage.adduser(u)
 				if u.ssh_authorized_keys then
-					for _,v in ipairs(u.ssh_authorized_keys) do
+					for _, v in ipairs(u.ssh_authorized_keys) do
 						nuage.addsshkey(homedir, v)
 					end
 				end
 			else
-				nuage.warn("nuageinit: invalid type : "..type(u).." for users entry number "..n);
+				nuage.warn("nuageinit: invalid type : " .. type(u) .. " for users entry number " .. n)
 			end
 			::unext::
 		end
@@ -264,7 +270,7 @@ if line == "#cloud-config" then
 	end
 	if obj.ssh_authorized_keys then
 		local homedir = nuage.adduser(default_user)
-		for _,k in ipairs(obj.ssh_authorized_keys) do
+		for _, k in ipairs(obj.ssh_authorized_keys) do
 			nuage.addsshkey(homedir, k)
 		end
 	end
@@ -273,48 +279,52 @@ if line == "#cloud-config" then
 		nuage.mkdir_p(root .. "/etc/rc.conf.d")
 		local network = open_config("network")
 		local routing = open_config("routing")
-		local ipv6={}
-		for _,v in pairs(obj.network.ethernets) do
-			if not v.match then goto next end
-			if not v.match.macaddress then goto next end
+		local ipv6 = {}
+		for _, v in pairs(obj.network.ethernets) do
+			if not v.match then
+				goto next
+			end
+			if not v.match.macaddress then
+				goto next
+			end
 			if not ifaces[v.match.macaddress] then
-				nuage.warn("nuageinit: not interface matching: "..v.match.macaddress)
+				nuage.warn("nuageinit: not interface matching: " .. v.match.macaddress)
 				goto next
 			end
 			local interface = ifaces[v.match.macaddress]
 			if v.dhcp4 then
-				network:write("ifconfig_"..interface.."=\"DHCP\"\n")
+				network:write("ifconfig_" .. interface .. '="DHCP"\n')
 			elseif v.addresses then
-				for _,a in pairs(v.addresses) do
+				for _, a in pairs(v.addresses) do
 					if a:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)") then
-						network:write("ifconfig_"..interface.."=\"inet "..a.."\"\n")
+						network:write("ifconfig_" .. interface .. '="inet ' .. a .. '"\n')
 					else
-						network:write("ifconfig_"..interface.."_ipv6=\"inet6 "..a.."\"\n")
-						ipv6[#ipv6 +1] = interface
+						network:write("ifconfig_" .. interface .. '_ipv6="inet6 ' .. a .. '"\n')
+						ipv6[#ipv6 + 1] = interface
 					end
 				end
 			end
 			if v.gateway4 then
-				routing:write("defaultrouter=\""..v.gateway4.."\"\n")
+				routing:write('defaultrouter="' .. v.gateway4 .. '"\n')
 			end
 			if v.gateway6 then
-				routing:write("ipv6_defaultrouter=\""..v.gateway6.."\"\n")
-				routing:write("ipv6_route_"..interface.."=\""..v.gateway6)
-				routing:write(" -prefixlen 128 -interface "..interface.."\"\n")
+				routing:write('ipv6_defaultrouter="' .. v.gateway6 .. '"\n')
+				routing:write("ipv6_route_" .. interface .. '="' .. v.gateway6)
+				routing:write(" -prefixlen 128 -interface " .. interface .. '"\n')
 			end
 			::next::
 		end
 		if #ipv6 > 0 then
-			network:write("ipv6_network_interfaces=\"")
-			network:write(table.concat(ipv6, " ") .. "\"\n")
-			network:write("ipv6_default_interface=\""..ipv6[1].."\"\n")
+			network:write('ipv6_network_interfaces="')
+			network:write(table.concat(ipv6, " ") .. '"\n')
+			network:write('ipv6_default_interface="' .. ipv6[1] .. '"\n')
 		end
 		network:close()
 		routing:close()
 	end
 else
-	local res,err = os.execute(path..'/' .. ud)
+	local res, err = os.execute(path .. "/" .. ud)
 	if not res then
-		nuage.err("nuageinit: error executing user-data script: ".. err)
+		nuage.err("nuageinit: error executing user-data script: " .. err)
 	end
 end
diff --git a/libexec/nuageinit/tests/Makefile b/libexec/nuageinit/tests/Makefile
index d5b3bd9dcc82..ccb81c090445 100644
--- a/libexec/nuageinit/tests/Makefile
+++ b/libexec/nuageinit/tests/Makefile
@@ -2,12 +2,12 @@ PACKAGE=	tests
 
 ATF_TESTS_SH=	nuage utils nuageinit
 
-${PACKAGE}FILES+=	warn.lua
-${PACKAGE}FILES+=	err.lua
-${PACKAGE}FILES+=	dirname.lua
-${PACKAGE}FILES+=	sethostname.lua
+${PACKAGE}FILES+=	addgroup.lua
 ${PACKAGE}FILES+=	addsshkey.lua
 ${PACKAGE}FILES+=	adduser.lua
-${PACKAGE}FILES+=	addgroup.lua
+${PACKAGE}FILES+=	dirname.lua
+${PACKAGE}FILES+=	err.lua
+${PACKAGE}FILES+=	sethostname.lua
+${PACKAGE}FILES+=	warn.lua
 
 .include <bsd.test.mk>
diff --git a/libexec/nuageinit/tests/addgroup.lua b/libexec/nuageinit/tests/addgroup.lua
index 60a0d8346793..a36a5e24c7b3 100644
--- a/libexec/nuageinit/tests/addgroup.lua
+++ b/libexec/nuageinit/tests/addgroup.lua
@@ -1,6 +1,7 @@
 #!/usr/libexec/flua
 
 local n = require("nuage")
+
 if n.addgroup() then
 	n.err("addgroup should not accept empty value")
 end
diff --git a/libexec/nuageinit/tests/addsshkey.lua b/libexec/nuageinit/tests/addsshkey.lua
index 3aa5f7619ec2..47e102c162a9 100644
--- a/libexec/nuageinit/tests/addsshkey.lua
+++ b/libexec/nuageinit/tests/addsshkey.lua
@@ -1,2 +1,5 @@
+#!/usr/libexec/flua
+
 local n = require("nuage")
+
 n.addsshkey(".", "mykey")
diff --git a/libexec/nuageinit/tests/adduser.lua b/libexec/nuageinit/tests/adduser.lua
index 9366d2abd0f4..cef6be0c0e0c 100644
--- a/libexec/nuageinit/tests/adduser.lua
+++ b/libexec/nuageinit/tests/adduser.lua
@@ -1,6 +1,7 @@
 #!/usr/libexec/flua
 
 local n = require("nuage")
+
 if n.adduser() then
 	n.err("adduser should not accept empty value")
 end
diff --git a/libexec/nuageinit/tests/dirname.lua b/libexec/nuageinit/tests/dirname.lua
index d1268e48575c..7e3a2c835502 100644
--- a/libexec/nuageinit/tests/dirname.lua
+++ b/libexec/nuageinit/tests/dirname.lua
@@ -1,8 +1,11 @@
+#!/usr/libexec/flua
+
 local n = require("nuage")
+
 print(n.dirname("/my/path/path1"))
 if n.dirname("path") then
-	nuage.err("Expecting nil for n.dirname(\"path\")")
+	n.err('Expecting nil for n.dirname("path")')
 end
 if n.dirname() then
-	nuage.err("Expecting nil for n.dirname")
+	n.err("Expecting nil for n.dirname")
 end
diff --git a/libexec/nuageinit/tests/err.lua b/libexec/nuageinit/tests/err.lua
index c62fa1098f09..567d4f2df66e 100644
--- a/libexec/nuageinit/tests/err.lua
+++ b/libexec/nuageinit/tests/err.lua
@@ -1,4 +1,5 @@
 #!/usr/libexec/flua
 
 local n = require("nuage")
+
 n.err("plop")
diff --git a/libexec/nuageinit/tests/nuage.sh b/libexec/nuageinit/tests/nuage.sh
index 29842bff3d6b..4e2353176b16 100644
--- a/libexec/nuageinit/tests/nuage.sh
+++ b/libexec/nuageinit/tests/nuage.sh
@@ -1,9 +1,16 @@
+#-
+# Copyright (c) 2022 Baptiste Daroussin <bapt@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
 atf_test_case sethostname
 atf_test_case addsshkey
 atf_test_case adduser
 atf_test_case addgroup
 
-sethostname_body() {
+sethostname_body()
+{
 	export NUAGE_FAKE_ROOTDIR="$(pwd)"
 	atf_check /usr/libexec/flua $(atf_get_srcdir)/sethostname.lua
 	if [ ! -f etc/rc.conf.d/hostname ]; then
@@ -12,7 +19,8 @@ sethostname_body() {
 	atf_check -o inline:"hostname=\"myhostname\"\n" cat etc/rc.conf.d/hostname
 }
 
-addsshkey_body() {
+addsshkey_body()
+{
 	atf_check /usr/libexec/flua $(atf_get_srcdir)/addsshkey.lua
 	if [ ! -f .ssh/authorized_keys ]; then
 		atf_fail "ssh key not added"
@@ -24,7 +32,8 @@ addsshkey_body() {
 	atf_check -o inline:"mykey\nmykey\n" cat .ssh/authorized_keys
 }
 
-adduser_body() {
+adduser_body()
+{
 	export NUAGE_FAKE_ROOTDIR="$(pwd)"
 	if [ $(id -u) -ne 0 ]; then
 		atf_skip "root required"
@@ -38,7 +47,8 @@ adduser_body() {
 	atf_check -o inline:"impossible_username::1001:1001::0:0:impossible_username User:/home/impossible_username:/bin/sh\n" grep impossible_username etc/master.passwd
 }
 
-addgroup_body() {
+addgroup_body()
+{
 	export NUAGE_FAKE_ROOTDIR="$(pwd)"
 	mkdir etc
 	printf "wheel:*:0:root\n" > etc/group
@@ -46,7 +56,8 @@ addgroup_body() {
 	atf_check -o inline:"impossible_groupname:*:1001:\n" grep impossible_groupname etc/group
 }
 
-atf_init_test_cases() {
+atf_init_test_cases()
+{
 	atf_add_test_case sethostname
 	atf_add_test_case addsshkey
 	atf_add_test_case adduser
diff --git a/libexec/nuageinit/tests/nuageinit.sh b/libexec/nuageinit/tests/nuageinit.sh
index b5078e256853..64ac066fefbf 100644
--- a/libexec/nuageinit/tests/nuageinit.sh
+++ b/libexec/nuageinit/tests/nuageinit.sh
@@ -1,8 +1,13 @@
+#-
+# Copyright (c) 2022 Baptiste Daroussin <bapt@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
 atf_test_case args
 atf_test_case nocloud
 atf_test_case nocloud_userdata_script
 atf_test_case nocloud_user_data_script
-atf_test_case nocloud_userdata_cloudconfig
 atf_test_case nocloud_userdata_cloudconfig_users
 atf_test_case nocloud_network
 atf_test_case config2
@@ -12,7 +17,6 @@ atf_test_case config2_pubkeys_meta_data
 atf_test_case config2_network
 atf_test_case config2_network_static_v4
 
-
 args_body()
 {
 	atf_check -s exit:1 -e inline:"Usage /usr/libexec/nuageinit <cloud-init directory> [config-2|nocloud]\n" /usr/libexec/nuageinit
@@ -43,8 +47,8 @@ nocloud_userdata_script_body()
 	here=$(pwd)
 	mkdir -p media/nuageinit
 	printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data
-	printf "#!/bin/sh\necho "yeah"\n" > ${here}/media/nuageinit/user-data
-	chmod 755  ${here}/media/nuageinit/user-data
+	printf "#!/bin/sh\necho yeah\n" > ${here}/media/nuageinit/user-data
+	chmod 755 ${here}/media/nuageinit/user-data
 	atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit ${here}/media/nuageinit nocloud
 }
 
@@ -53,8 +57,8 @@ nocloud_user_data_script_body()
 	here=$(pwd)
 	mkdir -p media/nuageinit
 	printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data
-	printf "#!/bin/sh\necho "yeah"\n" > ${here}/media/nuageinit/user_data
-	chmod 755  ${here}/media/nuageinit/user_data
+	printf "#!/bin/sh\necho yeah\n" > ${here}/media/nuageinit/user_data
+	chmod 755 ${here}/media/nuageinit/user_data
 	atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit ${here}/media/nuageinit nocloud
 }
 
@@ -68,16 +72,16 @@ nocloud_userdata_cloudconfig_users_body()
 	mkdir -p media/nuageinit
 	printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data
 	mkdir -p etc
-	cat > etc/master.passwd <<EOF
+	cat > etc/master.passwd << EOF
 root:*:0:0::0:0:Charlie &:/root:/bin/csh
 sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
 EOF
 	pwd_mkdb -d etc ${here}/etc/master.passwd
-	cat > etc/group <<EOF
+	cat > etc/group << EOF
 wheel:*:0:root
 users:*:1:
 EOF
-	cat > media/nuageinit/user-data <<EOF
+	cat > media/nuageinit/user-data << EOF
 #cloud-config
 groups:
   - admingroup: [root,sys]
@@ -115,12 +119,12 @@ nocloud_network_body()
 	here=$(pwd)
 	mkdir -p media/nuageinit
 	mkdir -p etc
-	cat > etc/master.passwd <<EOF
+	cat > etc/master.passwd << EOF
 root:*:0:0::0:0:Charlie &:/root:/bin/csh
 sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
 EOF
 	pwd_mkdb -d etc ${here}/etc/master.passwd
-	cat > etc/group <<EOF
+	cat > etc/group << EOF
 wheel:*:0:root
 users:*:1:
 EOF
@@ -135,16 +139,15 @@ EOF
 	myiface=$1
 	myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }')
 	printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data
-	cat > media/nuageinit/user-data <<EOF
+	cat > media/nuageinit/user-data << EOF
 #cloud-config
-#
 network:
   version: 2
   ethernets:
     # opaque ID for physical interfaces, only referred to by other stanzas
     id0:
       match:
-        macaddress: '${myaddr}'
+        macaddress: "$myaddr"
       addresses:
         - 192.168.14.2/24
         - 2001:1::1/64
@@ -153,13 +156,13 @@ network:
 EOF
 	export NUAGE_FAKE_ROOTDIR=$(pwd)
 	atf_check /usr/libexec/nuageinit ${here}/media/nuageinit nocloud
-	cat > network <<EOF
+	cat > network << EOF
 ifconfig_${myiface}="inet 192.168.14.2/24"
 ifconfig_${myiface}_ipv6="inet6 2001:1::1/64"
 ipv6_network_interfaces="${myiface}"
 ipv6_default_interface="${myiface}"
 EOF
-	cat > routing <<EOF
+	cat > routing << EOF
 defaultrouter="192.168.14.1"
 ipv6_defaultrouter="2001:1::2"
 ipv6_route_${myiface}="2001:1::2 -prefixlen 128 -interface ${myiface}"
@@ -176,7 +179,7 @@ config2_body()
 	atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2
 	cat > media/nuageinit/meta_data.json << EOF
 {
-   "hostname": "cloudimg",
+    "hostname": "cloudimg"
 }
 EOF
 	export NUAGE_FAKE_ROOTDIR=$(pwd)
@@ -195,17 +198,16 @@ config2_pubkeys_body()
 	touch media/nuageinit/meta_data.json
 	cat > media/nuageinit/user-data << EOF
 #cloud-config
-
 ssh_authorized_keys:
   - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova"
 EOF
 	mkdir -p etc
-	cat > etc/master.passwd <<EOF
+	cat > etc/master.passwd << EOF
 root:*:0:0::0:0:Charlie &:/root:/bin/csh
 sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
 EOF
 	pwd_mkdb -d etc ${here}/etc/master.passwd
-	cat > etc/group <<EOF
+	cat > etc/group << EOF
 wheel:*:0:root
 users:*:1:
 EOF
@@ -225,17 +227,16 @@ config2_pubkeys_user_data_body()
 	touch media/nuageinit/meta_data.json
 	cat > media/nuageinit/user_data << EOF
 #cloud-config
-
 ssh_authorized_keys:
   - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova"
 EOF
 	mkdir -p etc
-	cat > etc/master.passwd <<EOF
+	cat > etc/master.passwd << EOF
 root:*:0:0::0:0:Charlie &:/root:/bin/csh
 sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
 EOF
 	pwd_mkdb -d etc ${here}/etc/master.passwd
-	cat > etc/group <<EOF
+	cat > etc/group << EOF
 wheel:*:0:root
 users:*:1:
 EOF
@@ -251,37 +252,37 @@ config2_pubkeys_meta_data_body()
 		atf_skip "root required"
 	fi
 	mkdir -p media/nuageinit
-	cat > media/nuageinit/meta_data.json <<EOF
+	cat > media/nuageinit/meta_data.json << EOF
 {
-	"uuid": "uuid_for_this_instance",
-	"admin_pass": "a_generated_password",
-	"public_keys": {
-		"tdb": "ssh-ed25519 my_key_id tdb@host"
-	},
-	"keys": [
-	{
-		"name": "tdb",
-		"type": "ssh",
-		"data": "ssh-ed25519 my_key_id tdb@host"
-	}
-	],
-	"hostname": "freebsd-14-test.novalocal",
-	"name": "freebsd-14-test",
-	"launch_index": 0,
-	"availability_zone": "nova",
-	"random_seed": "long_random_seed",
-	"project_id": "my_project_id",
-	"devices": [],
-	"dedicated_cpus": []
+    "uuid": "uuid_for_this_instance",
+    "admin_pass": "a_generated_password",
+    "public_keys": {
+        "tdb": "ssh-ed25519 my_key_id tdb@host"
+    },
+    "keys": [
+        {
+            "name": "tdb",
+            "type": "ssh",
+            "data": "ssh-ed25519 my_key_id tdb@host"
+        }
+    ],
+    "hostname": "freebsd-14-test.novalocal",
+    "name": "freebsd-14-test",
+    "launch_index": 0,
+    "availability_zone": "nova",
+    "random_seed": "long_random_seed",
+    "project_id": "my_project_id",
+    "devices": [],
+    "dedicated_cpus": []
 }
 EOF
 	mkdir -p etc
-	cat > etc/master.passwd <<EOF
+	cat > etc/master.passwd << EOF
 root:*:0:0::0:0:Charlie &:/root:/bin/csh
 sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
 EOF
 	pwd_mkdb -d etc ${here}/etc/master.passwd
-	cat > etc/group <<EOF
+	cat > etc/group << EOF
 wheel:*:0:root
 users:*:1:
 EOF
@@ -289,7 +290,8 @@ EOF
 	atf_check -o inline:"ssh-ed25519 my_key_id tdb@host\n" cat home/freebsd/.ssh/authorized_keys
 }
 
-config2_network_body() {
+config2_network_body()
+{
 	here=$(pwd)
 	mkdir -p media/nuageinit
 	printf "{}" > media/nuageinit/meta_data.json
@@ -300,13 +302,13 @@ config2_network_body() {
 	set -- $mynetworks
 	myiface=$1
 	myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }')
-cat > media/nuageinit/network_data.json <<EOF
+cat > media/nuageinit/network_data.json << EOF
 {
     "links": [
         {
             "ethernet_mac_address": "$myaddr",
             "id": "iface0",
-            "mtu": null,
+            "mtu": null
         }
     ],
     "networks": [
@@ -315,39 +317,39 @@ cat > media/nuageinit/network_data.json <<EOF
             "link": "iface0",
             "type": "ipv4_dhcp"
         },
-	{ // IPv6
-	"id": "private-ipv4",
-	"type": "ipv6",
-	"link": "iface0",
-	// supports condensed IPv6 with CIDR netmask
-	"ip_address": "2001:cdba::3257:9652/24",
-	"gateway": "fd00::1"
-	"routes": [
-	    {
*** 193 LINES SKIPPED ***