facter 2.0.1.rc1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of facter might be problematic. Click here for more details.

Files changed (379) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +194 -0
  3. data/CONTRIBUTING.md +65 -0
  4. data/Gemfile +43 -0
  5. data/LICENSE +15 -0
  6. data/README.md +33 -0
  7. data/Rakefile +79 -0
  8. data/bin/facter +16 -0
  9. data/etc/facter.conf +5 -0
  10. data/ext/build_defaults.yaml +24 -0
  11. data/ext/debian/changelog.erb +59 -0
  12. data/ext/debian/compat +1 -0
  13. data/ext/debian/control +14 -0
  14. data/ext/debian/copyright +19 -0
  15. data/ext/debian/docs +1 -0
  16. data/ext/debian/lintian-overrides +0 -0
  17. data/ext/debian/rules +10 -0
  18. data/ext/debian/source/format +1 -0
  19. data/ext/facter-diff +74 -0
  20. data/ext/ips/facter.p5m.erb +10 -0
  21. data/ext/ips/rules +7 -0
  22. data/ext/ips/transforms +18 -0
  23. data/ext/osx/file_mapping.yaml +27 -0
  24. data/ext/osx/preflight.erb +33 -0
  25. data/ext/osx/prototype.plist.erb +38 -0
  26. data/ext/project_data.yaml +33 -0
  27. data/ext/redhat/facter.spec.erb +220 -0
  28. data/ext/solaris/pkginfo +7 -0
  29. data/install.rb +380 -0
  30. data/lib/facter.rb +262 -0
  31. data/lib/facter/Cfkey.rb +42 -0
  32. data/lib/facter/application.rb +204 -0
  33. data/lib/facter/architecture.rb +50 -0
  34. data/lib/facter/augeasversion.rb +28 -0
  35. data/lib/facter/blockdevices.rb +105 -0
  36. data/lib/facter/core/aggregate.rb +220 -0
  37. data/lib/facter/core/directed_graph.rb +46 -0
  38. data/lib/facter/core/execution.rb +100 -0
  39. data/lib/facter/core/execution/base.rb +73 -0
  40. data/lib/facter/core/execution/posix.rb +50 -0
  41. data/lib/facter/core/execution/windows.rb +57 -0
  42. data/lib/facter/core/logging.rb +169 -0
  43. data/lib/facter/core/resolvable.rb +94 -0
  44. data/lib/facter/core/suitable.rb +117 -0
  45. data/lib/facter/domain.rb +99 -0
  46. data/lib/facter/ec2.rb +37 -0
  47. data/lib/facter/facterversion.rb +15 -0
  48. data/lib/facter/filesystems.rb +38 -0
  49. data/lib/facter/fqdn.rb +22 -0
  50. data/lib/facter/hardwareisa.rb +20 -0
  51. data/lib/facter/hardwaremodel.rb +67 -0
  52. data/lib/facter/hostname.rb +33 -0
  53. data/lib/facter/id.rb +21 -0
  54. data/lib/facter/interfaces.rb +46 -0
  55. data/lib/facter/ipaddress.rb +171 -0
  56. data/lib/facter/ipaddress6.rb +82 -0
  57. data/lib/facter/iphostnumber.rb +29 -0
  58. data/lib/facter/kernel.rb +22 -0
  59. data/lib/facter/kernelmajversion.rb +15 -0
  60. data/lib/facter/kernelrelease.rb +42 -0
  61. data/lib/facter/kernelversion.rb +22 -0
  62. data/lib/facter/ldom.rb +47 -0
  63. data/lib/facter/lsbdistcodename.rb +18 -0
  64. data/lib/facter/lsbdistdescription.rb +21 -0
  65. data/lib/facter/lsbdistid.rb +18 -0
  66. data/lib/facter/lsbdistrelease.rb +18 -0
  67. data/lib/facter/lsbmajdistrelease.rb +27 -0
  68. data/lib/facter/lsbrelease.rb +18 -0
  69. data/lib/facter/macaddress.rb +97 -0
  70. data/lib/facter/macosx.rb +56 -0
  71. data/lib/facter/manufacturer.rb +68 -0
  72. data/lib/facter/memory.rb +162 -0
  73. data/lib/facter/netmask.rb +42 -0
  74. data/lib/facter/network.rb +20 -0
  75. data/lib/facter/operatingsystem.rb +121 -0
  76. data/lib/facter/operatingsystemmajrelease.rb +33 -0
  77. data/lib/facter/operatingsystemrelease.rb +226 -0
  78. data/lib/facter/osfamily.rb +35 -0
  79. data/lib/facter/path.rb +14 -0
  80. data/lib/facter/physicalprocessorcount.rb +84 -0
  81. data/lib/facter/processor.rb +183 -0
  82. data/lib/facter/ps.rb +30 -0
  83. data/lib/facter/puppetversion.rb +20 -0
  84. data/lib/facter/rubysitedir.rb +12 -0
  85. data/lib/facter/rubyversion.rb +12 -0
  86. data/lib/facter/selinux.rb +99 -0
  87. data/lib/facter/ssh.rb +72 -0
  88. data/lib/facter/timezone.rb +14 -0
  89. data/lib/facter/uniqueid.rb +4 -0
  90. data/lib/facter/uptime.rb +34 -0
  91. data/lib/facter/uptime_days.rb +15 -0
  92. data/lib/facter/uptime_hours.rb +15 -0
  93. data/lib/facter/uptime_seconds.rb +24 -0
  94. data/lib/facter/util/architecture.rb +19 -0
  95. data/lib/facter/util/collection.rb +161 -0
  96. data/lib/facter/util/composite_loader.rb +12 -0
  97. data/lib/facter/util/config.rb +61 -0
  98. data/lib/facter/util/confine.rb +66 -0
  99. data/lib/facter/util/directory_loader.rb +83 -0
  100. data/lib/facter/util/ec2.rb +101 -0
  101. data/lib/facter/util/fact.rb +204 -0
  102. data/lib/facter/util/file_read.rb +37 -0
  103. data/lib/facter/util/formatter.rb +38 -0
  104. data/lib/facter/util/ip.rb +285 -0
  105. data/lib/facter/util/ip/windows.rb +215 -0
  106. data/lib/facter/util/loader.rb +146 -0
  107. data/lib/facter/util/macaddress.rb +43 -0
  108. data/lib/facter/util/macosx.rb +73 -0
  109. data/lib/facter/util/manufacturer.rb +104 -0
  110. data/lib/facter/util/memory.rb +228 -0
  111. data/lib/facter/util/monkey_patches.rb +8 -0
  112. data/lib/facter/util/netmask.rb +40 -0
  113. data/lib/facter/util/normalization.rb +94 -0
  114. data/lib/facter/util/nothing_loader.rb +12 -0
  115. data/lib/facter/util/parser.rb +158 -0
  116. data/lib/facter/util/plist.rb +24 -0
  117. data/lib/facter/util/plist/generator.rb +228 -0
  118. data/lib/facter/util/plist/parser.rb +226 -0
  119. data/lib/facter/util/processor.rb +291 -0
  120. data/lib/facter/util/registry.rb +11 -0
  121. data/lib/facter/util/resolution.rb +152 -0
  122. data/lib/facter/util/solaris_zones.rb +158 -0
  123. data/lib/facter/util/unix_root.rb +5 -0
  124. data/lib/facter/util/uptime.rb +81 -0
  125. data/lib/facter/util/values.rb +80 -0
  126. data/lib/facter/util/virtual.rb +151 -0
  127. data/lib/facter/util/vlans.rb +24 -0
  128. data/lib/facter/util/windows_root.rb +37 -0
  129. data/lib/facter/util/wmi.rb +16 -0
  130. data/lib/facter/util/xendomains.rb +10 -0
  131. data/lib/facter/version.rb +86 -0
  132. data/lib/facter/virtual.rb +262 -0
  133. data/lib/facter/vlans.rb +17 -0
  134. data/lib/facter/xendomains.rb +20 -0
  135. data/lib/facter/zfs_version.rb +10 -0
  136. data/lib/facter/zonename.rb +6 -0
  137. data/lib/facter/zones.rb +17 -0
  138. data/lib/facter/zpool_version.rb +10 -0
  139. data/spec/fixtures/cpuinfo/amd64dual +57 -0
  140. data/spec/fixtures/cpuinfo/amd64quad +79 -0
  141. data/spec/fixtures/cpuinfo/amd64solo +23 -0
  142. data/spec/fixtures/cpuinfo/amd64tri +86 -0
  143. data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
  144. data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
  145. data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
  146. data/spec/fixtures/cpuinfo/panda-armel +17 -0
  147. data/spec/fixtures/cpuinfo/ppc64 +19 -0
  148. data/spec/fixtures/cpuinfo/sparc +10 -0
  149. data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
  150. data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
  151. data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
  152. data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
  153. data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
  154. data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
  155. data/spec/fixtures/hpux/sched.models +174 -0
  156. data/spec/fixtures/hpux/unistd.h +1534 -0
  157. data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
  158. data/spec/fixtures/ifconfig/centos_5_5 +17 -0
  159. data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
  160. data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
  161. data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
  162. data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
  163. data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
  164. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
  165. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
  166. data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
  167. data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
  168. data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
  169. data/spec/fixtures/ifconfig/fedora_10 +36 -0
  170. data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
  171. data/spec/fixtures/ifconfig/fedora_13 +18 -0
  172. data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
  173. data/spec/fixtures/ifconfig/fedora_8 +38 -0
  174. data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
  175. data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
  176. data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
  177. data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
  178. data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
  179. data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
  180. data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
  181. data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
  182. data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
  183. data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
  184. data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
  185. data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
  186. data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
  187. data/spec/fixtures/ldom/ldom_v1 +6 -0
  188. data/spec/fixtures/netstat/centos_5_5 +5 -0
  189. data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
  190. data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
  191. data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
  192. data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
  193. data/spec/fixtures/netstat/fedora_10 +7 -0
  194. data/spec/fixtures/netstat/open_solaris_10 +16 -0
  195. data/spec/fixtures/netstat/open_solaris_b132 +17 -0
  196. data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
  197. data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
  198. data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
  199. data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
  200. data/spec/fixtures/unit/filesystems/linux +28 -0
  201. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
  202. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
  203. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
  204. data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
  205. data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
  206. data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
  207. data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
  208. data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
  209. data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
  210. data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
  211. data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
  212. data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
  213. data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
  214. data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
  215. data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
  216. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
  217. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
  218. data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
  219. data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
  220. data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
  221. data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
  222. data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
  223. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
  224. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
  225. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
  226. data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
  227. data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
  228. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
  229. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
  230. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
  231. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
  232. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
  233. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
  234. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
  235. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
  236. data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
  237. data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
  238. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
  239. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
  240. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
  241. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
  242. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
  243. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
  244. data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
  245. data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
  246. data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
  247. data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
  248. data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
  249. data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
  250. data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
  251. data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
  252. data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
  253. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
  254. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
  255. data/spec/fixtures/unit/util/loader/nosuchfact.rb +1 -0
  256. data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
  257. data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
  258. data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
  259. data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
  260. data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
  261. data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
  262. data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
  263. data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
  264. data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
  265. data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
  266. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
  267. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
  268. data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
  269. data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
  270. data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
  271. data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
  272. data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
  273. data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
  274. data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
  275. data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
  276. data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
  277. data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
  278. data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
  279. data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
  280. data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
  281. data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
  282. data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
  283. data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
  284. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
  285. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
  286. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
  287. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
  288. data/spec/integration/facter_spec.rb +39 -0
  289. data/spec/lib/facter_spec/cpuinfo.rb +15 -0
  290. data/spec/lib/facter_spec/windows_network.rb +64 -0
  291. data/spec/puppetlabs_spec/files.rb +57 -0
  292. data/spec/puppetlabs_spec/fixtures.rb +49 -0
  293. data/spec/puppetlabs_spec/matchers.rb +87 -0
  294. data/spec/puppetlabs_spec/verbose.rb +9 -0
  295. data/spec/puppetlabs_spec_helper.rb +26 -0
  296. data/spec/shared_contexts/platform.rb +55 -0
  297. data/spec/shared_formats/parses.rb +3 -0
  298. data/spec/spec_helper.rb +75 -0
  299. data/spec/unit/application_spec.rb +101 -0
  300. data/spec/unit/architecture_spec.rb +63 -0
  301. data/spec/unit/blockdevices_spec.rb +109 -0
  302. data/spec/unit/core/aggregate_spec.rb +125 -0
  303. data/spec/unit/core/directed_graph_spec.rb +79 -0
  304. data/spec/unit/core/execution/base_spec.rb +119 -0
  305. data/spec/unit/core/execution/posix_spec.rb +86 -0
  306. data/spec/unit/core/execution/windows_spec.rb +106 -0
  307. data/spec/unit/core/execution_spec.rb +37 -0
  308. data/spec/unit/core/logging_spec.rb +104 -0
  309. data/spec/unit/core/resolvable_spec.rb +81 -0
  310. data/spec/unit/core/suitable_spec.rb +96 -0
  311. data/spec/unit/domain_spec.rb +310 -0
  312. data/spec/unit/ec2_spec.rb +187 -0
  313. data/spec/unit/facter_spec.rb +108 -0
  314. data/spec/unit/filesystems_spec.rb +50 -0
  315. data/spec/unit/hardwareisa_spec.rb +41 -0
  316. data/spec/unit/hardwaremodel_spec.rb +56 -0
  317. data/spec/unit/hostname_spec.rb +40 -0
  318. data/spec/unit/id_spec.rb +29 -0
  319. data/spec/unit/interfaces_spec.rb +57 -0
  320. data/spec/unit/ipaddress6_spec.rb +161 -0
  321. data/spec/unit/ipaddress_spec.rb +114 -0
  322. data/spec/unit/kernel_spec.rb +24 -0
  323. data/spec/unit/kernelmajversion_spec.rb +17 -0
  324. data/spec/unit/kernelrelease_spec.rb +53 -0
  325. data/spec/unit/kernelversion_spec.rb +32 -0
  326. data/spec/unit/ldom_spec.rb +74 -0
  327. data/spec/unit/lsbdistcodename_spec.rb +25 -0
  328. data/spec/unit/lsbdistdescription_spec.rb +25 -0
  329. data/spec/unit/lsbdistid_spec.rb +25 -0
  330. data/spec/unit/lsbdistrelease_spec.rb +25 -0
  331. data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
  332. data/spec/unit/lsbrelease_spec.rb +25 -0
  333. data/spec/unit/macaddress_spec.rb +61 -0
  334. data/spec/unit/manufacturer_spec.rb +115 -0
  335. data/spec/unit/memory_spec.rb +539 -0
  336. data/spec/unit/netmask_spec.rb +95 -0
  337. data/spec/unit/operatingsystem_spec.rb +141 -0
  338. data/spec/unit/operatingsystemmajrelease_spec.rb +16 -0
  339. data/spec/unit/operatingsystemrelease_spec.rb +226 -0
  340. data/spec/unit/physicalprocessorcount_spec.rb +76 -0
  341. data/spec/unit/processor_spec.rb +393 -0
  342. data/spec/unit/ps_spec.rb +42 -0
  343. data/spec/unit/selinux_spec.rb +114 -0
  344. data/spec/unit/ssh_spec.rb +77 -0
  345. data/spec/unit/uniqueid_spec.rb +27 -0
  346. data/spec/unit/uptime_spec.rb +110 -0
  347. data/spec/unit/util/collection_spec.rb +258 -0
  348. data/spec/unit/util/config_spec.rb +84 -0
  349. data/spec/unit/util/confine_spec.rb +148 -0
  350. data/spec/unit/util/directory_loader_spec.rb +88 -0
  351. data/spec/unit/util/ec2_spec.rb +180 -0
  352. data/spec/unit/util/fact_spec.rb +142 -0
  353. data/spec/unit/util/file_read_spec.rb +29 -0
  354. data/spec/unit/util/ip/windows_spec.rb +80 -0
  355. data/spec/unit/util/ip_spec.rb +463 -0
  356. data/spec/unit/util/loader_spec.rb +286 -0
  357. data/spec/unit/util/macaddress_spec.rb +141 -0
  358. data/spec/unit/util/macosx_spec.rb +113 -0
  359. data/spec/unit/util/manufacturer_spec.rb +179 -0
  360. data/spec/unit/util/normalization_spec.rb +113 -0
  361. data/spec/unit/util/parser_spec.rb +200 -0
  362. data/spec/unit/util/processor_spec.rb +92 -0
  363. data/spec/unit/util/registry_spec.rb +76 -0
  364. data/spec/unit/util/resolution_spec.rb +129 -0
  365. data/spec/unit/util/solaris_zones_spec.rb +127 -0
  366. data/spec/unit/util/uptime_spec.rb +126 -0
  367. data/spec/unit/util/values_spec.rb +131 -0
  368. data/spec/unit/util/virtual_spec.rb +294 -0
  369. data/spec/unit/util/vlans_spec.rb +12 -0
  370. data/spec/unit/util/wmi_spec.rb +19 -0
  371. data/spec/unit/util/xendomains_spec.rb +21 -0
  372. data/spec/unit/version_spec.rb +42 -0
  373. data/spec/unit/virtual_spec.rb +470 -0
  374. data/spec/unit/zfs_version_spec.rb +75 -0
  375. data/spec/unit/zonename_spec.rb +14 -0
  376. data/spec/unit/zones_spec.rb +55 -0
  377. data/spec/unit/zpool_version_spec.rb +75 -0
  378. data/spec/watchr.rb +125 -0
  379. metadata +674 -0
@@ -0,0 +1,7 @@
1
+ PKG=CSWfacter
2
+ NAME=facter - System Fact Gatherer
3
+ VERSION=1.6.3rc1
4
+ CATEGORY=application
5
+ VENDOR=http://www.puppetlabs.com/puppet/related-projects/facter
6
+ HOTLINE=http://puppetlabs.com/cgi-bin/facter.cgi
7
+ EMAIL=luke@madstop.com
@@ -0,0 +1,380 @@
1
+ #! /usr/bin/env ruby
2
+ #--
3
+ # Copyright 2004 Austin Ziegler <ruby-install@halostatue.ca>
4
+ # Install utility. Based on the original installation script for rdoc by the
5
+ # Pragmatic Programmers.
6
+ #
7
+ # This program is free software. It may be redistributed and/or modified under
8
+ # the terms of the GPL version 2 (or later) or the Ruby licence.
9
+ #
10
+ # Usage
11
+ # -----
12
+ # In most cases, if you have a typical project layout, you will need to do
13
+ # absolutely nothing to make this work for you. This layout is:
14
+ #
15
+ # bin/ # executable files -- "commands"
16
+ # lib/ # the source of the library
17
+ #
18
+ # The default behaviour:
19
+ # 1) Build Rdoc documentation from all files in bin/ (excluding .bat and .cmd),
20
+ # all .rb files in lib/, ./README, ./ChangeLog, and ./Install.
21
+ # 2) Build ri documentation from all files in bin/ (excluding .bat and .cmd),
22
+ # and all .rb files in lib/. This is disabled by default on Win32.
23
+ # 3) Install commands from bin/ into the Ruby bin directory. On Windows, if a
24
+ # if a corresponding batch file (.bat or .cmd) exists in the bin directory,
25
+ # it will be copied over as well. Otherwise, a batch file (always .bat) will
26
+ # be created to run the specified command.
27
+ # 4) Install all library files ending in .rb from lib/ into Ruby's
28
+ # site_lib/version directory.
29
+ #
30
+ #++
31
+
32
+ require 'rbconfig'
33
+ require 'find'
34
+ require 'fileutils'
35
+ require 'optparse'
36
+ require 'ostruct'
37
+ require 'tempfile'
38
+
39
+ begin
40
+ require 'rdoc/rdoc'
41
+ $haverdoc = true
42
+ rescue LoadError
43
+ puts "Missing rdoc; skipping documentation"
44
+ $haverdoc = false
45
+ end
46
+
47
+ begin
48
+ if $haverdoc
49
+ rst2man = %x{which rst2man.py}
50
+ $haveman = true
51
+ else
52
+ $haveman = false
53
+ end
54
+ rescue
55
+ puts "Missing rst2man; skipping man page creation"
56
+ $haveman = false
57
+ end
58
+
59
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
60
+ require 'facter'
61
+ @operatingsystem = Facter[:operatingsystem].value
62
+
63
+ PREREQS = %w{cgi}
64
+
65
+ InstallOptions = OpenStruct.new
66
+
67
+ def glob(list)
68
+ g = list.map { |i| Dir.glob(i) }
69
+ g.flatten!
70
+ g.compact!
71
+ g
72
+ end
73
+
74
+ def do_bins(bins, target, strip = 's?bin/')
75
+ bins.each do |bf|
76
+ obf = bf.gsub(/#{strip}/, '')
77
+ install_binfile(bf, obf, target)
78
+ end
79
+ end
80
+
81
+ def do_libs(libs, strip = 'lib/')
82
+ libs.each do |lf|
83
+ olf = File.join(InstallOptions.site_dir, lf.gsub(/^#{strip}/, ''))
84
+ op = File.dirname(olf)
85
+ FileUtils.makedirs(op, {:mode => 0755, :verbose => true})
86
+ FileUtils.chmod(0755, op)
87
+ FileUtils.install(lf, olf, {:mode => 0644, :preserve => true, :verbose => true})
88
+ end
89
+ end
90
+
91
+ def do_man(man, strip = 'man/')
92
+ if (InstallOptions.man == true)
93
+ man.each do |mf|
94
+ omf = File.join(InstallOptions.man_dir, mf.gsub(/#{strip}/, ''))
95
+ om = File.dirname(omf)
96
+ FileUtils.makedirs(om, {:mode => 0755, :verbose => true})
97
+ FileUtils.chmod(0755, om)
98
+ FileUtils.install(mf, omf, {:mode => 0644, :preserve => true, :verbose => true})
99
+ gzip = %x{which gzip}
100
+ gzip.chomp!
101
+ %x{#{gzip} -f #{omf}}
102
+ end
103
+ else
104
+ puts "Skipping Man Page Generation"
105
+ end
106
+ end
107
+
108
+ # Verify that all of the prereqs are installed
109
+ def check_prereqs
110
+ PREREQS.each { |pre|
111
+ begin
112
+ require pre
113
+ rescue LoadError
114
+ puts "Could not load #{pre} Ruby library; cannot install"
115
+ exit -1
116
+ end
117
+ }
118
+ end
119
+
120
+ def is_windows?
121
+ @operatingsystem == 'windows'
122
+ end
123
+
124
+ ##
125
+ # Prepare the file installation.
126
+ #
127
+ def prepare_installation
128
+ # Only try to do docs if we're sure they have rdoc
129
+ if $haverdoc
130
+ InstallOptions.rdoc = true
131
+ if is_windows?
132
+ InstallOptions.ri = false
133
+ else
134
+ InstallOptions.ri = true
135
+ end
136
+ else
137
+ InstallOptions.rdoc = false
138
+ InstallOptions.ri = false
139
+ end
140
+
141
+
142
+ if $haveman
143
+ InstallOptions.man = true
144
+ if is_windows?
145
+ InstallOptions.man = false
146
+ end
147
+ else
148
+ InstallOptions.man = false
149
+ end
150
+
151
+ ARGV.options do |opts|
152
+ opts.banner = "Usage: #{File.basename($0)} [options]"
153
+ opts.separator ""
154
+ opts.on('--[no-]rdoc', 'Prevents the creation of RDoc output.', 'Default on.') do |onrdoc|
155
+ InstallOptions.rdoc = onrdoc
156
+ end
157
+ opts.on('--[no-]ri', 'Prevents the creation of RI output.', 'Default off on mswin32.') do |onri|
158
+ InstallOptions.ri = onri
159
+ end
160
+ opts.on('--[no-]man', 'Presents the creation of man pages.', 'Default on.') do |onman|
161
+ InstallOptions.man = onman
162
+ end
163
+ opts.on('--destdir[=OPTIONAL]', 'Installation prefix for all targets', 'Default essentially /') do |destdir|
164
+ InstallOptions.destdir = destdir
165
+ end
166
+ opts.on('--bindir[=OPTIONAL]', 'Installation directory for binaries', 'overrides RbConfig::CONFIG["bindir"]') do |bindir|
167
+ InstallOptions.bindir = bindir
168
+ end
169
+ opts.on('--ruby[=OPTIONAL]', 'Ruby interpreter to use with installation', 'overrides ruby used to call install.rb') do |ruby|
170
+ InstallOptions.ruby = ruby
171
+ end
172
+ opts.on('--sitelibdir[=OPTIONAL]', 'Installation directory for libraries', 'overrides RbConfig::CONFIG["sitelibdir"]') do |sitelibdir|
173
+ InstallOptions.sitelibdir = sitelibdir
174
+ end
175
+ opts.on('--mandir[=OPTIONAL]', 'Installation directory for man pages', 'overrides RbConfig::CONFIG["mandir"]') do |mandir|
176
+ InstallOptions.mandir = mandir
177
+ end
178
+ opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
179
+ InstallOptions.rdoc = false
180
+ InstallOptions.ri = false
181
+ end
182
+ opts.on('--full', 'Performs a full installation. All', 'optional installation steps are run.') do |full|
183
+ InstallOptions.rdoc = true
184
+ InstallOptions.ri = true
185
+ end
186
+ opts.separator("")
187
+ opts.on_tail('--help', "Shows this help text.") do
188
+ $stderr.puts opts
189
+ exit
190
+ end
191
+
192
+ opts.parse!
193
+ end
194
+
195
+ version = [RbConfig::CONFIG["MAJOR"], RbConfig::CONFIG["MINOR"]].join(".")
196
+ libdir = File.join(RbConfig::CONFIG["libdir"], "ruby", version)
197
+
198
+ # Mac OS X 10.5 and higher declare bindir
199
+ # /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin
200
+ # which is not generally where people expect executables to be installed
201
+ # These settings are appropriate defaults for all OS X versions.
202
+ if RUBY_PLATFORM =~ /^universal-darwin[\d\.]+$/
203
+ RbConfig::CONFIG['bindir'] = "/usr/bin"
204
+ end
205
+
206
+ if not InstallOptions.bindir.nil?
207
+ bindir = InstallOptions.bindir
208
+ else
209
+ bindir = RbConfig::CONFIG['bindir']
210
+ end
211
+
212
+ if not InstallOptions.sitelibdir.nil?
213
+ sitelibdir = InstallOptions.sitelibdir
214
+ else
215
+ sitelibdir = RbConfig::CONFIG["sitelibdir"]
216
+ if sitelibdir.nil?
217
+ sitelibdir = $:.find { |x| x =~ /site_ruby/ }
218
+ if sitelibdir.nil?
219
+ sitelibdir = File.join(libdir, "site_ruby")
220
+ elsif sitelibdir !~ Regexp.quote(version)
221
+ sitelibdir = File.join(sitelibdir, version)
222
+ end
223
+ end
224
+ end
225
+
226
+ if not InstallOptions.mandir.nil?
227
+ mandir = InstallOptions.mandir
228
+ else
229
+ mandir = RbConfig::CONFIG['mandir']
230
+ end
231
+
232
+ if (destdir = InstallOptions.destdir)
233
+ bindir = join(destdir, bindir)
234
+ mandir = join(destdir, mandir)
235
+ sitelibdir = join(destdir, sitelibdir)
236
+
237
+ FileUtils.makedirs(bindir)
238
+ FileUtils.makedirs(mandir)
239
+ FileUtils.makedirs(sitelibdir)
240
+ end
241
+
242
+ InstallOptions.site_dir = sitelibdir
243
+ InstallOptions.bin_dir = bindir
244
+ InstallOptions.lib_dir = libdir
245
+ InstallOptions.man_dir = mandir
246
+ end
247
+
248
+ ##
249
+ # Join two paths. On Windows, dir must be converted to a relative path,
250
+ # by stripping the drive letter, but only if the basedir is not empty.
251
+ #
252
+ def join(basedir, dir)
253
+ return "#{basedir}#{dir[2..-1]}" if is_windows? and basedir.length > 0 and dir.length > 2
254
+
255
+ "#{basedir}#{dir}"
256
+ end
257
+
258
+ ##
259
+ # Build the rdoc documentation. Also, try to build the RI documentation.
260
+ #
261
+ def build_rdoc(files)
262
+ return unless $haverdoc
263
+ begin
264
+ r = RDoc::RDoc.new
265
+ r.document(["--main", "README", "--title",
266
+ "Puppet -- Site Configuration Management", "--line-numbers"] + files)
267
+ rescue RDoc::RDocError => e
268
+ $stderr.puts e.message
269
+ rescue Exception => e
270
+ $stderr.puts "Couldn't build RDoc documentation\n#{e.message}"
271
+ end
272
+ end
273
+
274
+ def build_ri(files)
275
+ return unless $haverdoc
276
+ begin
277
+ ri = RDoc::RDoc.new
278
+ #ri.document(["--ri-site", "--merge"] + files)
279
+ ri.document(["--ri-site"] + files)
280
+ rescue RDoc::RDocError => e
281
+ $stderr.puts e.message
282
+ rescue Exception => e
283
+ $stderr.puts "Couldn't build Ri documentation\n#{e.message}"
284
+ $stderr.puts "Continuing with install..."
285
+ end
286
+ end
287
+
288
+ def build_man(bins)
289
+ return unless $haveman
290
+ begin
291
+ # Locate rst2man
292
+ rst2man = %x{which rst2man.py}
293
+ rst2man.chomp!
294
+ bins.each do |bin|
295
+ b = bin.gsub( "bin/", "")
296
+ %x{#{bin} --help > ./#{b}.rst}
297
+ %x{#{rst2man} ./#{b}.rst ./man/man8/#{b}.8}
298
+ File.unlink("./#{b}.rst")
299
+ end
300
+ rescue SystemCallError
301
+ $stderr.puts "Couldn't build man pages: " + $!
302
+ $stderr.puts "Continuing with install..."
303
+ end
304
+ end
305
+
306
+ ##
307
+ # Install file(s) from ./bin to RbConfig::CONFIG['bindir']. Patch it on the way
308
+ # to insert a #! line; on a Unix install, the command is named as expected
309
+ # (e.g., bin/rdoc becomes rdoc); the shebang line handles running it. Under
310
+ # windows, we add an '.rb' extension and let file associations do their stuff.
311
+ def install_binfile(from, op_file, target)
312
+ tmp_file = Tempfile.new('facter-binfile')
313
+
314
+ if not InstallOptions.ruby.nil?
315
+ ruby = InstallOptions.ruby
316
+ else
317
+ ruby = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
318
+ end
319
+
320
+ File.open(from) do |ip|
321
+ File.open(tmp_file.path, "w") do |op|
322
+ op.puts "#!#{ruby}"
323
+ contents = ip.readlines
324
+ contents.shift if contents[0] =~ /^#!/
325
+ op.write contents.join
326
+ end
327
+ end
328
+
329
+ if is_windows?
330
+ installed_wrapper = false
331
+
332
+ if File.exists?("#{from}.bat")
333
+ FileUtils.install("#{from}.bat", File.join(target, "#{op_file}.bat"), :mode => 0755, :preserve => true, :verbose => true)
334
+ installed_wrapper = true
335
+ end
336
+
337
+ if File.exists?("#{from}.cmd")
338
+ FileUtils.install("#{from}.cmd", File.join(target, "#{op_file}.cmd"), :mode => 0755, :preserve => true, :verbose => true)
339
+ installed_wrapper = true
340
+ end
341
+
342
+ if not installed_wrapper
343
+ tmp_file2 = Tempfile.new('facter-wrapper')
344
+ cwv = <<-EOS
345
+ @echo off
346
+ setlocal
347
+ set RUBY_BIN=%~dp0
348
+ set RUBY_BIN=%RUBY_BIN:\\=/%
349
+ "%RUBY_BIN%ruby.exe" -x "%RUBY_BIN%facter" %*
350
+ EOS
351
+ File.open(tmp_file2.path, "w") { |cw| cw.puts cwv }
352
+ FileUtils.install(tmp_file2.path, File.join(target, "#{op_file}.bat"), :mode => 0755, :preserve => true, :verbose => true)
353
+
354
+ tmp_file2.unlink
355
+ installed_wrapper = true
356
+ end
357
+ end
358
+ FileUtils.install(tmp_file.path, File.join(target, op_file), :mode => 0755, :preserve => true, :verbose => true)
359
+ tmp_file.unlink
360
+ end
361
+
362
+ # Change directory into the facter root so we don't get the wrong files for install.
363
+ FileUtils.cd File.dirname(__FILE__) do
364
+ # Set these values to what you want installed.
365
+ bins = glob(%w{bin/*})
366
+ rdoc = glob(%w{bin/* lib/**/*.rb README* }).reject { |e| e=~ /\.(bat|cmd)$/ }
367
+ ri = glob(%w(bin/*.rb lib/**/*.rb)).reject { |e| e=~ /\.(bat|cmd)$/ }
368
+ man = glob(%w{man/man8/*})
369
+ libs = glob(%w{lib/**/*.rb lib/**/*.py lib/**/LICENSE})
370
+
371
+ check_prereqs
372
+ prepare_installation
373
+
374
+ #build_rdoc(rdoc) if InstallOptions.rdoc
375
+ #build_ri(ri) if InstallOptions.ri
376
+ #build_man(bins) if InstallOptions.man
377
+ do_bins(bins, InstallOptions.bin_dir)
378
+ do_libs(libs)
379
+ do_man(man)
380
+ end
@@ -0,0 +1,262 @@
1
+ # Facter - Host Fact Detection and Reporting
2
+ #
3
+ # Copyright 2011 Puppet Labs Inc
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'facter/version'
18
+
19
+ # Functions as a hash of 'facts' about your system system, such as MAC
20
+ # address, IP address, architecture, etc.
21
+ #
22
+ # @example Retrieve a fact
23
+ # puts Facter['operatingsystem'].value
24
+ #
25
+ # @example Retrieve all facts
26
+ # Facter.to_hash
27
+ # => { "kernel"=>"Linux", "uptime_days"=>0, "ipaddress"=>"10.0.0.1" }
28
+ #
29
+ # @api public
30
+ module Facter
31
+ # Most core functionality of facter is implemented in `Facter::Util`.
32
+ # @api public
33
+ module Util; end
34
+
35
+ require 'facter/util/fact'
36
+ require 'facter/util/collection'
37
+ require 'facter/util/monkey_patches'
38
+
39
+ include Comparable
40
+ include Enumerable
41
+
42
+ require 'facter/core/logging'
43
+ extend Facter::Core::Logging
44
+
45
+ # module methods
46
+
47
+ # Accessor for the collection object which holds all the facts
48
+ # @return [Facter::Util::Collection] the collection of facts
49
+ #
50
+ # @api private
51
+ def self.collection
52
+ unless defined?(@collection) and @collection
53
+ @collection = Facter::Util::Collection.new(
54
+ Facter::Util::Loader.new,
55
+ Facter::Util::Config.ext_fact_loader)
56
+ end
57
+ @collection
58
+ end
59
+
60
+ # Returns whether the JSON "feature" is available.
61
+ #
62
+ # @api private
63
+ def self.json?
64
+ begin
65
+ require 'json'
66
+ true
67
+ rescue LoadError
68
+ false
69
+ end
70
+ end
71
+
72
+ # Returns a fact object by name. If you use this, you still have to
73
+ # call {Facter::Util::Fact#value `value`} on it to retrieve the actual
74
+ # value.
75
+ #
76
+ # @param name [String] the name of the fact
77
+ #
78
+ # @return [Facter::Util::Fact, nil] The fact object, or nil if no fact
79
+ # is found.
80
+ #
81
+ # @api public
82
+ def self.[](name)
83
+ collection.fact(name)
84
+ end
85
+
86
+ # (see [])
87
+ def self.fact(name)
88
+ collection.fact(name)
89
+ end
90
+
91
+ # Flushes cached values for all facts. This does not cause code to be
92
+ # reloaded; it only clears the cached results.
93
+ #
94
+ # @return [void]
95
+ #
96
+ # @api public
97
+ def self.flush
98
+ collection.flush
99
+ end
100
+
101
+ # Lists all fact names
102
+ #
103
+ # @return [Array<String>] array of fact names
104
+ #
105
+ # @api public
106
+ def self.list
107
+ collection.list
108
+ end
109
+
110
+ # Gets the value for a fact. Returns `nil` if no such fact exists.
111
+ #
112
+ # @param name [String] the fact name
113
+ # @return [Object, nil] the value of the fact, or nil if no fact is
114
+ # found
115
+ #
116
+ # @api public
117
+ def self.value(name)
118
+ collection.value(name)
119
+ end
120
+
121
+ # Gets a hash mapping fact names to their values
122
+ #
123
+ # @return [Hash{String => Object}] the hash of fact names and values
124
+ #
125
+ # @api public
126
+ def self.to_hash
127
+ collection.load_all
128
+ collection.to_hash
129
+ end
130
+
131
+ # Define a new fact or extend an existing fact.
132
+ #
133
+ # @param name [Symbol] The name of the fact to define
134
+ # @param options [Hash] A hash of options to set on the fact
135
+ #
136
+ # @return [Facter::Util::Fact] The fact that was defined
137
+ #
138
+ # @api public
139
+ # @see {Facter::Util::Collection#define_fact}
140
+ def self.define_fact(name, options = {}, &block)
141
+ collection.define_fact(name, options, &block)
142
+ end
143
+
144
+ # Adds a {Facter::Util::Resolution resolution} mechanism for a named
145
+ # fact. This does not distinguish between adding a new fact and adding
146
+ # a new way to resolve a fact.
147
+ #
148
+ # @overload add(name, options = {}, { || ... })
149
+ # @param name [String] the fact name
150
+ # @param options [Hash] optional parameters for the fact - attributes
151
+ # of {Facter::Util::Fact} and {Facter::Util::Resolution} can be
152
+ # supplied here
153
+ # @option options [Integer] :timeout set the
154
+ # {Facter::Util::Resolution#timeout timeout} for this resolution
155
+ # @param block [Proc] a block defining a fact resolution
156
+ #
157
+ # @return [Facter::Util::Fact] the fact object, which includes any previously
158
+ # defined resolutions
159
+ #
160
+ # @api public
161
+ def self.add(name, options = {}, &block)
162
+ collection.add(name, options, &block)
163
+ end
164
+
165
+ # Iterates over fact names and values
166
+ #
167
+ # @yieldparam [String] name the fact name
168
+ # @yieldparam [String] value the current value of the fact
169
+ #
170
+ # @return [void]
171
+ #
172
+ # @api public
173
+ def self.each
174
+ # Make sure all facts are loaded.
175
+ collection.load_all
176
+
177
+ collection.each do |*args|
178
+ yield(*args)
179
+ end
180
+ end
181
+
182
+ # Clears all cached values and removes all facts from memory.
183
+ #
184
+ # @return [void]
185
+ #
186
+ # @api public
187
+ def self.clear
188
+ Facter.flush
189
+ Facter.reset
190
+ end
191
+
192
+ # Removes all facts from memory. Use this when the fact code has
193
+ # changed on disk and needs to be reloaded.
194
+ #
195
+ # @return [void]
196
+ #
197
+ # @api public
198
+ def self.reset
199
+ @collection = nil
200
+ reset_search_path!
201
+ end
202
+
203
+ # Loads all facts.
204
+ #
205
+ # @return [void]
206
+ #
207
+ # @api public
208
+ def self.loadfacts
209
+ collection.load_all
210
+ end
211
+
212
+ # Register directories to be searched for facts. The registered directories
213
+ # must be absolute paths or they will be ignored.
214
+ #
215
+ # @param dirs [String] directories to search
216
+ #
217
+ # @return [void]
218
+ #
219
+ # @api public
220
+ def self.search(*dirs)
221
+ @search_path += dirs
222
+ end
223
+
224
+ # Returns the registered search directories.
225
+ #
226
+ # @return [Array<String>] An array of the directories searched
227
+ #
228
+ # @api public
229
+ def self.search_path
230
+ @search_path.dup
231
+ end
232
+
233
+ # Reset the Facter search directories.
234
+ #
235
+ # @api private
236
+ # @return [void]
237
+ def self.reset_search_path!
238
+ @search_path = []
239
+ end
240
+
241
+ reset_search_path!
242
+
243
+ # Registers directories to be searched for external facts.
244
+ #
245
+ # @param dirs [Array<String>] directories to search
246
+ #
247
+ # @return [void]
248
+ #
249
+ # @api public
250
+ def self.search_external(dirs)
251
+ Facter::Util::Config.external_facts_dirs += dirs
252
+ end
253
+
254
+ # Returns the registered search directories.
255
+ #
256
+ # @return [Array<String>] An array of the directories searched
257
+ #
258
+ # @api public
259
+ def self.search_external_path
260
+ Facter::Util::Config.external_facts_dirs.dup
261
+ end
262
+ end