From f697befdd3a0f9b81ff9a74f55e4460cd3783692 Mon Sep 17 00:00:00 2001 From: Sergey Nikitin Date: Wed, 15 Apr 2015 10:27:10 +0300 Subject: [PATCH] Fixed incorrect dhcp_server value during nova-network creation When parameter dhcp_server is None, we must use network gateway for each network. But because of incorrect usage of variable dhcp_server, we use gateway of the FIRST network for each network. Co-Authored-By: Roman Podoliaka Co-Authored-By: Pavel Kholkin Closes-Bug: #1443970 Change-Id: I9d22a2ac94e8675a231436ce8ba77260c4b8b98a --- nova/network/manager.py | 6 ++---- nova/tests/unit/network/test_manager.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) 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'):