From eb18767f91c2409737bbeb345880379c6124977e Mon Sep 17 00:00:00 2001 From: Yannig Perre Date: Sat, 16 Apr 2016 19:19:33 +0200 Subject: [PATCH] Visit all network class not just direct sub classes. Fix for https://github.com/ansible/ansible/issues/15446 --- lib/ansible/module_utils/facts.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/ansible/module_utils/facts.py b/lib/ansible/module_utils/facts.py index b4cf40b7f8..420dbf573d 100644 --- a/lib/ansible/module_utils/facts.py +++ b/lib/ansible/module_utils/facts.py @@ -1949,9 +1949,23 @@ class Network(Facts): def __new__(cls, *arguments, **keyword): subclass = cls - for sc in Network.__subclasses__(): - if sc.platform == platform.system(): - subclass = sc + # Retrieve direct subclasses + to_visit = Network.__subclasses__() + # Then visit all subclasses + while to_visit: + for sc in to_visit: + # Check if current class is the good one + if sc.platform == platform.system(): + subclass = sc + to_visit = [] + break + # The current class is now visited, so remove it from list + to_visit.remove(sc) + # Appending all subclasses to visit and keep a reference of available class + for ssc in sc.__subclasses__(): + to_visit.append(ssc) + + # Now, return corresponding subclass return super(cls, subclass).__new__(subclass, *arguments, **keyword) def populate(self):