1# This code is part of Ansible, but is an independent component.
2# This particular file snippet, and this file snippet only, is BSD licensed.
3# Modules you write using this snippet, which is embedded dynamically by Ansible
4# still belong to the author of the module, and may assign their own license
5# to the complete work.
6#
7# (c) 2017 Red Hat Inc.
8#
9# Redistribution and use in source and binary forms, with or without modification,
10# are permitted provided that the following conditions are met:
11#
12#    * Redistributions of source code must retain the above copyright
13#      notice, this list of conditions and the following disclaimer.
14#    * Redistributions in binary form must reproduce the above copyright notice,
15#      this list of conditions and the following disclaimer in the documentation
16#      and/or other materials provided with the distribution.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
26# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28from __future__ import (absolute_import, division, print_function)
29__metaclass__ = type
30
31
32from ansible.module_utils.facts.other.facter import FacterFactCollector
33from ansible.module_utils.facts.other.ohai import OhaiFactCollector
34
35from ansible.module_utils.facts.system.apparmor import ApparmorFactCollector
36from ansible.module_utils.facts.system.caps import SystemCapabilitiesFactCollector
37from ansible.module_utils.facts.system.chroot import ChrootFactCollector
38from ansible.module_utils.facts.system.cmdline import CmdLineFactCollector
39from ansible.module_utils.facts.system.distribution import DistributionFactCollector
40from ansible.module_utils.facts.system.date_time import DateTimeFactCollector
41from ansible.module_utils.facts.system.env import EnvFactCollector
42from ansible.module_utils.facts.system.dns import DnsFactCollector
43from ansible.module_utils.facts.system.fips import FipsFactCollector
44from ansible.module_utils.facts.system.local import LocalFactCollector
45from ansible.module_utils.facts.system.lsb import LSBFactCollector
46from ansible.module_utils.facts.system.pkg_mgr import PkgMgrFactCollector
47from ansible.module_utils.facts.system.pkg_mgr import OpenBSDPkgMgrFactCollector
48from ansible.module_utils.facts.system.platform import PlatformFactCollector
49from ansible.module_utils.facts.system.python import PythonFactCollector
50from ansible.module_utils.facts.system.selinux import SelinuxFactCollector
51from ansible.module_utils.facts.system.service_mgr import ServiceMgrFactCollector
52from ansible.module_utils.facts.system.ssh_pub_keys import SshPubKeyFactCollector
53from ansible.module_utils.facts.system.user import UserFactCollector
54
55from ansible.module_utils.facts.hardware.base import HardwareCollector
56from ansible.module_utils.facts.hardware.aix import AIXHardwareCollector
57from ansible.module_utils.facts.hardware.darwin import DarwinHardwareCollector
58from ansible.module_utils.facts.hardware.dragonfly import DragonFlyHardwareCollector
59from ansible.module_utils.facts.hardware.freebsd import FreeBSDHardwareCollector
60from ansible.module_utils.facts.hardware.hpux import HPUXHardwareCollector
61from ansible.module_utils.facts.hardware.hurd import HurdHardwareCollector
62from ansible.module_utils.facts.hardware.linux import LinuxHardwareCollector
63from ansible.module_utils.facts.hardware.netbsd import NetBSDHardwareCollector
64from ansible.module_utils.facts.hardware.openbsd import OpenBSDHardwareCollector
65from ansible.module_utils.facts.hardware.sunos import SunOSHardwareCollector
66
67from ansible.module_utils.facts.network.base import NetworkCollector
68from ansible.module_utils.facts.network.aix import AIXNetworkCollector
69from ansible.module_utils.facts.network.darwin import DarwinNetworkCollector
70from ansible.module_utils.facts.network.dragonfly import DragonFlyNetworkCollector
71from ansible.module_utils.facts.network.fc_wwn import FcWwnInitiatorFactCollector
72from ansible.module_utils.facts.network.freebsd import FreeBSDNetworkCollector
73from ansible.module_utils.facts.network.hpux import HPUXNetworkCollector
74from ansible.module_utils.facts.network.hurd import HurdNetworkCollector
75from ansible.module_utils.facts.network.linux import LinuxNetworkCollector
76from ansible.module_utils.facts.network.iscsi import IscsiInitiatorNetworkCollector
77from ansible.module_utils.facts.network.nvme import NvmeInitiatorNetworkCollector
78from ansible.module_utils.facts.network.netbsd import NetBSDNetworkCollector
79from ansible.module_utils.facts.network.openbsd import OpenBSDNetworkCollector
80from ansible.module_utils.facts.network.sunos import SunOSNetworkCollector
81
82from ansible.module_utils.facts.virtual.base import VirtualCollector
83from ansible.module_utils.facts.virtual.dragonfly import DragonFlyVirtualCollector
84from ansible.module_utils.facts.virtual.freebsd import FreeBSDVirtualCollector
85from ansible.module_utils.facts.virtual.hpux import HPUXVirtualCollector
86from ansible.module_utils.facts.virtual.linux import LinuxVirtualCollector
87from ansible.module_utils.facts.virtual.netbsd import NetBSDVirtualCollector
88from ansible.module_utils.facts.virtual.openbsd import OpenBSDVirtualCollector
89from ansible.module_utils.facts.virtual.sunos import SunOSVirtualCollector
90
91# these should always be first due to most other facts depending on them
92_base = [
93    PlatformFactCollector,
94    DistributionFactCollector,
95    LSBFactCollector
96]
97
98# These restrict what is possible in others
99_restrictive = [
100    SelinuxFactCollector,
101    ApparmorFactCollector,
102    ChrootFactCollector,
103    FipsFactCollector
104]
105
106# general info, not required but probably useful for other facts
107_general = [
108    PythonFactCollector,
109    SystemCapabilitiesFactCollector,
110    PkgMgrFactCollector,
111    OpenBSDPkgMgrFactCollector,
112    ServiceMgrFactCollector,
113    CmdLineFactCollector,
114    DateTimeFactCollector,
115    EnvFactCollector,
116    SshPubKeyFactCollector,
117    UserFactCollector
118]
119
120# virtual, this might also limit hardware/networking
121_virtual = [
122    VirtualCollector,
123    DragonFlyVirtualCollector,
124    FreeBSDVirtualCollector,
125    LinuxVirtualCollector,
126    OpenBSDVirtualCollector,
127    NetBSDVirtualCollector,
128    SunOSVirtualCollector,
129    HPUXVirtualCollector
130]
131
132_hardware = [
133    HardwareCollector,
134    AIXHardwareCollector,
135    DarwinHardwareCollector,
136    DragonFlyHardwareCollector,
137    FreeBSDHardwareCollector,
138    HPUXHardwareCollector,
139    HurdHardwareCollector,
140    LinuxHardwareCollector,
141    NetBSDHardwareCollector,
142    OpenBSDHardwareCollector,
143    SunOSHardwareCollector
144]
145
146_network = [
147    DnsFactCollector,
148    FcWwnInitiatorFactCollector,
149    NetworkCollector,
150    AIXNetworkCollector,
151    DarwinNetworkCollector,
152    DragonFlyNetworkCollector,
153    FreeBSDNetworkCollector,
154    HPUXNetworkCollector,
155    HurdNetworkCollector,
156    IscsiInitiatorNetworkCollector,
157    NvmeInitiatorNetworkCollector,
158    LinuxNetworkCollector,
159    NetBSDNetworkCollector,
160    OpenBSDNetworkCollector,
161    SunOSNetworkCollector
162]
163
164# other fact sources
165_extra_facts = [
166    LocalFactCollector,
167    FacterFactCollector,
168    OhaiFactCollector
169]
170
171# TODO: make config driven
172collectors = _base + _restrictive + _general + _virtual + _hardware + _network + _extra_facts
173