@six.add_metaclass(abc.ABCMeta)
class DhcpBase(object):
- def __init__(self, conf, network, process_monitor, root_helper='sudo',
+ def __init__(self, conf, network, process_monitor,
version=None, plugin=None):
self.conf = conf
self.network = network
- self.root_helper = root_helper
self.process_monitor = process_monitor
- self.device_manager = DeviceManager(self.conf,
- self.root_helper, plugin)
+ self.device_manager = DeviceManager(self.conf, plugin)
self.version = version
@abc.abstractmethod
"""Force the DHCP server to reload the assignment database."""
@classmethod
- def existing_dhcp_networks(cls, conf, root_helper):
+ def existing_dhcp_networks(cls, conf):
"""Return a list of existing networks ids that we have configs for."""
raise NotImplementedError()
class DhcpLocalProcess(DhcpBase):
PORTS = []
- def __init__(self, conf, network, process_monitor, root_helper='sudo',
- version=None, plugin=None):
+ def __init__(self, conf, network, process_monitor, version=None,
+ plugin=None):
super(DhcpLocalProcess, self).__init__(conf, network, process_monitor,
- root_helper, version, plugin)
+ version, plugin)
self.confs_dir = self.get_confs_dir(conf)
self.network_conf_dir = os.path.join(self.confs_dir, network.id)
self._ensure_network_conf_dir()
if not retain_port:
if self.conf.dhcp_delete_namespaces and self.network.namespace:
- ns_ip = ip_lib.IPWrapper(self.root_helper,
- self.network.namespace)
+ ns_ip = ip_lib.IPWrapper(namespace=self.network.namespace)
try:
ns_ip.netns.delete(self.network.namespace)
except RuntimeError:
pass
@classmethod
- def existing_dhcp_networks(cls, conf, root_helper):
+ def existing_dhcp_networks(cls, conf):
"""Return a list of existing networks ids that we have configs for."""
confs_dir = cls.get_confs_dir(conf)
try:
def _release_lease(self, mac_address, ip):
"""Release a DHCP lease."""
cmd = ['dhcp_release', self.interface_name, ip, mac_address]
- ip_wrapper = ip_lib.IPWrapper(self.root_helper,
- self.network.namespace)
+ ip_wrapper = ip_lib.IPWrapper(namespace=self.network.namespace)
ip_wrapper.netns.execute(cmd)
def _output_config_files(self):
return options
def _make_subnet_interface_ip_map(self):
- ip_dev = ip_lib.IPDevice(
- self.interface_name,
- self.root_helper,
- self.network.namespace
- )
+ ip_dev = ip_lib.IPDevice(self.interface_name,
+ namespace=self.network.namespace)
subnet_lookup = dict(
(netaddr.IPNetwork(subnet.cidr), subnet.id)
class DeviceManager(object):
- def __init__(self, conf, root_helper, plugin):
+ def __init__(self, conf, plugin):
self.conf = conf
- self.root_helper = root_helper
self.plugin = plugin
if not conf.interface_driver:
LOG.error(_LE('An interface driver must be specified'))
it would change it from what it already is. This makes it safe to call
and avoids unnecessary perturbation of the system.
"""
- device = ip_lib.IPDevice(device_name,
- self.root_helper,
- network.namespace)
+ device = ip_lib.IPDevice(device_name, namespace=network.namespace)
gateway = device.route.get_gateway()
if gateway:
gateway = gateway['gateway']
interface_name = self.get_interface_name(network, port)
if ip_lib.ensure_device_is_ready(interface_name,
- self.root_helper,
- network.namespace):
+ namespace=network.namespace):
LOG.debug('Reusing existing device: %s.', interface_name)
else:
self.driver.plug(network.id,
# ensure that the dhcp interface is first in the list
if network.namespace is None:
- device = ip_lib.IPDevice(interface_name,
- self.root_helper)
+ device = ip_lib.IPDevice(interface_name)
device.route.pullup_route(interface_name)
if self.conf.use_namespaces:
cfg.CONF.register_opts(dhcp_config.DHCP_AGENT_OPTS)
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_agent_state_opts_helper(cfg.CONF)
- config.register_root_helper(cfg.CONF)
cfg.CONF.register_opts(interface.OPTS)
common_config.init(sys.argv[1:])
agent_mgr = dhcp_agent.DhcpAgentWithStateReport(
self.driver.assert_called_once_with(cfg.CONF,
mock.ANY,
mock.ANY,
- 'sudo',
mock.ANY,
mock.ANY)
self.driver.assert_called_once_with(cfg.CONF,
mock.ANY,
mock.ANY,
- 'sudo',
mock.ANY,
mock.ANY)
self.assertEqual(log.call_count, 1)
self.driver.existing_dhcp_networks.assert_called_once_with(
dhcp.conf,
- cfg.CONF.AGENT.root_helper
)
self.assertFalse(dhcp.cache.get_network_ids())
self.driver.existing_dhcp_networks.assert_called_once_with(
dhcp.conf,
- cfg.CONF.AGENT.root_helper
)
self.assertEqual(set(networks), set(dhcp.cache.get_network_ids()))
cfg.CONF.set_override('interface_driver', None)
with mock.patch.object(dhcp, 'LOG') as log:
self.assertRaises(SystemExit, dhcp.DeviceManager,
- cfg.CONF, 'sudo', None)
+ cfg.CONF, None)
msg = 'An interface driver must be specified'
log.error.assert_called_once_with(msg)
cfg.CONF.set_override('interface_driver', 'foo')
with mock.patch.object(dhcp, 'LOG') as log:
self.assertRaises(SystemExit, dhcp.DeviceManager,
- cfg.CONF, 'sudo', None)
+ cfg.CONF, None)
self.assertEqual(log.error.call_count, 1)
config.register_interface_driver_opts_helper(cfg.CONF)
cfg.CONF.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver')
- config.register_root_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp_config.DHCP_AGENT_OPTS)
self.plugin_p = mock.patch(DHCP_PLUGIN)
cfg.CONF.register_opts(dhcp_config.DHCP_AGENT_OPTS)
cfg.CONF.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver')
- config.register_root_helper(cfg.CONF)
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_isolated_metadata', True)
self.ensure_device_is_ready.return_value = device_is_ready
self.mock_driver.get_device_name.return_value = 'tap12345678-12'
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
dh._set_default_route = mock.Mock()
interface_name = dh.setup(net)
def test_create_dhcp_port_raise_conflict(self):
plugin = mock.Mock()
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
plugin.create_dhcp_port.return_value = None
self.assertRaises(exceptions.Conflict,
dh.setup_dhcp_port,
def test_create_dhcp_port_create_new(self):
plugin = mock.Mock()
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
plugin.create_dhcp_port.return_value = fake_network.ports[0]
dh.setup_dhcp_port(fake_network)
plugin.assert_has_calls([
def test_create_dhcp_port_update_add_subnet(self):
plugin = mock.Mock()
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
fake_network_copy = copy.deepcopy(fake_network)
fake_network_copy.ports[0].device_id = dh.get_device_id(fake_network)
fake_network_copy.subnets[1].enable_dhcp = True
def test_update_dhcp_port_raises_conflict(self):
plugin = mock.Mock()
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
fake_network_copy = copy.deepcopy(fake_network)
fake_network_copy.ports[0].device_id = dh.get_device_id(fake_network)
fake_network_copy.subnets[1].enable_dhcp = True
def test_create_dhcp_port_no_update_or_create(self):
plugin = mock.Mock()
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
fake_network_copy = copy.deepcopy(fake_network)
fake_network_copy.ports[0].device_id = dh.get_device_id(fake_network)
dh.setup_dhcp_port(fake_network_copy)
plugin = mock.Mock()
plugin.get_dhcp_port.return_value = fake_port
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper,
- plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
dh.destroy(fake_net, 'tap12345678-12')
dvr_cls.assert_called_once_with(cfg.CONF)
plugin = mock.Mock()
plugin.get_dhcp_port.return_value = fake_port
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper,
- plugin)
+ dh = dhcp.DeviceManager(cfg.CONF, plugin)
dh.get_interface_name(fake_net, fake_port)
dvr_cls.assert_called_once_with(cfg.CONF)
with mock.patch('uuid.uuid5') as uuid5:
uuid5.return_value = '1ae5f96c-c527-5079-82ea-371a01645457'
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
uuid5.called_once_with(uuid.NAMESPACE_DNS, cfg.CONF.host)
self.assertEqual(dh.get_device_id(fake_net), expected)
# Try with namespaces and no metadata network
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_metadata_network', False)
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
network = mock.Mock()
# No namespaces, shouldn't set default route.
cfg.CONF.set_override('use_namespaces', False)
cfg.CONF.set_override('enable_metadata_network', False)
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
dh.update(FakeV4Network(), 'tap12345678-12')
# Meta data network enabled, don't interfere with its gateway.
cfg.CONF.set_override('use_namespaces', True)
cfg.CONF.set_override('enable_metadata_network', True)
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
dh.update(FakeV4Network(), 'ns-12345678-12')
# For completeness
cfg.CONF.set_override('use_namespaces', False)
cfg.CONF.set_override('enable_metadata_network', True)
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
dh._set_default_route = mock.Mock()
dh.update(FakeV4Network(), 'ns-12345678-12')
self.assertFalse(dh._set_default_route.called)
def test_set_default_route(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
device.route.add_gateway.assert_called_once_with('192.168.0.1')
def test_set_default_route_no_subnet(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
self.assertFalse(device.route.add_gateway.called)
def test_set_default_route_no_subnet_delete_gateway(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
self.assertFalse(device.route.add_gateway.called)
def test_set_default_route_no_gateway(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
self.assertFalse(device.route.add_gateway.called)
def test_set_default_route_do_nothing(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
self.assertFalse(device.route.add_gateway.called)
def test_set_default_route_change_gateway(self):
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device
def test_set_default_route_two_subnets(self):
# Try two subnets. Should set gateway from the first.
- dh = dhcp.DeviceManager(cfg.CONF, cfg.CONF.AGENT.root_helper, None)
+ dh = dhcp.DeviceManager(cfg.CONF, None)
with mock.patch.object(dhcp.ip_lib, 'IPDevice') as mock_IPDevice:
device = mock.Mock()
mock_IPDevice.return_value = device