DHCP: device manager: two new methods - plug and unplug
This enabled decomposed plugins to overwrite methods from the base class. An example for this is the simple DVS plugin. Here the plugin does not require an agent to configure the OVS. This can be wired directly. An example of this usage is at: https://review.openstack.org/349248 Closes-bug: #1621043 Change-Id: Iee2bdfc544c2a029df8accaab1a167e42e7b13d4
This commit is contained in:
parent
dc6508aae2
commit
0c410a8556
|
@ -811,8 +811,7 @@ class Dnsmasq(DhcpLocalProcess):
|
|||
self._release_lease(mac, ip, client_id)
|
||||
|
||||
if not dhcp_port_exists:
|
||||
self.device_manager.driver.unplug(
|
||||
self.interface_name, namespace=self.network.namespace)
|
||||
self.device_manager.unplug(self.interface_name, self.network)
|
||||
|
||||
def _output_addn_hosts_file(self):
|
||||
"""Writes a dnsmasq compatible additional hosts file.
|
||||
|
@ -1300,7 +1299,16 @@ class DeviceManager(object):
|
|||
# delete all devices except current active DHCP port device
|
||||
if d.name != dev_name:
|
||||
LOG.debug("Found stale device %s, deleting", d.name)
|
||||
self.driver.unplug(d.name, namespace=network.namespace)
|
||||
self.unplug(d.name, network)
|
||||
|
||||
def plug(self, network, port, interface_name):
|
||||
"""Plug device settings for the network's DHCP on this host."""
|
||||
self.driver.plug(network.id,
|
||||
port.id,
|
||||
interface_name,
|
||||
port.mac_address,
|
||||
namespace=network.namespace,
|
||||
mtu=network.get('mtu'))
|
||||
|
||||
def setup(self, network):
|
||||
"""Create and initialize a device for network's DHCP on this host."""
|
||||
|
@ -1313,12 +1321,7 @@ class DeviceManager(object):
|
|||
LOG.debug('Reusing existing device: %s.', interface_name)
|
||||
else:
|
||||
try:
|
||||
self.driver.plug(network.id,
|
||||
port.id,
|
||||
interface_name,
|
||||
port.mac_address,
|
||||
namespace=network.namespace,
|
||||
mtu=network.get('mtu'))
|
||||
self.plug(network, port, interface_name)
|
||||
except Exception:
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.exception(_LE('Unable to plug DHCP port for '
|
||||
|
@ -1366,10 +1369,14 @@ class DeviceManager(object):
|
|||
"""Update device settings for the network's DHCP on this host."""
|
||||
self._set_default_route(network, device_name)
|
||||
|
||||
def unplug(self, device_name, network):
|
||||
"""Unplug device settings for the network's DHCP on this host."""
|
||||
self.driver.unplug(device_name, namespace=network.namespace)
|
||||
|
||||
def destroy(self, network, device_name):
|
||||
"""Destroy the device used for the network's DHCP on this host."""
|
||||
if device_name:
|
||||
self.driver.unplug(device_name, namespace=network.namespace)
|
||||
self.unplug(device_name, network)
|
||||
else:
|
||||
LOG.debug('No interface exists for network %s', network.id)
|
||||
|
||||
|
|
|
@ -1654,7 +1654,7 @@ class TestDnsmasq(TestBase):
|
|||
dnsmasq._output_hosts_file = mock.Mock()
|
||||
dnsmasq._release_lease = mock.Mock()
|
||||
dnsmasq.network.ports = []
|
||||
dnsmasq.device_manager.driver.unplug = mock.Mock()
|
||||
dnsmasq.device_manager.unplug = mock.Mock()
|
||||
|
||||
dnsmasq._release_unused_leases()
|
||||
|
||||
|
@ -1666,9 +1666,8 @@ class TestDnsmasq(TestBase):
|
|||
0xff),
|
||||
],
|
||||
any_order=True)
|
||||
dnsmasq.device_manager.driver.unplug.assert_has_calls(
|
||||
[mock.call(dnsmasq.interface_name,
|
||||
namespace=dnsmasq.network.namespace)])
|
||||
dnsmasq.device_manager.unplug.assert_has_calls(
|
||||
[mock.call(dnsmasq.interface_name, dnsmasq.network)])
|
||||
|
||||
def test_release_for_ipv6_lease(self):
|
||||
dnsmasq = self._get_dnsmasq(FakeDualNetwork())
|
||||
|
@ -1719,6 +1718,8 @@ class TestDnsmasq(TestBase):
|
|||
dnsmasq.device_manager.get_device_id = mock.Mock(
|
||||
return_value='fake_dhcp_port')
|
||||
dnsmasq._release_unused_leases()
|
||||
self.assertFalse(
|
||||
dnsmasq.device_manager.unplug.called)
|
||||
self.assertFalse(
|
||||
dnsmasq.device_manager.driver.unplug.called)
|
||||
|
||||
|
|
Loading…
Reference in New Issue