VIRL lspci fix 57/6957/11
authorPeter Mikus <pmikus@cisco.com>
Wed, 31 May 2017 13:25:24 +0000 (13:25 +0000)
committerPeter Mikus <pmikus@cisco.com>
Tue, 6 Jun 2017 09:04:40 +0000 (09:04 +0000)
Change-Id: I884b56c5cc2e0d5f40c0e9d0b5fb7356dc3b4028
Signed-off-by: pmikus <pmikus@cisco.com>
resources/libraries/python/InterfaceUtil.py

index e5597b9..750029e 100644 (file)
@@ -348,27 +348,35 @@ class InterfaceUtil(object):
         ssh = SSH()
         ssh.connect(node)
 
         ssh = SSH()
         ssh.connect(node)
 
-        # First rescan PCI devices in the system
-        cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
-        (ret_code, _, _) = ssh.exec_command_sudo(cmd)
-        if int(ret_code) != 0:
-            raise RuntimeError("'{0}' failed on '{1}'"
-                               .format(cmd, node['host']))
-
-        cmd = 'lspci -vmmks {0}'.format(pci_addr)
-        (ret_code, stdout, _) = ssh.exec_command(cmd)
-        if int(ret_code) != 0:
-            raise RuntimeError("'{0}' failed on '{1}'"
-                               .format(cmd, node['host']))
+        for i in range(3):
+            logger.trace('Try {}: Get interface driver'.format(i))
+            cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
+            (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+            if int(ret_code) != 0:
+                raise RuntimeError("'{0}' failed on '{1}'"
+                                   .format(cmd, node['host']))
 
 
-        for line in stdout.splitlines():
-            if len(line) == 0:
-                continue
-            (name, value) = line.split("\t", 1)
-            if name == 'Driver:':
-                return value
+            cmd = 'lspci -vmmks {0}'.format(pci_addr)
+            (ret_code, stdout, _) = ssh.exec_command(cmd)
+            if int(ret_code) != 0:
+                raise RuntimeError("'{0}' failed on '{1}'"
+                                   .format(cmd, node['host']))
 
 
-        return None
+            for line in stdout.splitlines():
+                if len(line) == 0:
+                    continue
+                try:
+                    (name, value) = line.split("\t", 1)
+                except ValueError:
+                    if name != "Driver:":
+                        pass
+                    else:
+                        return None
+                if name == 'Driver:':
+                    return value if value else None
+        else:
+            raise RuntimeError('Get interface driver for: {0}'\
+                               .format(pci_addr))
 
     @staticmethod
     def tg_set_interfaces_udev_rules(node):
 
     @staticmethod
     def tg_set_interfaces_udev_rules(node):