Better Support for Multiple Networks in nova-network¶
https://blueprints.launchpad.net/nova/+spec/better-support-for-multiple-networks
Since nova-network is staying around, it needs a few updates for multiple networks. There are various settings that are automatically determined or set via flags, that should be explicitly set per network. This spec is about adding a few options to the networks table and converting the network manager and linux_net code to support multiple networks.
Problem description¶
Currently it is impossible to have multiple networks with different mtu settings or to have some networks that share ips or have external gateways and others that do not. If you have a single network it is possible to specify a different (external) gateway for that network by adding a custom dnsmasq.conf, but this breaks down when you have multiple networks.
Proposed change¶
This change proposes adding four fields to the networks table:
mtu
dhcp_server
enable_dhcp
share_address
Each of the new fields will be used in place of existing config options or automatic value interpretation. The defaults for these options will mean there is no difference to users if they are not specified.
It will also modify network create to allow these fields to be modified. An api extension will be added so one can determine if extra network fields are available.
Alternatives¶
Supporting this functionality without changing the data model would require some pretty complex config options. For example mtu could be a list of network names and mtus, but this is extremely unweildy.
Data model impact¶
This adds four new fields to the network model. The fallback for these fields will use the existing config options and defaults. These config options will be marked deprecated but will still work by default.
The four new fields will be added to the object model, and they will be cut out for older versions.
REST API impact¶
The current network create api allows extra values to be passed in and they are silently ignored. In order to provide information about whether the new fields are supported, a dummy api extension will be created and the extra fields will only be accepted/returned if the api extension is enabled.
The json for a network create call would currently look like:
{
"network": {
"label": "new net 111",
"cidr": "10.20.105.0/24",
...
}
}
With the new fields it would support:
{
"network": {
"label": "new net 111",
"cidr": "10.20.105.0/24"
"mtu": 9000,
"enable_dhcp": "true",
"dhcp_server": "10.20.105.2",
"share_address": true,
...
}
}
These fields will also be returned in the show command:
{
"network": {
"bridge": "br100",
"bridge_interface": "eth0",
"broadcast": "10.0.0.7",
"cidr": "10.0.0.0/29",
"cidr_v6": null,
"created_at": "2011-08-15T06:19:19.387525",
"deleted": false,
"deleted_at": null,
"dhcp_start": "10.0.0.3",
"dns1": null,
"dns2": null,
"gateway": "10.0.0.1",
"gateway_v6": null,
"host": "nsokolov-desktop",
"id": "20c8acc0-f747-4d71-a389-46d078ebf047",
"injected": false,
"label": "mynet_0",
"multi_host": false,
"netmask": "255.255.255.248",
"netmask_v6": null,
"priority": null,
"project_id": "1234",
"rxtx_base": null,
"updated_at": "2011-08-16T09:26:13.048257",
"vlan": 100,
"vpn_private_address": "10.0.0.2",
"vpn_public_address": "127.0.0.1",
"vpn_public_port": 1000,
"mtu": 9000,
"dhcp_server": "10.20.105.2",
"enable_dhcp": true,
"share_address": true
}
}
Security impact¶
This change doesn’t have any security impact.
Notifications impact¶
This change doesn’t impact notifications.
Other end user impact¶
This change will also include a modification to python-novaclient network create to allow users to create networks specifying the additional fields.
Performance Impact¶
The performance impact of this change is negligible.
Other deployer impact¶
Deployers should start using the network fields in place of the config options, but there is no requirement for them to move right away.
Developer impact¶
This change should not affect developers.
Implementation¶
Assignee(s)¶
- Primary assignee:
vishvananda
- Other contributors:
None
Work Items¶
Nova code addtions Python-novaclient code addtions Tempest test additions
Dependencies¶
There are no new dependencies for this feature.
Testing¶
There are currently no tempest tests for the create network call. A test for create network including the new fields will be added. The internal modifications will be covered by unit tests.
Documentation Impact¶
The new additions to the network create call need to be documented.
References¶
None