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