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,83 @@
1
+ # A Facter plugin that loads external facts.
2
+ #
3
+ # Default Unix Directories:
4
+ # /etc/facter/facts.d", "/etc/puppetlabs/facter/facts.d"
5
+ #
6
+ # Default Windows Direcotires:
7
+ # C:\ProgramData\Puppetlabs\facter\facts.d (2008)
8
+ # C:\Documents and Settings\All Users\Application Data\Puppetlabs\facter\facts.d (2003)
9
+ #
10
+ # Can also load from command-line specified directory
11
+ #
12
+ # Facts can be in the form of JSON, YAML or Text files
13
+ # and any executable that returns key=value pairs.
14
+
15
+ require 'facter'
16
+ require 'facter/util/config'
17
+ require 'facter/util/composite_loader'
18
+ require 'facter/util/parser'
19
+ require 'yaml'
20
+
21
+ class Facter::Util::DirectoryLoader
22
+
23
+ class NoSuchDirectoryError < Exception
24
+ end
25
+
26
+ # This value makes it highly likely that external facts will take
27
+ # precedence over all other facts
28
+ EXTERNAL_FACT_WEIGHT = 10000
29
+
30
+ # Directory for fact loading
31
+ attr_reader :directory
32
+
33
+ def initialize(dir)
34
+ @directory = dir
35
+ end
36
+
37
+ def self.loader_for(dir)
38
+ if File.directory?(dir)
39
+ Facter::Util::DirectoryLoader.new(dir)
40
+ else
41
+ raise NoSuchDirectoryError
42
+ end
43
+ end
44
+
45
+ def self.default_loader
46
+ loaders = Facter::Util::Config.external_facts_dirs.collect do |dir|
47
+ Facter::Util::DirectoryLoader.new(dir)
48
+ end
49
+ Facter::Util::CompositeLoader.new(loaders)
50
+ end
51
+
52
+ # Load facts from files in fact directory using the relevant parser classes to
53
+ # parse them.
54
+ def load(collection)
55
+ entries.each do |file|
56
+ parser = Facter::Util::Parser.parser_for(file)
57
+ if parser == nil
58
+ next
59
+ end
60
+
61
+ data = parser.results
62
+ if data == false
63
+ Facter.warn "Could not interpret fact file #{file}"
64
+ elsif data == {} or data == nil
65
+ Facter.warn "Fact file #{file} was parsed but returned an empty data set"
66
+ else
67
+ data.each { |p,v| collection.add(p, :value => v) { has_weight(EXTERNAL_FACT_WEIGHT) } }
68
+ end
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def entries
75
+ Dir.entries(directory).find_all { |f| should_parse?(f) }.sort.map { |f| File.join(directory, f) }
76
+ rescue Errno::ENOENT => detail
77
+ []
78
+ end
79
+
80
+ def should_parse?(file)
81
+ not file =~ /^\./
82
+ end
83
+ end
@@ -0,0 +1,101 @@
1
+ require 'timeout'
2
+ require 'open-uri'
3
+
4
+ # Provide a set of utility static methods that help with resolving the EC2
5
+ # fact.
6
+ module Facter::Util::EC2
7
+ class << self
8
+ # Test if we can connect to the EC2 api. Return true if able to connect.
9
+ # On failure this function fails silently and returns false.
10
+ #
11
+ # The +wait_sec+ parameter provides you with an adjustable timeout.
12
+ #
13
+ def can_connect?(wait_sec=2)
14
+ url = "http://169.254.169.254:80/"
15
+ Timeout::timeout(wait_sec) {open(url)}
16
+ return true
17
+ rescue Timeout::Error
18
+ return false
19
+ rescue
20
+ return false
21
+ end
22
+
23
+ # Test if this host has a mac address used by Eucalyptus clouds, which
24
+ # normally is +d0:0d+.
25
+ def has_euca_mac?
26
+ !!(Facter.value(:macaddress) =~ %r{^[dD]0:0[dD]:})
27
+ end
28
+
29
+ # Test if this host has a mac address used by OpenStack, which
30
+ # normally starts with FA:16:3E (older versions of OpenStack
31
+ # may generate mac addresses starting with 02:16:3E)
32
+ def has_openstack_mac?
33
+ !!(Facter.value(:macaddress) =~ %r{^(02|[fF][aA]):16:3[eE]})
34
+ end
35
+
36
+ # Test if the host has an arp entry in its cache that matches the EC2 arp,
37
+ # which is normally +fe:ff:ff:ff:ff:ff+.
38
+ def has_ec2_arp?
39
+ kernel = Facter.value(:kernel)
40
+
41
+ mac_address_re = case kernel
42
+ when /Windows/i
43
+ /fe-ff-ff-ff-ff-ff/i
44
+ else
45
+ /fe:ff:ff:ff:ff:ff/i
46
+ end
47
+
48
+ arp_command = case kernel
49
+ when /Windows/i, /SunOS/i
50
+ "arp -a"
51
+ else
52
+ "arp -an"
53
+ end
54
+
55
+ if arp_table = Facter::Core::Execution.exec(arp_command)
56
+ return true if arp_table.match(mac_address_re)
57
+ end
58
+ return false
59
+ end
60
+ end
61
+
62
+ ##
63
+ # userdata returns a single string containing the body of the response of the
64
+ # GET request for the URI http://169.254.169.254/latest/user-data/ If the
65
+ # metadata server responds with a 404 Not Found error code then this method
66
+ # retuns `nil`.
67
+ #
68
+ # @param version [String] containing the API version for the request.
69
+ # Defaults to "latest" and other examples are documented at
70
+ # http://aws.amazon.com/archives/Amazon%20EC2
71
+ #
72
+ # @api public
73
+ #
74
+ # @return [String] containing the response body or `nil`
75
+ def self.userdata(version="latest")
76
+ uri = "http://169.254.169.254/#{version}/user-data/"
77
+ begin
78
+ read_uri(uri)
79
+ rescue OpenURI::HTTPError => detail
80
+ case detail.message
81
+ when /404 Not Found/i
82
+ Facter.debug "No user-data present at #{uri}: server responded with #{detail.message}"
83
+ return nil
84
+ else
85
+ raise detail
86
+ end
87
+ end
88
+ end
89
+
90
+ ##
91
+ # read_uri provides a seam method to easily test the HTTP client
92
+ # functionality of a HTTP based metadata server.
93
+ #
94
+ # @api private
95
+ #
96
+ # @return [String] containing the body of the response
97
+ def self.read_uri(uri)
98
+ open(uri).read
99
+ end
100
+ private_class_method :read_uri
101
+ end
@@ -0,0 +1,204 @@
1
+ require 'facter'
2
+ require 'facter/util/resolution'
3
+ require 'facter/core/aggregate'
4
+
5
+ # This class represents a fact. Each fact has a name and multiple
6
+ # {Facter::Util::Resolution resolutions}.
7
+ #
8
+ # Create facts using {Facter.add}
9
+ #
10
+ # @api public
11
+ class Facter::Util::Fact
12
+ # The name of the fact
13
+ # @return [String]
14
+ attr_accessor :name
15
+
16
+ # @return [String]
17
+ # @deprecated
18
+ attr_accessor :ldapname
19
+
20
+ # Creates a new fact, with no resolution mechanisms. See {Facter.add}
21
+ # for the public API for creating facts.
22
+ # @param name [String] the fact name
23
+ # @param options [Hash] optional parameters
24
+ # @option options [String] :ldapname set the ldapname property on the fact
25
+ #
26
+ # @api private
27
+ def initialize(name, options = {})
28
+ @name = name.to_s.downcase.intern
29
+
30
+ extract_ldapname_option!(options)
31
+
32
+ @ldapname ||= @name.to_s
33
+
34
+ @resolves = []
35
+ @searching = false
36
+
37
+ @value = nil
38
+ end
39
+
40
+ # Adds a new {Facter::Util::Resolution resolution}. This requires a
41
+ # block, which will then be evaluated in the context of the new
42
+ # resolution.
43
+ #
44
+ # @param options [Hash] A hash of options to set on the resolution
45
+ #
46
+ # @return [Facter::Util::Resolution]
47
+ #
48
+ # @api private
49
+ def add(options = {}, &block)
50
+ define_resolution(nil, options, &block)
51
+ end
52
+
53
+ # Define a new named resolution or return an existing resolution with
54
+ # the given name.
55
+ #
56
+ # @param resolution_name [String] The name of the resolve to define or look up
57
+ # @param options [Hash] A hash of options to set on the resolution
58
+ # @return [Facter::Util::Resolution]
59
+ #
60
+ # @api public
61
+ def define_resolution(resolution_name, options = {}, &block)
62
+
63
+ resolution_type = options.delete(:type) || :simple
64
+
65
+ resolve = create_or_return_resolution(resolution_name, resolution_type)
66
+
67
+ resolve.set_options(options) unless options.empty?
68
+ resolve.evaluate(&block) if block
69
+
70
+ resolve
71
+ rescue => e
72
+ Facter.log_exception(e, "Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.message}")
73
+ end
74
+
75
+ # Retrieve an existing resolution by name
76
+ #
77
+ # @param name [String]
78
+ #
79
+ # @return [Facter::Util::Resolution, nil] The resolution if exists, nil if
80
+ # it doesn't exist or name is nil
81
+ def resolution(name)
82
+ return nil if name.nil?
83
+
84
+ @resolves.find { |resolve| resolve.name == name }
85
+ end
86
+
87
+ # Flushes any cached values.
88
+ #
89
+ # @return [void]
90
+ #
91
+ # @api private
92
+ def flush
93
+ @resolves.each { |r| r.flush }
94
+ @value = nil
95
+ end
96
+
97
+ # Returns the value for this fact. This searches all resolutions by
98
+ # suitability and weight (see {Facter::Util::Resolution}). If no
99
+ # suitable resolution is found, it returns nil.
100
+ #
101
+ # @api public
102
+ def value
103
+ return @value if @value
104
+
105
+ if @resolves.empty?
106
+ Facter.debug "No resolves for %s" % @name
107
+ return nil
108
+ end
109
+
110
+ searching do
111
+
112
+ suitable_resolutions = sort_by_weight(find_suitable_resolutions(@resolves))
113
+ @value = find_first_real_value(suitable_resolutions)
114
+
115
+ announce_when_no_suitable_resolution(suitable_resolutions)
116
+ announce_when_no_value_found(@value)
117
+
118
+ @value
119
+ end
120
+ end
121
+
122
+ # @api private
123
+ # @deprecated
124
+ def extract_ldapname_option!(options)
125
+ if options[:ldapname]
126
+ Facter.warnonce("ldapname is deprecated and will be removed in a future version")
127
+ self.ldapname = options.delete(:ldapname)
128
+ end
129
+ end
130
+
131
+ private
132
+
133
+ # Are we in the midst of a search?
134
+ def searching?
135
+ @searching
136
+ end
137
+
138
+ # Lock our searching process, so we never ge stuck in recursion.
139
+ def searching
140
+ raise RuntimeError, "Caught recursion on #{@name}" if searching?
141
+
142
+ # If we've gotten this far, we're not already searching, so go ahead and do so.
143
+ @searching = true
144
+ begin
145
+ yield
146
+ ensure
147
+ @searching = false
148
+ end
149
+ end
150
+
151
+ def find_suitable_resolutions(resolutions)
152
+ resolutions.find_all{ |resolve| resolve.suitable? }
153
+ end
154
+
155
+ def sort_by_weight(resolutions)
156
+ resolutions.sort { |a, b| b.weight <=> a.weight }
157
+ end
158
+
159
+ def find_first_real_value(resolutions)
160
+ resolutions.each do |resolve|
161
+ value = resolve.value
162
+ if not value.nil?
163
+ return value
164
+ end
165
+ end
166
+ nil
167
+ end
168
+
169
+ def announce_when_no_suitable_resolution(resolutions)
170
+ if resolutions.empty?
171
+ Facter.debug "Found no suitable resolves of %s for %s" % [@resolves.length, @name]
172
+ end
173
+ end
174
+
175
+ def announce_when_no_value_found(value)
176
+ if value.nil?
177
+ Facter.debug("value for %s is still nil" % @name)
178
+ end
179
+ end
180
+
181
+ def create_or_return_resolution(resolution_name, resolution_type)
182
+ resolve = self.resolution(resolution_name)
183
+
184
+ if resolve
185
+ if resolution_type != resolve.resolution_type
186
+ raise ArgumentError, "Cannot return resolution #{resolution_name} with type" +
187
+ " #{resolution_type}; already defined as #{resolve.resolution_type}"
188
+ end
189
+ else
190
+ case resolution_type
191
+ when :simple
192
+ resolve = Facter::Util::Resolution.new(resolution_name, self)
193
+ when :aggregate
194
+ resolve = Facter::Core::Aggregate.new(resolution_name, self)
195
+ else
196
+ raise ArgumentError, "Expected resolution type to be one of (:simple, :aggregate) but was #{resolution_type}"
197
+ end
198
+
199
+ @resolves << resolve
200
+ end
201
+
202
+ resolve
203
+ end
204
+ end
@@ -0,0 +1,37 @@
1
+ module Facter
2
+ module Util
3
+
4
+ # {Facter::Util::FileRead} is a utility module intended to provide easily
5
+ # mockable methods that delegate to simple file read methods. The intent is to
6
+ # avoid the need to execute the `cat` system command or `File.read` directly in
7
+ # Ruby, as mocking these behaviors can have wide-ranging effects.
8
+ #
9
+ # All Facter facts are encouraged to use this method instead of File.read or
10
+ # Facter::Core::Execution.exec('cat ...')
11
+ #
12
+ # @api public
13
+ module FileRead
14
+ # read returns the raw content of a file as a string. If the file does not
15
+ # exist, or the process does not have permission to read the file then nil is
16
+ # returned.
17
+ #
18
+ # @api public
19
+ #
20
+ # @param path [String] the path to be read
21
+ #
22
+ # @return [String, nil] the raw contents of the file or `nil` if the
23
+ # file cannot be read because it does not exist or the process does not have
24
+ # permission to read the file.
25
+ def self.read(path)
26
+ File.read(path)
27
+ rescue Errno::ENOENT, Errno::EACCES => detail
28
+ Facter.debug "Could not read #{path}: #{detail.message}"
29
+ nil
30
+ end
31
+
32
+ def self.read_binary(path)
33
+ File.open(path, "rb") { |contents| contents.read }
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,38 @@
1
+ require 'yaml'
2
+
3
+ module Facter
4
+ module Util
5
+ module Formatter
6
+
7
+ def self.format_json(hash)
8
+ if Facter.json?
9
+ JSON.pretty_generate(hash)
10
+ else
11
+ raise "Cannot format facts as JSON; 'json' library is not present"
12
+ end
13
+ end
14
+
15
+ def self.format_yaml(hash)
16
+ YAML.dump(hash)
17
+ end
18
+
19
+ def self.format_plaintext(hash)
20
+ output = ''
21
+
22
+ # Print the value of a single fact, otherwise print a list sorted by fact
23
+ # name and separated by "=>"
24
+ if hash.length == 1
25
+ if value = hash.values.first
26
+ output = value
27
+ end
28
+ else
29
+ hash.sort_by { |(name, value)| name }.each do |name,value|
30
+ output << "#{name} => #{value}\n"
31
+ end
32
+ end
33
+
34
+ output
35
+ end
36
+ end
37
+ end
38
+ end