Fix: use pci/rescan to avoid occasional bind issue on Centos7
[csit.git] / resources / libraries / python / InterfaceUtil.py
index 793f908..e5597b9 100644 (file)
@@ -261,8 +261,14 @@ class InterfaceUtil(object):
          :rtype: list
         """
 
-        sw_if_index = Topology.convert_interface_reference(
-            node, interface, "sw_if_index")
+        try:
+            sw_if_index = Topology.convert_interface_reference(
+                node, interface, "sw_if_index")
+        except RuntimeError:
+            if isinstance(interface, basestring):
+                sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+            else:
+                raise
 
         with VatTerminal(node) as vat:
             response = vat.vat_terminal_exec_cmd_from_template(
@@ -342,8 +348,14 @@ class InterfaceUtil(object):
         ssh = SSH()
         ssh.connect(node)
 
-        cmd = 'lspci -vmmks {0}'.format(pci_addr)
+        # 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}'"