From c65909d6db34ec837830421799d39c4024153e99 Mon Sep 17 00:00:00 2001 From: Simon Dodsley Date: Thu, 31 Jan 2019 16:59:38 -0500 Subject: [PATCH] Add network fact to obtain FC WWN initiator ports (#37043) --- .../fragments/fibre_channel_wwn_fact.yaml | 3 ++ .../module_utils/facts/default_collectors.py | 2 + .../module_utils/facts/network/fc_wwn.py | 46 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 changelogs/fragments/fibre_channel_wwn_fact.yaml create mode 100644 lib/ansible/module_utils/facts/network/fc_wwn.py diff --git a/changelogs/fragments/fibre_channel_wwn_fact.yaml b/changelogs/fragments/fibre_channel_wwn_fact.yaml new file mode 100644 index 00000000000..7faa9e59abf --- /dev/null +++ b/changelogs/fragments/fibre_channel_wwn_fact.yaml @@ -0,0 +1,3 @@ +--- +minor_changes: + - gather Fibre Channel WWNs fact (https://github.com/ansible/ansible/pull/37043) diff --git a/lib/ansible/module_utils/facts/default_collectors.py b/lib/ansible/module_utils/facts/default_collectors.py index d1ba7da1383..3ac35704942 100644 --- a/lib/ansible/module_utils/facts/default_collectors.py +++ b/lib/ansible/module_utils/facts/default_collectors.py @@ -68,6 +68,7 @@ from ansible.module_utils.facts.network.base import NetworkCollector from ansible.module_utils.facts.network.aix import AIXNetworkCollector from ansible.module_utils.facts.network.darwin import DarwinNetworkCollector from ansible.module_utils.facts.network.dragonfly import DragonFlyNetworkCollector +from ansible.module_utils.facts.network.fc_wwn import FcWwnInitiatorFactCollector from ansible.module_utils.facts.network.freebsd import FreeBSDNetworkCollector from ansible.module_utils.facts.network.hpux import HPUXNetworkCollector from ansible.module_utils.facts.network.hurd import HurdNetworkCollector @@ -144,6 +145,7 @@ _hardware = [ _network = [ DnsFactCollector, + FcWwnInitiatorFactCollector, NetworkCollector, AIXNetworkCollector, DarwinNetworkCollector, diff --git a/lib/ansible/module_utils/facts/network/fc_wwn.py b/lib/ansible/module_utils/facts/network/fc_wwn.py new file mode 100644 index 00000000000..5640ae45e31 --- /dev/null +++ b/lib/ansible/module_utils/facts/network/fc_wwn.py @@ -0,0 +1,46 @@ +# Fibre Channel WWN initiator related facts collection for ansible. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import sys +import glob + +from ansible.module_utils.facts.utils import get_file_lines +from ansible.module_utils.facts.collector import BaseFactCollector + + +class FcWwnInitiatorFactCollector(BaseFactCollector): + name = 'fibre_channel_wwn' + _fact_ids = set() + + def collect(self, module=None, collected_facts=None): + """ + Example contents /sys/class/fc_host/*/port_name: + + 0x21000014ff52a9bb + + """ + + fc_facts = {} + fc_facts['fibre_channel_wwn'] = [] + if sys.platform.startswith('linux'): + for fcfile in glob.glob('/sys/class/fc_host/*/port_name'): + for line in get_file_lines(fcfile): + fc_facts['fibre_channel_wwn'].append(line.rstrip()[2:]) + return fc_facts