dir=base_dir,
delete=False) as tmp_file:
tmp_file.write(data)
- os.chmod(tmp_file.name, 0o644)
+ os.chmod(tmp_file.name, file_mode)
os.rename(tmp_file.name, file_name)
+
+
+def load_class_by_alias_or_classname(namespace, name):
+ """Load class using stevedore alias or the class name
+ :param namespace: namespace where the alias is defined
+ :param name: alias or class name of the class to be loaded
+ :returns class if calls can be loaded
+ :raises ImportError if class cannot be loaded
+ """
+
+ if not name:
+ LOG.error(_LE("Alias or class name is not set"))
+ raise ImportError(_("Class not found."))
+ try:
+ # Try to resolve class by alias
+ mgr = driver.DriverManager(namespace, name)
+ class_to_load = mgr.driver
+ except RuntimeError:
+ e1_info = sys.exc_info()
+ # Fallback to class name
+ try:
+ class_to_load = importutils.import_class(name)
+ except (ImportError, ValueError):
+ LOG.error(_LE("Error loading class by alias"),
+ exc_info=e1_info)
+ LOG.error(_LE("Error loading class by class name"),
+ exc_info=True)
+ raise ImportError(_("Class not found."))
+ return class_to_load
parent.assert_has_calls(expected)
def test_get_interface_name(self):
- with mock.patch('six.moves.builtins.open') as mock_open:
- mock_open.return_value.__enter__ = lambda s: s
- mock_open.return_value.__exit__ = mock.Mock()
- mock_open.return_value.read.return_value = 'tap0'
- lp = LocalChild(self.conf, FakeDualNetwork())
- self.assertEqual(lp.interface_name, 'tap0')
+ net = FakeDualNetwork()
+ path = '/dhcp/%s/interface' % net.id
+ self.useFixture(tools.OpenFixture(path, 'tap0'))
+ lp = LocalChild(self.conf, net)
+ self.assertEqual(lp.interface_name, 'tap0')
def test_set_interface_name(self):
- with mock.patch('neutron.agent.linux.utils.replace_file') as replace:
+ with mock.patch('neutron.common.utils.replace_file') as replace:
lp = LocalChild(self.conf, FakeDualNetwork())
with mock.patch.object(lp, 'get_conf_file_name') as conf_file:
conf_file.return_value = '/interface'