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:
committed by
Baptiste Daroussin
parent
e018fedef0
commit
7af8b75201
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user