diff --git a/changelogs/fragments/66866_nxos_fan_facts.yaml b/changelogs/fragments/66866_nxos_fan_facts.yaml new file mode 100644 index 00000000000..7f6c2ea7727 --- /dev/null +++ b/changelogs/fragments/66866_nxos_fan_facts.yaml @@ -0,0 +1,2 @@ +bugfixes: +- "nxos_facts: Don't throw an error if faninfo is not reported." diff --git a/lib/ansible/module_utils/network/nxos/facts/legacy/base.py b/lib/ansible/module_utils/network/nxos/facts/legacy/base.py index ece77a6d378..28be70b6b62 100644 --- a/lib/ansible/module_utils/network/nxos/facts/legacy/base.py +++ b/lib/ansible/module_utils/network/nxos/facts/legacy/base.py @@ -622,13 +622,19 @@ class Legacy(FactsBase): def parse_structured_fan_info(self, data): objects = list() - if data.get('fandetails'): - data = data['fandetails']['TABLE_faninfo']['ROW_faninfo'] - elif data.get('fandetails_3k'): - data = data['fandetails_3k']['TABLE_faninfo']['ROW_faninfo'] - else: - return objects - objects = list(self.transform_iterable(data, self.FAN_MAP)) + + for key in ("fandetails", "fandetails_3k"): + if data.get(key): + try: + data = data[key]['TABLE_faninfo']['ROW_faninfo'] + except KeyError: + # Some virtual images don't actually report faninfo. In this case, move on and + # just return an empty list. + pass + else: + objects = list(self.transform_iterable(data, self.FAN_MAP)) + break + return objects def parse_structured_power_supply_info(self, data):