diff --git a/nova/network/manager.py b/nova/network/manager.py index 3e8e8b1afd79..8618fed8d4da 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -1351,13 +1351,11 @@ class NetworkManager(manager.Manager): else: net.gateway = current current += 1 - if not dhcp_server: - dhcp_server = net.gateway + net.dhcp_server = dhcp_server or net.gateway net.dhcp_start = current current += 1 - if str(net.dhcp_start) == dhcp_server: + if net.dhcp_start == net.dhcp_server: net.dhcp_start = current - net.dhcp_server = dhcp_server extra_reserved.append(str(net.dhcp_server)) extra_reserved.append(str(net.gateway)) diff --git a/nova/tests/unit/network/test_manager.py b/nova/tests/unit/network/test_manager.py index e0e9da3ad082..5a8c4d0bb0f9 100644 --- a/nova/tests/unit/network/test_manager.py +++ b/nova/tests/unit/network/test_manager.py @@ -1105,6 +1105,24 @@ class VlanNetworkTestCase(test.TestCase): error_msg = 'vlan must be an integer' self.assertIn(error_msg, six.text_type(exc)) + def test_vlan_multiple_without_dhcp_server(self): + networks = self.network.create_networks( + self.context_admin, label="fake", num_networks=2, + vlan_start=100, cidr='192.168.3.1/24', + network_size=100) + + self.assertEqual(networks[0]["dhcp_server"], "192.168.3.1") + self.assertEqual(networks[1]["dhcp_server"], "192.168.3.129") + + def test_vlan_multiple_with_dhcp_server(self): + networks = self.network.create_networks( + self.context_admin, label="fake", num_networks=2, + vlan_start=100, cidr='192.168.3.1/24', + network_size=100, dhcp_server='192.168.3.1') + + self.assertEqual(networks[0]["dhcp_server"], "192.168.3.1") + self.assertEqual(networks[1]["dhcp_server"], "192.168.3.1") + @mock.patch('nova.db.network_get') def test_validate_networks(self, net_get): def network_get(_context, network_id, project_only='allow_none'):