from oslo_utils import importutils
import six
-from neutron.agent.common import config
from neutron.agent.linux import ip_lib
from neutron.agent.linux import ovs_lib
from neutron.agent.linux import utils
def __init__(self, conf):
self.conf = conf
- self.root_helper = config.get_root_helper(conf)
def init_l3(self, device_name, ip_cidrs, namespace=None,
preserve_ips=[], gateway=None, extra_subnets=[]):
ip_cidrs: list of 'X.X.X.X/YY' strings
preserve_ips: list of ip cidrs that should not be removed from device
"""
- device = ip_lib.IPDevice(device_name,
- self.root_helper,
- namespace=namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
previous = {}
for address in device.addr.list(scope='global', filters=['permanent']):
if not bridge:
bridge = self.conf.ovs_integration_bridge
- if not ip_lib.device_exists(device_name,
- self.root_helper,
- namespace=namespace):
+ if not ip_lib.device_exists(device_name, namespace=namespace):
self.check_bridge_exists(bridge)
- ip = ip_lib.IPWrapper(self.root_helper)
+ ip = ip_lib.IPWrapper()
tap_name = self._get_tap_name(device_name, prefix)
if self.conf.ovs_use_veth:
try:
ovs.delete_port(tap_name)
if self.conf.ovs_use_veth:
- device = ip_lib.IPDevice(device_name,
- self.root_helper,
- namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
device.link.delete()
LOG.debug("Unplugged interface '%s'", device_name)
except RuntimeError:
"""This method is called by the Dhcp agent or by the L3 agent
when a new network is created
"""
- if not ip_lib.device_exists(device_name,
- self.root_helper,
- namespace=namespace):
- ip = ip_lib.IPWrapper(self.root_helper)
+ if not ip_lib.device_exists(device_name, namespace=namespace):
+ ip = ip_lib.IPWrapper()
tap_name = device_name.replace(prefix or n_const.TAP_DEVICE_PREFIX,
n_const.TAP_DEVICE_PREFIX)
root_dev.link.set_up()
cmd = ['mm-ctl', '--bind-port', port_id, device_name]
- utils.execute(cmd, self.root_helper)
+ utils.execute(cmd, run_as_root=True)
else:
LOG.info(_LI("Device %s already exists"), device_name)
def unplug(self, device_name, bridge=None, namespace=None, prefix=None):
# the port will be deleted by the dhcp agent that will call the plugin
- device = ip_lib.IPDevice(device_name,
- self.root_helper,
- namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
try:
device.link.delete()
except RuntimeError:
LOG.error(_LE("Failed unplugging interface '%s'"), device_name)
LOG.debug("Unplugged interface '%s'", device_name)
- ip_lib.IPWrapper(
- self.root_helper, namespace).garbage_collect_namespace()
+ ip_lib.IPWrapper(namespace=namespace).garbage_collect_namespace()
class IVSInterfaceDriver(LinuxInterfaceDriver):
def _ivs_add_port(self, device_name, port_id, mac_address):
cmd = ['ivs-ctl', 'add-port', device_name]
- utils.execute(cmd, self.root_helper)
+ utils.execute(cmd, run_as_root=True)
def plug(self, network_id, port_id, device_name, mac_address,
bridge=None, namespace=None, prefix=None):
"""Plug in the interface."""
- if not ip_lib.device_exists(device_name,
- self.root_helper,
- namespace=namespace):
+ if not ip_lib.device_exists(device_name, namespace=namespace):
- ip = ip_lib.IPWrapper(self.root_helper)
+ ip = ip_lib.IPWrapper()
tap_name = self._get_tap_name(device_name, prefix)
root_dev, ns_dev = ip.add_veth(tap_name, device_name)
tap_name = self._get_tap_name(device_name, prefix)
try:
cmd = ['ivs-ctl', 'del-port', tap_name]
- utils.execute(cmd, self.root_helper)
- device = ip_lib.IPDevice(device_name,
- self.root_helper,
- namespace)
+ utils.execute(cmd, run_as_root=True)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
device.link.delete()
LOG.debug("Unplugged interface '%s'", device_name)
except RuntimeError:
def plug(self, network_id, port_id, device_name, mac_address,
bridge=None, namespace=None, prefix=None):
"""Plugin the interface."""
- if not ip_lib.device_exists(device_name,
- self.root_helper,
- namespace=namespace):
- ip = ip_lib.IPWrapper(self.root_helper)
+ if not ip_lib.device_exists(device_name, namespace=namespace):
+ ip = ip_lib.IPWrapper()
# Enable agent to define the prefix
tap_name = device_name.replace(prefix or self.DEV_NAME_PREFIX,
def unplug(self, device_name, bridge=None, namespace=None, prefix=None):
"""Unplug the interface."""
- device = ip_lib.IPDevice(device_name, self.root_helper, namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
try:
device.link.delete()
LOG.debug("Unplugged interface '%s'", device_name)
def _set_device_plugin_tag(self, network_id, device_name, namespace=None):
plugin_tag = self._get_flavor_by_network_id(network_id)
- device = ip_lib.IPDevice(device_name, self.conf.AGENT.root_helper,
- namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
device.link.set_alias(plugin_tag)
def _get_device_plugin_tag(self, device_name, namespace=None):
- device = ip_lib.IPDevice(device_name, self.conf.AGENT.root_helper,
- namespace)
+ device = ip_lib.IPDevice(device_name, namespace=namespace)
return device.link.alias
def get_device_name(self, port):
super(TestBase, self).setUp()
self.conf = config.setup_conf()
self.conf.register_opts(interface.OPTS)
- config.register_root_helper(self.conf)
self.ip_dev_p = mock.patch.object(ip_lib, 'IPDevice')
self.ip_dev = self.ip_dev_p.start()
self.ip_p = mock.patch.object(ip_lib, 'IPWrapper')
bc.init_l3('tap0', ['192.168.1.2/24'], namespace=ns,
extra_subnets=[{'cidr': '172.20.0.0/24'}])
self.ip_dev.assert_has_calls(
- [mock.call('tap0', 'sudo', namespace=ns),
+ [mock.call('tap0', namespace=ns),
mock.call().addr.list(scope='global', filters=['permanent']),
mock.call().addr.add(4, '192.168.1.2/24', '192.168.1.255'),
mock.call().addr.delete(4, '172.16.77.240/24'),
bc.init_l3('tap0', ['192.168.1.2/24'], namespace=ns,
preserve_ips=['192.168.1.3/32'])
self.ip_dev.assert_has_calls(
- [mock.call('tap0', 'sudo', namespace=ns),
+ [mock.call('tap0', namespace=ns),
mock.call().addr.list(scope='global', filters=['permanent']),
mock.call().addr.add(4, '192.168.1.2/24', '192.168.1.255')])
self.assertFalse(self.ip_dev().addr.delete.called)
bc.init_l3('tap0', ['2001:db8:a::124/64'], namespace=ns,
extra_subnets=[{'cidr': '2001:db8:b::/64'}])
self.ip_dev.assert_has_calls(
- [mock.call('tap0', 'sudo', namespace=ns),
+ [mock.call('tap0', namespace=ns),
mock.call().addr.list(scope='global', filters=['permanent']),
mock.call().addr.add(6, '2001:db8:a::124/64',
'2001:db8:a:0:ffff:ffff:ffff:ffff'),
self.conf.set_override('ovs_integration_bridge', br)
self.assertEqual(self.conf.ovs_integration_bridge, br)
- def device_exists(dev, root_helper=None, namespace=None):
+ def device_exists(dev, namespace=None):
return dev == br
ovs = interface.OVSInterfaceDriver(self.conf)
if not bridge:
bridge = 'br-int'
- def device_exists(dev, root_helper=None, namespace=None):
+ def device_exists(dev, namespace=None):
return dev == bridge
with mock.patch.object(ovs_lib.OVSBridge, 'replace_port') as replace:
'iface-status': 'active',
'attached-mac': 'aa:bb:cc:dd:ee:ff'}))
- expected = [mock.call('sudo'),
+ expected = [mock.call(),
mock.call().device('tap0'),
mock.call().device().link.set_address('aa:bb:cc:dd:ee:ff')]
expected.extend(additional_expectation)
if not bridge:
bridge = 'br-int'
- def device_exists(dev, root_helper=None, namespace=None):
+ def device_exists(dev, namespace=None):
return dev == bridge
ovs = interface.OVSInterfaceDriver(self.conf)
root_dev = mock.Mock()
ns_dev = mock.Mock()
self.ip().add_veth = mock.Mock(return_value=(root_dev, ns_dev))
- expected = [mock.call('sudo'),
+ expected = [mock.call(),
mock.call().add_veth('tap0', devname,
namespace2=namespace)]
ovs.unplug('ns-0', bridge=bridge)
ovs_br.assert_has_calls([mock.call(bridge),
mock.call().delete_port('tap0')])
- self.ip_dev.assert_has_calls([mock.call('ns-0', 'sudo', None),
+ self.ip_dev.assert_has_calls([mock.call('ns-0', namespace=None),
mock.call().link.delete()])
self._test_plug(namespace='01234567-1234-1234-99')
def _test_plug(self, namespace=None, mtu=None):
- def device_exists(device, root_helper=None, namespace=None):
+ def device_exists(device, namespace=None):
return device.startswith('brq')
root_veth = mock.Mock()
mac_address,
namespace=namespace)
- ip_calls = [mock.call('sudo'),
+ ip_calls = [mock.call(),
mock.call().add_veth('tap0', 'ns-0', namespace2=namespace)]
ns_veth.assert_has_calls([mock.call.link.set_address(mac_address)])
if mtu:
with mock.patch('neutron.agent.linux.interface.LOG') as log:
br = interface.BridgeInterfaceDriver(self.conf)
br.unplug('tap0')
- [mock.call(), mock.call('tap0', 'sudo'), mock.call().link.delete()]
+ [mock.call(), mock.call('tap0'), mock.call().link.delete()]
self.assertEqual(log.error.call_count, 1)
def test_unplug(self):
br.unplug('tap0')
self.assertEqual(log.call_count, 1)
- self.ip_dev.assert_has_calls([mock.call('tap0', 'sudo', None),
+ self.ip_dev.assert_has_calls([mock.call('tap0', namespace=None),
mock.call().link.delete()])
meta_interface._set_device_plugin_tag(driver,
'tap0',
namespace=None)
- expected = [mock.call('tap0', 'sudo', None),
+ expected = [mock.call('tap0', namespace=None),
mock.call().link.set_alias('fake1')]
self.ip_dev.assert_has_calls(expected)
namespace = '01234567-1234-1234-99'
meta_interface._set_device_plugin_tag(driver,
'tap1',
namespace=namespace)
- expected = [mock.call('tap1', 'sudo', '01234567-1234-1234-99'),
+ expected = [mock.call('tap1', namespace='01234567-1234-1234-99'),
mock.call().link.set_alias('fake1')]
self.ip_dev.assert_has_calls(expected)
self.ip_dev().link.alias = 'fake1'
plugin_tag0 = meta_interface._get_device_plugin_tag('tap0',
namespace=None)
- expected = [mock.call('tap0', 'sudo', None)]
+ expected = [mock.call('tap0', namespace=None)]
self.ip_dev.assert_has_calls(expected)
self.assertEqual('fake1', plugin_tag0)
namespace = '01234567-1234-1234-99'
- expected = [mock.call('tap1', 'sudo', '01234567-1234-1234-99')]
+ expected = [mock.call('tap1', namespace='01234567-1234-1234-99')]
plugin_tag1 = meta_interface._get_device_plugin_tag(
'tap1',
namespace=namespace)
if not devname:
devname = 'ns-0'
- def device_exists(dev, root_helper=None, namespace=None):
+ def device_exists(dev, namespace=None):
return dev == 'indigo'
ivs = interface.IVSInterfaceDriver(self.conf)
ns_dev = mock.Mock()
self.ip().add_veth = mock.Mock(return_value=(root_dev, _ns_dev))
self.ip().device = mock.Mock(return_value=(ns_dev))
- expected = [mock.call('sudo'), mock.call().add_veth('tap0', devname),
+ expected = [mock.call(), mock.call().add_veth('tap0', devname),
mock.call().device(devname)]
ivsctl_cmd = ['ivs-ctl', 'add-port', 'tap0']
'aa:bb:cc:dd:ee:ff',
namespace=namespace,
prefix=prefix)
- execute.assert_called_once_with(ivsctl_cmd, 'sudo')
+ execute.assert_called_once_with(ivsctl_cmd, run_as_root=True)
ns_dev.assert_has_calls(
[mock.call.link.set_address('aa:bb:cc:dd:ee:ff')])
ivsctl_cmd = ['ivs-ctl', 'del-port', 'tap0']
with mock.patch.object(utils, 'execute') as execute:
ivs.unplug('ns-0')
- execute.assert_called_once_with(ivsctl_cmd, 'sudo')
- self.ip_dev.assert_has_calls([mock.call('ns-0', 'sudo', None),
+ execute.assert_called_once_with(ivsctl_cmd, run_as_root=True)
+ self.ip_dev.assert_has_calls([mock.call('ns-0', namespace=None),
mock.call().link.delete()])
def setUp(self):
self.conf = config.setup_conf()
self.conf.register_opts(interface.OPTS)
- config.register_root_helper(self.conf)
self.driver = interface.MidonetInterfaceDriver(self.conf)
self.network_id = uuidutils.generate_uuid()
self.port_id = uuidutils.generate_uuid()
self.network_id, self.port_id,
self.device_name, self.mac_address,
self.bridge, self.namespace)
- execute.assert_called_once_with(cmd, 'sudo')
+ execute.assert_called_once_with(cmd, run_as_root=True)
- expected = [mock.call(), mock.call('sudo'),
+ expected = [mock.call(), mock.call(),
mock.call().add_veth(self.device_name,
self.device_name,
namespace2=self.namespace),
self.driver.unplug(self.device_name, self.bridge, self.namespace)
self.ip_dev.assert_has_calls([
- mock.call(self.device_name, self.driver.root_helper,
- self.namespace),
+ mock.call(self.device_name, namespace=self.namespace),
mock.call().link.delete()])
self.ip.assert_has_calls(mock.call().garbage_collect_namespace())