From 19f6634353580fc2e30b5380a17b700205e47e4f Mon Sep 17 00:00:00 2001 From: Anatoly Pugachev Date: Thu, 11 Apr 2019 01:13:33 +0300 Subject: [PATCH] Add support of facts gathering WWNs on AIX OS (#51704) * Extend git commit c65909d6db "Add network fact to obtain FC WWN initiator ports" adding support of enumerating AIX device WWN ports $ lsdev -Cc adapter -l fcs* fcs0 Defined 00-00 8Gb PCI Express Dual Port FC Adapter (df1000f114108a03) fcs1 Defined 00-01 8Gb PCI Express Dual Port FC Adapter (df1000f114108a03) fcs2 Available 04-00 8Gb PCI Express Dual Port FC Adapter (df1000f114108a03) fcs3 Available 04-01 8Gb PCI Express Dual Port FC Adapter (df1000f114108a03) $ lscfg -vpl fcs3 | grep 'Network Address' Network Address.............10000090FA551509 * no self in this code * Two fixes: - fix run_command execution, passing 'use_unsafe_shell=True' since we have a pipe in it ( | grep ) if we don't set unsafe shell, it will return error on execution. - strip new line characters at the end of WWNs. * fix pep8 , E225 missing whitespace around operator * use module.get_bin_path() instead of hardcoded values * move module.get_bin_path() out of for loop * use python string parsing instead of calling external grep * use in operator instead of find() for simplicity and readability * add changelog fragment --- .../fragments/fibre_channel_wwn_fact_aix.yaml | 3 +++ .../module_utils/facts/network/fc_wwn.py | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 changelogs/fragments/fibre_channel_wwn_fact_aix.yaml diff --git a/changelogs/fragments/fibre_channel_wwn_fact_aix.yaml b/changelogs/fragments/fibre_channel_wwn_fact_aix.yaml new file mode 100644 index 0000000000..bbd5889881 --- /dev/null +++ b/changelogs/fragments/fibre_channel_wwn_fact_aix.yaml @@ -0,0 +1,3 @@ +--- +minor_changes: + - gather Fibre Channel WWNs fact on AIX (extends https://github.com/ansible/ansible/pull/37043) diff --git a/lib/ansible/module_utils/facts/network/fc_wwn.py b/lib/ansible/module_utils/facts/network/fc_wwn.py index b4f1e6dadb..4f6ca67fe9 100644 --- a/lib/ansible/module_utils/facts/network/fc_wwn.py +++ b/lib/ansible/module_utils/facts/network/fc_wwn.py @@ -59,4 +59,24 @@ class FcWwnInitiatorFactCollector(BaseFactCollector): for line in fcinfo_out.splitlines(): data = line.split(' ') fc_facts['fibre_channel_wwn'].append(data[-1].rstrip()) + elif sys.platform.startswith('aix'): + # get list of available fibre-channel devices (fcs) + cmd = module.get_bin_path('lsdev') + cmd = cmd + " -Cc adapter -l fcs*" + rc, lsdev_out, err = module.run_command(cmd) + if lsdev_out: + lscfg_cmd = module.get_bin_path('lscfg') + for line in lsdev_out.splitlines(): + # if device is available (not in defined state), get its WWN + if 'Available' in line: + data = line.split(' ') + cmd = lscfg_cmd + " -vl %s" % data[0] + rc, lscfg_out, err = module.run_command(cmd) + # example output + # lscfg -vpl fcs3 | grep "Network Address" + # Network Address.............10000090FA551509 + for line in lscfg_out.splitlines(): + if 'Network Address' in line: + data = line.split('.') + fc_facts['fibre_channel_wwn'].append(data[-1].rstrip()) return fc_facts