Improve error handling on target query
The command 'iscsiadm -m node' will return entries for corrupt targets in the form '[]:port,-1' instead of the expected format. This causes an IndexError exception during parsing. This patch skips invalid entries. Closes-bug: #1886855 Change-Id: I9a1746658474c0f1be7ec29a36767085aaf2ab7f
This commit is contained in:
parent
4ac51ae153
commit
4fabe1b33d
|
@ -156,7 +156,10 @@ class ISCSIConnector(base.BaseLinuxConnector, base_iscsi.BaseISCSIConnector):
|
|||
for line in out.splitlines():
|
||||
if line:
|
||||
info = line.split()
|
||||
lines.append((info[0].split(',')[0], info[1]))
|
||||
try:
|
||||
lines.append((info[0].split(',')[0], info[1]))
|
||||
except IndexError:
|
||||
pass
|
||||
return lines
|
||||
|
||||
def _get_iscsi_sessions(self):
|
||||
|
|
|
@ -119,6 +119,21 @@ class ISCSIConnectorTestCase(test_connector.ConnectorTestCase):
|
|||
res = self.connector._get_iscsi_nodes()
|
||||
self.assertEqual([], res)
|
||||
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_execute')
|
||||
def test_get_iscsi_nodes_corrupt(self, exec_mock):
|
||||
iscsiadm_result = ('ip1:port1,-1 tgt1\n'
|
||||
'ip2:port2,-1 tgt2\n'
|
||||
'[]:port3,-1\n'
|
||||
'ip4:port4,-1 tgt4\n')
|
||||
exec_mock.return_value = (iscsiadm_result, '')
|
||||
res = self.connector._get_iscsi_nodes()
|
||||
expected = [('ip1:port1', 'tgt1'), ('ip2:port2', 'tgt2'),
|
||||
('ip4:port4', 'tgt4')]
|
||||
self.assertListEqual(expected, res)
|
||||
exec_mock.assert_called_once_with(
|
||||
'iscsiadm', '-m', 'node', run_as_root=True,
|
||||
root_helper=self.connector._root_helper, check_exit_code=False)
|
||||
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_ips_iqns_luns')
|
||||
@mock.patch('glob.glob')
|
||||
@mock.patch.object(iscsi.ISCSIConnector, '_get_iscsi_sessions_full')
|
||||
|
|
Loading…
Reference in New Issue