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 _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
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
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 ""