Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[facts] iscsi fixes, add/fix solaris discovery for iscsi iqn #56603

Open
wants to merge 4 commits into
base: devel
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelogs/fragments/solaris_iscsi_iqn.yaml
@@ -0,0 +1,2 @@
bugfixes:
- facts - fix ISCSI IQN discovery on solaris OS and strip whitespaces from IQN (https://github.com/ansible/ansible/pull/56603)
14 changes: 11 additions & 3 deletions lib/ansible/module_utils/facts/network/iscsi.py
Expand Up @@ -72,7 +72,7 @@ def collect(self, module=None, collected_facts=None):

iscsi_facts = {}
iscsi_facts['iscsi_iqn'] = ""
if sys.platform.startswith('linux') or sys.platform.startswith('sunos'):
if sys.platform.startswith('linux'):
for line in get_file_content('/etc/iscsi/initiatorname.iscsi', '').splitlines():
if line.startswith('#') or line.startswith(';') or line.strip() == '':
continue
Expand All @@ -86,7 +86,7 @@ def collect(self, module=None, collected_facts=None):
rc, out, err = module.run_command(cmd)
if rc == 0 and out:
line = self.findstr(out, 'initiator_name')
iscsi_facts['iscsi_iqn'] = line.split()[1].rstrip()
iscsi_facts['iscsi_iqn'] = line.split()[1].strip()
elif sys.platform.startswith('hp-ux'):
# try to find it in the default PATH and opt_dirs
cmd = get_bin_path('iscsiutil', opt_dirs=['/opt/iscsi/bin'])
Expand All @@ -95,7 +95,15 @@ def collect(self, module=None, collected_facts=None):
rc, out, err = module.run_command(cmd)
if out:
line = self.findstr(out, 'Initiator Name')
iscsi_facts['iscsi_iqn'] = line.split(":", 1)[1].rstrip()
iscsi_facts['iscsi_iqn'] = line.split(":", 1)[1].strip()
elif sys.platform.startswith('sunos'):
cmd = get_bin_path('iscsiadm')
if cmd:
cmd += " list initiator-node"
rc, out, err = module.run_command(cmd)
if rc == 0 and out:
line = self.findstr(out, 'Initiator node name')
iscsi_facts['iscsi_iqn'] = line.split(":", 1)[1].strip()
return iscsi_facts

def findstr(self, text, match):
Expand Down
Expand Up @@ -36,6 +36,24 @@
SLP Scope list for iSLPD :
"""

# Solaris # iscsiadm list initiator-node
ISCSIADM_OUTPUT = """
Initiator node name: iqn.1986-03.com.sun:01:00144ffafe39.578e4635
Initiator node alias: solaris11.nvglabs.local
Login Parameters (Default/Configured):
Header Digest: NONE/-
Data Digest: NONE/-
Max Connections: 65535/-
Authentication Type: NONE
RADIUS Server: NONE
RADIUS Access: unknown
Tunable Parameters (Default/Configured):
Session Login Response Time: 60/-
Maximum Connection Retry Time: 180/-
Login Retry Time Interval: 60/-
Configured Sessions: 1
"""


def test_get_iscsi_info(mocker):
module = Mock()
Expand All @@ -50,5 +68,11 @@ def test_get_iscsi_info(mocker):
mocker.patch('sys.platform', 'hp-ux')
mocker.patch('ansible.module_utils.facts.network.iscsi.get_bin_path', return_value='/opt/iscsi/bin/iscsiutil')
mocker.patch.object(module, 'run_command', return_value=(0, ISCSIUTIL_OUTPUT, ''))
hpux_iscsi_expected = {"iscsi_iqn": " iqn.2001-04.com.hp.stor:svcio"}
hpux_iscsi_expected = {"iscsi_iqn": "iqn.2001-04.com.hp.stor:svcio"}
assert hpux_iscsi_expected == inst.collect(module=module)

mocker.patch('sys.platform', 'sunos5')
mocker.patch('ansible.module_utils.facts.network.iscsi.get_bin_path', return_value='/usr/sbin/iscsiadm')
mocker.patch.object(module, 'run_command', return_value=(0, ISCSIADM_OUTPUT, ''))
sunos_iscsi_expected = {"iscsi_iqn": "iqn.1986-03.com.sun:01:00144ffafe39.578e4635"}
assert sunos_iscsi_expected == inst.collect(module=module)