diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ansible/module_utils/facts/collector.py | 39 | ||||
-rw-r--r-- | lib/ansible/module_utils/facts/default_collectors.py | 124 |
2 files changed, 98 insertions, 65 deletions
diff --git a/lib/ansible/module_utils/facts/collector.py b/lib/ansible/module_utils/facts/collector.py index 4baf5bd338..232c506803 100644 --- a/lib/ansible/module_utils/facts/collector.py +++ b/lib/ansible/module_utils/facts/collector.py @@ -203,6 +203,28 @@ def build_fact_id_to_collector_map(collectors_for_platform): return fact_id_to_collector_map, aliases_map +def select_collector_classes(collector_names, all_fact_subsets, all_collector_classes): + # TODO: can be a set() + seen_collector_classes = [] + + selected_collector_classes = [] + + for candidate_collector_class in all_collector_classes: + candidate_collector_name = candidate_collector_class.name + + if candidate_collector_name not in collector_names: + continue + + collector_classes = all_fact_subsets.get(candidate_collector_name, []) + + for collector_class in collector_classes: + if collector_class not in seen_collector_classes: + selected_collector_classes.append(collector_class) + seen_collector_classes.append(collector_class) + + return selected_collector_classes + + def collector_classes_from_gather_subset(all_collector_classes=None, valid_subsets=None, minimal_gather_subset=None, @@ -248,19 +270,8 @@ def collector_classes_from_gather_subset(all_collector_classes=None, aliases_map=aliases_map, platform_info=platform_info) - # TODO: can be a set() - seen_collector_classes = [] - - selected_collector_classes = [] - - for collector_name in collector_names: - collector_classes = all_fact_subsets.get(collector_name, []) - - # TODO? log/warn if we dont find an implementation of a fact_id? - - for collector_class in collector_classes: - if collector_class not in seen_collector_classes: - selected_collector_classes.append(collector_class) - seen_collector_classes.append(collector_class) + selected_collector_classes = select_collector_classes(collector_names, + all_fact_subsets, + all_collector_classes) return selected_collector_classes diff --git a/lib/ansible/module_utils/facts/default_collectors.py b/lib/ansible/module_utils/facts/default_collectors.py index b5969f14bb..a302393c94 100644 --- a/lib/ansible/module_utils/facts/default_collectors.py +++ b/lib/ansible/module_utils/facts/default_collectors.py @@ -73,59 +73,81 @@ from ansible.module_utils.facts.virtual.netbsd import NetBSDVirtualCollector from ansible.module_utils.facts.virtual.openbsd import OpenBSDVirtualCollector from ansible.module_utils.facts.virtual.sunos import SunOSVirtualCollector -# TODO: make config driven -collectors = [ApparmorFactCollector, - CmdLineFactCollector, - DateTimeFactCollector, - DistributionFactCollector, - DnsFactCollector, - EnvFactCollector, - FipsFactCollector, +# these should always be first due to most other facts depending on them +_base = [ + PlatformFactCollector, + DistributionFactCollector, + LSBFactCollector +] + +# These restrict what is possible in others +_restrictive = [ + SelinuxFactCollector, + ApparmorFactCollector, + FipsFactCollector +] - HardwareCollector, - AIXHardwareCollector, - DarwinHardwareCollector, - DragonFlyHardwareCollector, - FreeBSDHardwareCollector, - HPUXHardwareCollector, - HurdHardwareCollector, - LinuxHardwareCollector, - NetBSDHardwareCollector, - OpenBSDHardwareCollector, - SunOSHardwareCollector, - LocalFactCollector, - LSBFactCollector, +# general info, not required but probably useful for other facts +_general = [ + PythonFactCollector, + SystemCapabilitiesFactCollector, + PkgMgrFactCollector, + OpenBSDPkgMgrFactCollector, + ServiceMgrFactCollector, + CmdLineFactCollector, + DateTimeFactCollector, + EnvFactCollector, + SshPubKeyFactCollector, + UserFactCollector +] - NetworkCollector, - AIXNetworkCollector, - DarwinNetworkCollector, - DragonFlyNetworkCollector, - FreeBSDNetworkCollector, - HPUXNetworkCollector, - HurdNetworkCollector, - LinuxNetworkCollector, - NetBSDNetworkCollector, - OpenBSDNetworkCollector, - SunOSNetworkCollector, +# virtual, this might also limit hardware/networking +_virtual = [ + VirtualCollector, + DragonFlyVirtualCollector, + FreeBSDVirtualCollector, + LinuxVirtualCollector, + OpenBSDVirtualCollector, + NetBSDVirtualCollector, + SunOSVirtualCollector, + HPUXVirtualCollector +] - PkgMgrFactCollector, - OpenBSDPkgMgrFactCollector, - PlatformFactCollector, - PythonFactCollector, - SelinuxFactCollector, - ServiceMgrFactCollector, - SshPubKeyFactCollector, - SystemCapabilitiesFactCollector, - UserFactCollector, +_hardware = [ + HardwareCollector, + AIXHardwareCollector, + DarwinHardwareCollector, + DragonFlyHardwareCollector, + FreeBSDHardwareCollector, + HPUXHardwareCollector, + HurdHardwareCollector, + LinuxHardwareCollector, + NetBSDHardwareCollector, + OpenBSDHardwareCollector, + SunOSHardwareCollector +] - VirtualCollector, - DragonFlyVirtualCollector, - FreeBSDVirtualCollector, - LinuxVirtualCollector, - OpenBSDVirtualCollector, - NetBSDVirtualCollector, - SunOSVirtualCollector, - HPUXVirtualCollector, +_network = [ + DnsFactCollector, + NetworkCollector, + AIXNetworkCollector, + DarwinNetworkCollector, + DragonFlyNetworkCollector, + FreeBSDNetworkCollector, + HPUXNetworkCollector, + HurdNetworkCollector, + LinuxNetworkCollector, + NetBSDNetworkCollector, + OpenBSDNetworkCollector, + SunOSNetworkCollector +] - FacterFactCollector, - OhaiFactCollector] +# other fact sources +_extra_facts = [ + LocalFactCollector, + FacterFactCollector, + OhaiFactCollector +] + +# TODO: make config driven +collectors = _base + _restrictive + _general + _virtual + _hardware + _network + _extra_facts |