]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Remove pyudev dependency
authorDarragh O'Reilly <dara2002-openstack@yahoo.com>
Tue, 14 Jan 2014 15:02:17 +0000 (15:02 +0000)
committerThomas Goirand <thomas@goirand.fr>
Thu, 13 Mar 2014 07:20:32 +0000 (15:20 +0800)
pyudev was only used by the linuxbridge-agent to get the list
of virtual network devices. This can be got from /sys instead.
This patch fixes the problem where testr could not import the
lb-agent module because pyudev was not in requirements.txt.

Change-Id: I0a78c91e97de4413f2ecf6fb56d2ff61b36baa78
Closes-Bug: 1269040

neutron/hooks.py
neutron/plugins/linuxbridge/agent/linuxbridge_neutron_agent.py
neutron/tests/unit/linuxbridge/test_lb_neutron_agent.py

index 6b4a1e78c6b9d2653e9758d065778c7aa8a05dec..282ae8f11d6886f4a2409f2f1cb7f60166f08cba 100644 (file)
@@ -25,7 +25,5 @@ def setup_hook(config):
     if sys.platform == 'win32':
         requires.append('pywin32')
         requires.append('wmi')
-    elif sys.platform.startswith('linux'):
-        requires.append('pyudev')
     metadata['requires_dist'] = "\n".join(requires)
     config['metadata'] = metadata
index 1eb2ced5128e6985c5452f35f287493f0296ec04..22e8c5d5f644ea94ac09f0097f4e361d949e7025 100755 (executable)
@@ -30,7 +30,6 @@ import time
 
 import eventlet
 from oslo.config import cfg
-import pyudev
 
 from neutron.agent import l2population_rpc as l2pop_rpc
 from neutron.agent.linux import ip_lib
@@ -88,10 +87,6 @@ class LinuxBridgeManager:
         # Store network mapping to segments
         self.network_map = {}
 
-        self.udev = pyudev.Context()
-        monitor = pyudev.Monitor.from_netlink(self.udev)
-        monitor.filter_by('net')
-
     def device_exists(self, device):
         """Check if ethernet device exists."""
         try:
@@ -503,7 +498,7 @@ class LinuxBridgeManager:
             LOG.debug(_("Done deleting vxlan interface %s"), interface)
 
     def update_devices(self, registered_devices):
-        devices = self.udev_get_tap_devices()
+        devices = self.get_tap_devices()
         if devices == registered_devices:
             return
         added = devices - registered_devices
@@ -512,20 +507,13 @@ class LinuxBridgeManager:
                 'added': added,
                 'removed': removed}
 
-    def udev_get_tap_devices(self):
+    def get_tap_devices(self):
         devices = set()
-        for device in self.udev.list_devices(subsystem='net'):
-            name = self.udev_get_name(device)
-            if self.is_tap_device(name):
-                devices.add(name)
+        for device in os.listdir(BRIDGE_FS):
+            if device.startswith(TAP_INTERFACE_PREFIX):
+                devices.add(device)
         return devices
 
-    def is_tap_device(self, name):
-        return name.startswith(TAP_INTERFACE_PREFIX)
-
-    def udev_get_name(self, device):
-        return device.sys_name
-
     def check_vxlan_support(self):
         kernel_version = dist_version.LooseVersion(platform.release())
         if cfg.CONF.VXLAN.l2_population and (
@@ -635,7 +623,7 @@ class LinuxBridgeRpcCallbacks(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
         # Check port exists on node
         port = kwargs.get('port')
         tap_device_name = self.agent.br_mgr.get_tap_device_name(port['id'])
-        devices = self.agent.br_mgr.udev_get_tap_devices()
+        devices = self.agent.br_mgr.get_tap_devices()
         if tap_device_name not in devices:
             return
 
@@ -800,7 +788,7 @@ class LinuxBridgeNeutronAgentRPC(sg_rpc.SecurityGroupAgentRpcMixin):
 
     def _report_state(self):
         try:
-            devices = len(self.br_mgr.udev_get_tap_devices())
+            devices = len(self.br_mgr.get_tap_devices())
             self.agent_state.get('configurations')['devices'] = devices
             self.state_rpc.report_state(self.context,
                                         self.agent_state)
index a1ce13a6e6fe2f37ab5317393763268ae29f0a39..256707b5bb149a29a272e9497a3b7e60745f832f 100644 (file)
@@ -635,7 +635,7 @@ class TestLinuxBridgeManager(base.BaseTestCase):
             self.assertTrue(exec_fn.called)
 
     def test_update_devices(self):
-        with mock.patch.object(self.lbm, "udev_get_tap_devices") as gt_fn:
+        with mock.patch.object(self.lbm, "get_tap_devices") as gt_fn:
             gt_fn.return_value = set(["dev1"])
             self.assertIsNone(self.lbm.update_devices(set(["dev1"])))
 
@@ -746,7 +746,7 @@ class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
             mock.patch.object(self.lb_rpc.agent.br_mgr,
                               "get_tap_device_name"),
             mock.patch.object(self.lb_rpc.agent.br_mgr,
-                              "udev_get_tap_devices"),
+                              "get_tap_devices"),
             mock.patch.object(self.lb_rpc.agent.br_mgr,
                               "get_bridge_name"),
             mock.patch.object(self.lb_rpc.agent.br_mgr,
@@ -756,10 +756,10 @@ class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
                               "plugin_rpc", create=True),
             mock.patch.object(self.lb_rpc.sg_agent,
                               "refresh_firewall", create=True)
-        ) as (get_tap_fn, udev_fn, getbr_fn, remif_fn,
+        ) as (get_tap_fn, get_tap_devs_fn, getbr_fn, remif_fn,
               addif_fn, rpc_obj, reffw_fn):
             get_tap_fn.return_value = "tap123"
-            udev_fn.return_value = ["tap123", "tap124"]
+            get_tap_devs_fn.return_value = set(["tap123", "tap124"])
             port = {"admin_state_up": True,
                     "id": "1234-5678",
                     "network_id": "123-123"}
@@ -850,7 +850,7 @@ class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
                 mock.patch.object(self.lb_rpc.agent.br_mgr,
                                   "get_tap_device_name"),
                 mock.patch.object(self.lb_rpc.agent.br_mgr,
-                                  "udev_get_tap_devices"),
+                                  "get_tap_devices"),
                 mock.patch.object(self.lb_rpc.agent.br_mgr,
                                   "get_bridge_name"),
                 mock.patch.object(self.lb_rpc.agent.br_mgr,
@@ -861,9 +861,9 @@ class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
                 mock.patch.object(self.lb_rpc.agent,
                                   "plugin_rpc", create=True),
                 mock.patch.object(linuxbridge_neutron_agent.LOG, 'error'),
-        ) as (get_tap_fn, udev_fn, _, _, _, _, plugin_rpc, log):
+        ) as (get_tap_fn, get_tap_devs_fn, _, _, _, _, plugin_rpc, log):
             get_tap_fn.return_value = "tap123"
-            udev_fn.return_value = ["tap123", "tap124"]
+            get_tap_devs_fn.return_value = set(["tap123", "tap124"])
             port = {"admin_state_up": True,
                     "id": "1234-5678",
                     "network_id": "123-123"}