Determine shared ip from table instead of flag
Partially-implements blueprint better-support-for-multiple-networks Change-Id: Id7c6620704fef504d23cb42c5218251fa9e2dba7
This commit is contained in:
parent
4476419725
commit
e29a80022c
|
@ -1427,7 +1427,7 @@ class LinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver):
|
|||
iface,
|
||||
network, gateway)
|
||||
|
||||
if CONF.share_dhcp_address:
|
||||
if network['share_address'] or CONF.share_dhcp_address:
|
||||
isolate_dhcp_address(iface, network['dhcp_server'])
|
||||
# NOTE(vish): applying here so we don't get a lock conflict
|
||||
iptables_manager.apply()
|
||||
|
@ -1444,7 +1444,7 @@ class LinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver):
|
|||
LinuxBridgeInterfaceDriver.remove_bridge(network['bridge'],
|
||||
gateway)
|
||||
|
||||
if CONF.share_dhcp_address:
|
||||
if network['share_address'] or CONF.share_dhcp_address:
|
||||
remove_isolate_dhcp_address(iface, network['dhcp_server'])
|
||||
|
||||
iptables_manager.apply()
|
||||
|
|
|
@ -310,11 +310,15 @@ class NetworkManager(manager.Manager):
|
|||
def _import_ipam_lib(self, ipam_lib):
|
||||
self.ipam = importutils.import_module(ipam_lib).get_ipam_lib(self)
|
||||
|
||||
@staticmethod
|
||||
def _uses_shared_ip(network):
|
||||
shared = network.get('share_address') or CONF.share_dhcp_address
|
||||
return not network.get('multi_host') or shared
|
||||
|
||||
@utils.synchronized('get_dhcp')
|
||||
def _get_dhcp_ip(self, context, network_ref, host=None):
|
||||
"""Get the proper dhcp address to listen on."""
|
||||
# NOTE(vish): this is for compatibility
|
||||
if not network_ref.get('multi_host') or CONF.share_dhcp_address:
|
||||
if self._uses_shared_ip(network_ref):
|
||||
return network_ref['gateway']
|
||||
|
||||
if not host:
|
||||
|
@ -1985,7 +1989,7 @@ class VlanManager(RPCAllocateFixedIP, floating_ips.FloatingIP, NetworkManager):
|
|||
LOG.debug("Remove unused gateway %s", network['bridge'])
|
||||
self.driver.kill_dhcp(dev)
|
||||
self.l3driver.remove_gateway(network)
|
||||
if not CONF.share_dhcp_address:
|
||||
if not self._uses_shared_ip(network):
|
||||
fip = fixed_ip_obj.FixedIP.get_by_address(
|
||||
context, network.dhcp_server)
|
||||
fip.allocated = False
|
||||
|
|
|
@ -24,9 +24,10 @@ from nova.objects import fields
|
|||
network_opts = [
|
||||
cfg.BoolOpt('share_dhcp_address',
|
||||
default=False,
|
||||
help='If True in multi_host mode, all compute hosts share '
|
||||
'the same dhcp address. The same IP address used for '
|
||||
'DHCP will be added on each nova-network node which '
|
||||
help='DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE '
|
||||
'NETWORK. If True in multi_host mode, all compute hosts '
|
||||
'share the same dhcp address. The same IP address used '
|
||||
'for DHCP will be added on each nova-network node which '
|
||||
'is only visible to the vms on the same host.'),
|
||||
cfg.IntOpt('network_device_mtu',
|
||||
help='MTU setting for network interface'),
|
||||
|
|
|
@ -490,8 +490,8 @@ class LinuxNetworkTestCase(test.NoDBTestCase):
|
|||
self.stubs.Set(linux_net.iptables_manager.ipv4['filter'],
|
||||
'add_rule', verify_add_rule)
|
||||
driver = linux_net.LinuxBridgeInterfaceDriver()
|
||||
driver.plug({"bridge": "br100", "bridge_interface": "eth0"},
|
||||
"fakemac")
|
||||
driver.plug({"bridge": "br100", "bridge_interface": "eth0",
|
||||
"share_address": False}, "fakemac")
|
||||
|
||||
def test_linux_ovs_driver_plug_exception(self):
|
||||
self.flags(fake_network=False)
|
||||
|
@ -529,6 +529,7 @@ class LinuxNetworkTestCase(test.NoDBTestCase):
|
|||
network = {
|
||||
"bridge": "br100",
|
||||
"bridge_interface": "base_interface",
|
||||
"share_address": False,
|
||||
"vlan": "fake"
|
||||
}
|
||||
self.flags(vlan_interface="")
|
||||
|
@ -559,6 +560,7 @@ class LinuxNetworkTestCase(test.NoDBTestCase):
|
|||
network = {
|
||||
"bridge": "br100",
|
||||
"bridge_interface": "base_interface",
|
||||
"share_address": False,
|
||||
}
|
||||
driver.plug(network, "fakemac")
|
||||
self.assertEqual(info['passed_interface'], "base_interface")
|
||||
|
@ -676,6 +678,7 @@ class LinuxNetworkTestCase(test.NoDBTestCase):
|
|||
iface = 'eth0'
|
||||
dhcp = '192.168.1.1'
|
||||
network = {'dhcp_server': dhcp,
|
||||
'share_address': False,
|
||||
'bridge': 'br100',
|
||||
'bridge_interface': iface}
|
||||
driver.plug(network, 'fakemac')
|
||||
|
@ -767,6 +770,7 @@ class LinuxNetworkTestCase(test.NoDBTestCase):
|
|||
iface = 'eth0'
|
||||
dhcp = '192.168.1.1'
|
||||
network = {'dhcp_server': dhcp,
|
||||
'share_address': False,
|
||||
'bridge': 'br100',
|
||||
'bridge_interface': iface}
|
||||
driver.plug(network, 'fakemac')
|
||||
|
|
Loading…
Reference in New Issue