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
(cherry picked from commit 4fabe1b33d)
(cherry picked from commit 958e4f5fb8)
This commit is contained in:
Jon Bernard 2020-11-21 14:28:00 -05:00 committed by Luigi Toscano
parent 9a8726aea6
commit 897dbdb9a1
2 changed files with 19 additions and 1 deletions

View File

@ -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):

View File

@ -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')