Exemple #1
0
 def _get_path_lun_iscsi(self):
     from infi.storagemodel.unix.utils import execute_command
     from infi.dtypes.iqn import IQN
     import re
     process = execute_command(['iscsiadm', 'list', 'target', '-S'])
     output = process.get_stdout().splitlines()
     for line_number, line in enumerate(output):
         if re.search(r'Target: ', line):
             result_iqn = line.split()[1]
             _ = IQN(result_iqn)  # make sure iqn is valid
             if result_iqn != self.target_iqn:
                 continue
             for indent_line in range(line_number + 1, len(output)):
                 if re.search(r'TPGT:', output[indent_line]):
                     uid = output[indent_line].split()[1]
                     if uid != self.iscsi_session_uid:
                         break
                 if re.search(r'LUN:', output[indent_line]):
                     lun = output[indent_line].split()[1]
                 if re.search('OS Device Name', output[indent_line]):
                     device_name = output[indent_line].split()[3]
                     if device_name == self.mpath_dev_path:
                         return int(lun)
                     elif "array" in self.mpath_dev_path:
                         if "array" in device_name or "Not" in device_name:
                             msg = "correlating device {} <-> {}, both should be lun 0".format(output[indent_line],
                                                                                               self.mpath_dev_path)
                             logger.debug(msg)
                             return 0
                     else:
                         continue
                 if re.search(r'Target: ', output[indent_line]):
                     break  # We reached the next target no point searching forward
Exemple #2
0
 def _get_path_lun_iscsi(self):
     from infi.storagemodel.unix.utils import execute_command
     from infi.dtypes.iqn import IQN
     import re
     process = execute_command(['iscsiadm', 'list', 'target', '-S'])
     output = process.get_stdout().splitlines()
     for line_number, line in enumerate(output):
         if re.search(r'Target: ', line):
             result_iqn = line.split()[1]
             _ = IQN(result_iqn)  # make sure iqn is valid
             if result_iqn != self.target_iqn:
                 continue
             for indent_line in range(line_number + 1, len(output)):
                 if re.search(r'TPGT:', output[indent_line]):
                     uid = output[indent_line].split()[1]
                     if uid != self.iscsi_session_uid:
                         break
                 if re.search(r'LUN:', output[indent_line]):
                     lun = output[indent_line].split()[1]
                 if re.search('OS Device Name', output[indent_line]):
                     device_name = output[indent_line].split()[3]
                     if device_name == self.mpath_dev_path:
                         return int(lun)
                     elif "array" in self.mpath_dev_path:
                         if "array" in device_name or "Not" in device_name:
                             msg = "correlating device {} <-> {}, both should be lun 0".format(
                                 output[indent_line], self.mpath_dev_path)
                             logger.debug(msg)
                             return 0
                     else:
                         continue
                 if re.search(r'Target: ', output[indent_line]):
                     break  # We reached the next target no point searching forward
 def rescan_method(self):
     res = execute_command("cfgadm -lao show_SCSI_LUN".split(), check_returncode=False)
     if res.get_returncode() not in (0, 2):
         raise ExecutionError(res)
     execute_assert_success("devfsadm -vC".split())
     execute_assert_success("devfsadm -r / -p /etc/path_to_inst".split())
     try:
         execute("vxdctl enable".split()) # TODO execute only if veritas is installed
     except OSError:
         pass
     return 0
Exemple #4
0
 def _run_command(self, cmd):
     from infi.execute import ExecutionError
     from infi.storagemodel.unix.utils import execute_command
     try:
         return execute_command(cmd.split()).get_stdout()
     except OSError as e:
         if e.errno not in (2, 20):  # file not found, not a directory
             logger.exception("{} failed with unknown reason".formart(cmd[0]))
         return ""
     except ExecutionError:
         logger.exception("{} failed, returning empty output".format(cmd[0]))
         return ""
 def rescan_method(self):
     res = execute_command("cfgadm -lao show_SCSI_LUN".split(),
                           check_returncode=False)
     if res.get_returncode() not in (0, 2):
         raise ExecutionError(res)
     execute_assert_success("devfsadm -vC".split())
     execute_assert_success("devfsadm -r / -p /etc/path_to_inst".split())
     try:
         execute("vxdctl enable".split()
                 )  # TODO execute only if veritas is installed
     except OSError:
         pass
     return 0
Exemple #6
0
 def _run_command(self, cmd):
     from infi.execute import ExecutionError
     from infi.storagemodel.unix.utils import execute_command
     try:
         return execute_command(cmd.split()).get_stdout()
     except OSError as e:
         if e.errno not in (2, 20):  # file not found, not a directory
             logger.exception("{} failed with unknown reason".formart(
                 cmd[0]))
         return ""
     except ExecutionError:
         logger.exception("{} failed, returning empty output".format(
             cmd[0]))
         return ""