nuageinit: config2_network support dns service cfg

This change enhances `config2_network()` to honor the DNS
configuration, when it's defined through the `services` section.

The `network_data.json` file can hold DNS configuration at two different
places:
- within a network configuration entry
- or `dns` entry in the `services` section, in this case the configuration is global.

An example of such configuration:

{"links": [{"id": "interface0", "type": "phy",
"ethernet_mac_address": "52:54:00:01:59:03"}], "networks": [{"id": "private-ipv4-0", "type": "ipv4", "link": "interface0",
"ip_address": "192.168.123.5", "netmask": "255.255.255.0", "routes": [{"network": "0.0.0.0", "netmask": "0.0.0.0", "gateway":
"192.168.123.1"}], "network_id": "9e5b1ed9-f5e6-4941-a90f-2e06bab858de", "dns_nameservers": ["192.168.123.1"], "services": [{"type":
 "dns", "address": "192.168.123.1"}]}], "services": [{"type": "dns", "address": "192.168.123.1"}]}

See: https://docs.openstack.org/nova/latest/user/metadata.html

MFC After: 	1 week
Signed-off-by: Gonéri Le Bouder <goneri@lebouder.net>
Pull Request: 	https://github.com/freebsd/freebsd-src/pull/1941
This commit is contained in:
Gonéri Le Bouder
2026-01-02 21:11:55 -05:00
committed by Baptiste Daroussin
parent e018fedef0
commit 7af8b75201
2 changed files with 26 additions and 1 deletions
+24 -1
View File
@@ -236,9 +236,16 @@ local function nameservers(interface, obj)
resolv_conf_handler:close()
end
if not os.execute("resolvconf -a " .. interface .. " < " .. resolv_conf) then
-- Only call resolvconf with interface if interface is provided
if interface then
resolvconf_command = "resolvconf -a " .. interface .. " < " .. resolv_conf
else
resolvconf_command = "resolvconf -u"
end
if not os.execute(resolvconf_command) then
nuage.warn("Failed to execute resolvconf(8)")
end
end
local function install_packages(packages)
@@ -572,6 +579,22 @@ local function config2_network(p)
--end
end
end
-- Handle global nameservers from services section
if obj["services"] then
local dns_servers = {}
for _, service in pairs(obj["services"]) do
if service["type"] == "dns" then
table.insert(dns_servers, service["address"])
end
end
if #dns_servers > 0 then
-- Use nameservers() function for global services
local nameserver_config = {addresses = dns_servers}
nameservers(nil, nameserver_config)
end
end
if #ipv4 > 0 then
routing:write('static_routes="')
routing:write(table.concat(ipv4, " ") .. '"\n')
+2
View File
@@ -117,6 +117,8 @@ file supports the following keys:
Array of network interfaces to be configured.
.It Ic networks
Array of network configurations to be set.
.It Ic services
Array of service configurations to be set (e.g: DNS).
.El
.El
.Pp