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,146 @@
1
+ require 'facter'
2
+ require 'pathname'
3
+ require 'facter/util/directory_loader'
4
+
5
+ # Load facts on demand.
6
+ class Facter::Util::Loader
7
+
8
+ def initialize(environment_vars = ENV)
9
+ @loaded = []
10
+ @environment_vars = environment_vars
11
+ end
12
+
13
+ # Load all resolutions for a single fact.
14
+ #
15
+ # @api public
16
+ # @param name [Symbol]
17
+ def load(fact)
18
+ # Now load from the search path
19
+ shortname = fact.to_s.downcase
20
+ load_env(shortname)
21
+
22
+ filename = shortname + ".rb"
23
+
24
+ paths = search_path
25
+ unless paths.nil?
26
+ paths.each do |dir|
27
+ # Load individual files
28
+ file = File.join(dir, filename)
29
+
30
+ load_file(file) if File.file?(file)
31
+ end
32
+ end
33
+ end
34
+
35
+ # Load all facts from all directories.
36
+ #
37
+ # @api public
38
+ def load_all
39
+ return if defined?(@loaded_all)
40
+
41
+ load_env
42
+
43
+ paths = search_path
44
+ unless paths.nil?
45
+ paths.each do |dir|
46
+ # dir is already an absolute path
47
+ Dir.glob(File.join(dir, '*.rb')).each do |path|
48
+ # exclude dirs that end with .rb
49
+ load_file(path) if File.file?(path)
50
+ end
51
+ end
52
+ end
53
+
54
+ @loaded_all = true
55
+ end
56
+
57
+ # List directories to search for fact files.
58
+ #
59
+ # Search paths are gathered from the following sources:
60
+ #
61
+ # 1. $LOAD_PATH entries are expanded to absolute paths
62
+ # 2. ENV['FACTERLIB'] is split and used verbatim
63
+ # 3. Entries from Facter.search_path are used verbatim
64
+ #
65
+ # A warning will be generated for paths in Facter.search_path that are not
66
+ # absolute directories.
67
+ #
68
+ # @api public
69
+ # @return [Array<String>]
70
+ def search_path
71
+ search_paths = []
72
+ search_paths += $LOAD_PATH.map { |path| File.expand_path('facter', path) }
73
+
74
+ if @environment_vars.include?("FACTERLIB")
75
+ search_paths += @environment_vars["FACTERLIB"].split(File::PATH_SEPARATOR)
76
+ end
77
+
78
+ search_paths.delete_if { |path| ! valid_search_path?(path) }
79
+
80
+ Facter.search_path.each do |path|
81
+ if valid_search_path?(path)
82
+ search_paths << path
83
+ else
84
+ Facter.warn "Excluding #{path} from search path. Fact file paths must be an absolute directory"
85
+ end
86
+ end
87
+
88
+ search_paths.delete_if { |path| ! File.directory?(path) }
89
+
90
+ search_paths.uniq
91
+ end
92
+
93
+ private
94
+
95
+ # Validate that the given path is valid, ie it is an absolute path.
96
+ #
97
+ # @api private
98
+ # @param path [String]
99
+ # @return [Boolean]
100
+ def valid_search_path?(path)
101
+ Pathname.new(path).absolute?
102
+ end
103
+
104
+ # Load a file and record is paths to prevent duplicate loads.
105
+ #
106
+ # @api private
107
+ # @params file [String] The *absolute path* to the file to load
108
+ def load_file(file)
109
+ return if @loaded.include? file
110
+
111
+ # We have to specify Kernel.load, because we have a load method.
112
+ begin
113
+ # Store the file path so we don't try to reload it
114
+ @loaded << file
115
+ Kernel.load(file)
116
+ rescue ScriptError => detail
117
+ # Don't store the path if the file can't be loaded
118
+ # in case it's loadable later on.
119
+ @loaded.delete(file)
120
+ Facter.log_exception(detail, "Error loading fact #{file}: #{detail.message}")
121
+ end
122
+ end
123
+
124
+ # Load facts from the environment. If no name is provided,
125
+ # all will be loaded.
126
+ def load_env(fact = nil)
127
+ # Load from the environment, if possible
128
+ @environment_vars.each do |name, value|
129
+ # Skip anything that doesn't match our regex.
130
+ next unless name =~ /^facter_?(\w+)$/i
131
+ env_name = $1
132
+
133
+ # If a fact name was specified, skip anything that doesn't
134
+ # match it.
135
+ next if fact and env_name != fact
136
+
137
+ Facter.add($1) do
138
+ has_weight 1_000_000
139
+ setcode { value }
140
+ end
141
+
142
+ # Short-cut, if we are only looking for one value.
143
+ break if fact
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,43 @@
1
+ # A module to gather macaddress facts
2
+ #
3
+ module Facter::Util::Macaddress
4
+
5
+ def self.standardize(macaddress)
6
+ return nil unless macaddress
7
+ macaddress.split(":").map{|x| "0#{x}"[-2..-1]}.join(":")
8
+ end
9
+
10
+ module Darwin
11
+ def self.macaddress
12
+ iface = default_interface
13
+ Facter.warn "Could not find a default route. Using first non-loopback interface" if iface.empty?
14
+
15
+ macaddress = `#{ifconfig_command} #{iface} | /usr/bin/awk '/ether/{print $2;exit}'`.chomp
16
+ macaddress.empty? ? nil : macaddress
17
+ end
18
+
19
+ def self.default_interface
20
+ `#{netstat_command} | /usr/bin/awk '/^default/{print $6;exit}'`.chomp
21
+ end
22
+
23
+ private
24
+
25
+ def self.netstat_command
26
+ '/usr/sbin/netstat -rn'
27
+ end
28
+
29
+ def self.ifconfig_command
30
+ '/sbin/ifconfig'
31
+ end
32
+ end
33
+
34
+ module Windows
35
+ def macaddress
36
+ require 'facter/util/ip/windows'
37
+
38
+ adapter = Facter::Util::IP::Windows.get_preferred_ipv4_adapters.first
39
+ adapter ? adapter.MACAddress : nil
40
+ end
41
+ module_function :macaddress
42
+ end
43
+ end
@@ -0,0 +1,73 @@
1
+ ## macosx.rb
2
+ ## Support methods for Apple OSX facts
3
+ ##
4
+ ## Copyright (C) 2007 Jeff McCune
5
+ ## Author: Jeff McCune <jeff.mccune@northstarlabs.net>
6
+ ##
7
+
8
+ module Facter::Util::Macosx
9
+ require 'cfpropertylist'
10
+ require 'facter/util/resolution'
11
+
12
+ Plist_Xml_Doctype = '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">'
13
+
14
+ # JJM I'd really like to dynamically generate these methods
15
+ # by looking at the _name key of the _items dict for each _dataType
16
+
17
+ def self.profiler_xml(data_field)
18
+ Facter::Core::Execution.exec("/usr/sbin/system_profiler -xml #{data_field}")
19
+ end
20
+
21
+ def self.intern_xml(xml)
22
+ return nil unless xml
23
+ bad_xml_doctype = /^.*<!DOCTYPE plist PUBLIC -\/\/Apple Computer.*$/
24
+ if xml =~ bad_xml_doctype
25
+ xml.gsub!( bad_xml_doctype, Plist_Xml_Doctype )
26
+ Facter.debug("Had to fix plist with incorrect DOCTYPE declaration")
27
+ end
28
+ plist = CFPropertyList::List.new
29
+ begin
30
+ plist.load_str(xml)
31
+ rescue CFFormatError => e
32
+ raise RuntimeError, "A plist file could not be properly read by CFPropertyList: #{e.message}", e.backtrace
33
+ end
34
+ CFPropertyList.native_types(plist.value)
35
+ end
36
+
37
+ # Return an xml result, modified as we need it.
38
+ def self.profiler_data(data_field)
39
+ begin
40
+ return nil unless parsed_xml = intern_xml(profiler_xml(data_field))
41
+ return nil unless data = parsed_xml[0]['_items'][0]
42
+ data.delete '_name'
43
+ data
44
+ rescue
45
+ return nil
46
+ end
47
+ end
48
+
49
+ def self.hardware_overview
50
+ profiler_data("SPHardwareDataType")
51
+ end
52
+
53
+ def self.os_overview
54
+ profiler_data("SPSoftwareDataType")
55
+ end
56
+
57
+ def self.sw_vers
58
+ ver = Hash.new
59
+ [ "productName", "productVersion", "buildVersion" ].each do |option|
60
+ ver["macosx_#{option}"] = Facter::Core::Execution.exec("/usr/bin/sw_vers -#{option}").strip
61
+ end
62
+ productversion = ver["macosx_productVersion"]
63
+ if not productversion.nil?
64
+ versions = productversion.scan(/(\d+)\.(\d+)\.*(\d*)/)[0]
65
+ ver["macosx_productversion_major"] = "#{versions[0]}.#{versions[1]}"
66
+ if versions[2].empty? # 10.x should be treated as 10.x.0
67
+ versions[2] = "0"
68
+ end
69
+ ver["macosx_productversion_minor"] = versions[2]
70
+ end
71
+ ver
72
+ end
73
+ end
@@ -0,0 +1,104 @@
1
+ # mamufacturer.rb
2
+ # Support methods for manufacturer specific facts
3
+
4
+ module Facter::Manufacturer
5
+
6
+ def self.get_dmi_table()
7
+ case Facter.value(:kernel)
8
+ when 'Linux', 'GNU/kFreeBSD'
9
+ return nil unless FileTest.exists?("/usr/sbin/dmidecode")
10
+
11
+ output=%x{/usr/sbin/dmidecode 2>/dev/null}
12
+ when 'FreeBSD'
13
+ return nil unless FileTest.exists?("/usr/local/sbin/dmidecode")
14
+
15
+ output=%x{/usr/local/sbin/dmidecode 2>/dev/null}
16
+ when 'NetBSD', 'DragonFly'
17
+ return nil unless FileTest.exists?("/usr/pkg/sbin/dmidecode")
18
+
19
+ output=%x{/usr/pkg/sbin/dmidecode 2>/dev/null}
20
+ when 'SunOS'
21
+ return nil unless FileTest.exists?("/usr/sbin/smbios")
22
+
23
+ output=%x{/usr/sbin/smbios 2>/dev/null}
24
+ else
25
+ output=nil
26
+ end
27
+ return output
28
+ end
29
+
30
+ def self.dmi_find_system_info(name)
31
+ splitstr= Facter.value(:kernel) == 'SunOS' ? "ID SIZE TYPE" : /^Handle/
32
+ output = self.get_dmi_table()
33
+ return if output.nil?
34
+ name.each_pair do |key,v|
35
+ v.each do |v2|
36
+ v2.each_pair do |value,facterkey|
37
+ output.split(splitstr).each do |line|
38
+ if line =~ /#{key}/ and line =~ /\n\s+#{value} (.+)\n/
39
+ result = $1.strip
40
+ Facter.add(facterkey) do
41
+ confine :kernel => [ :linux, :freebsd, :netbsd, :sunos, :"gnu/kfreebsd", :dragonfly ]
42
+ setcode do
43
+ result
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.sysctl_find_system_info(name)
54
+ name.each do |sysctlkey,facterkey|
55
+ Facter.add(facterkey) do
56
+ confine :kernel => [:openbsd, :darwin]
57
+ setcode do
58
+ Facter::Core::Execution.exec("sysctl -n #{sysctlkey} 2>/dev/null")
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ def self.prtdiag_sparc_find_system_info()
65
+ # Parses prtdiag for a SPARC architecture string, won't work with Solaris x86
66
+ output = Facter::Core::Execution.exec('/usr/sbin/prtdiag 2>/dev/null')
67
+
68
+ # System Configuration: Sun Microsystems sun4u Sun SPARC Enterprise M3000 Server
69
+ if output and output =~ /^System Configuration:\s+(.+?)\s+(sun\d+\S+)\s+(.+)/
70
+ Facter.add('manufacturer') do
71
+ setcode do
72
+ $1
73
+ end
74
+ end
75
+ Facter.add('productname') do
76
+ setcode do
77
+ $3
78
+ end
79
+ end
80
+ end
81
+
82
+ Facter.add('serialnumber') do
83
+ setcode do
84
+ Facter::Core::Execution.exec("/usr/sbin/sneep")
85
+ end
86
+ end
87
+ end
88
+
89
+ def self.win32_find_system_info(name)
90
+ require 'facter/util/wmi'
91
+ value = ""
92
+ wmi = Facter::Util::WMI.connect()
93
+ name.each do |facterkey, win32key|
94
+ query = wmi.ExecQuery("select * from Win32_#{win32key.last}")
95
+ Facter.add(facterkey) do
96
+ confine :kernel => :windows
97
+ setcode do
98
+ query.each { |x| value = x.__send__( (win32key.first).to_sym) }
99
+ value
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,228 @@
1
+ ## memory.rb
2
+ ## Support module for memory related facts
3
+ ##
4
+
5
+ module Facter::Memory
6
+ def self.meminfo_number(tag)
7
+ memsize = ""
8
+ size = [0]
9
+ File.readlines("/proc/meminfo").each do |l|
10
+ size = $1.to_f if l =~ /^#{tag}:\s+(\d+)\s+\S+/
11
+ if tag == "MemFree" &&
12
+ l =~ /^(?:Buffers|Cached):\s+(\d+)\s+\S+/
13
+ size += $1.to_f
14
+ end
15
+ end
16
+ size / 1024.0
17
+ end
18
+
19
+ def self.scale_number(size, multiplier)
20
+ suffixes = ['', 'kB', 'MB', 'GB', 'TB']
21
+
22
+ s = suffixes.shift
23
+ while s != multiplier
24
+ s = suffixes.shift
25
+ end
26
+
27
+ while size > 1024.0
28
+ size /= 1024.0
29
+ s = suffixes.shift
30
+ end
31
+
32
+ "%.2f %s" % [size, s]
33
+ end
34
+
35
+ def self.vmstat_find_free_memory(args = [])
36
+ cmd = 'vmstat'
37
+ cmd += (' ' + args.join(' ')) unless args.empty?
38
+ row = Facter::Core::Execution.exec(cmd).split("\n")[-1]
39
+ if row =~ /^\s*\d+\s*\d+\s*\d+\s*\d+\s*(\d+)/
40
+ memfree = $1
41
+ end
42
+ end
43
+
44
+ # Darwin had to be different. It's generally opaque with how much RAM it is
45
+ # using, and this figure could be improved upon too I fear.
46
+ # Parses the output of "vm_stat", takes the pages free & pages speculative
47
+ # and multiples that by the page size (also given in output). Ties in with
48
+ # what activity monitor outputs for free memory.
49
+ def self.vmstat_darwin_find_free_memory()
50
+
51
+ memfree = 0
52
+ pagesize = 0
53
+ memspecfree = 0
54
+
55
+ vmstats = Facter::Core::Execution.exec('vm_stat')
56
+ vmstats.each_line do |vmline|
57
+ case
58
+ when vmline =~ /page\ssize\sof\s(\d+)\sbytes/
59
+ pagesize = $1.to_i
60
+ when vmline =~ /^Pages\sfree:\s+(\d+)\./
61
+ memfree = $1.to_i
62
+ when vmline =~ /^Pages\sspeculative:\s+(\d+)\./
63
+ memspecfree = $1.to_i
64
+ end
65
+ end
66
+
67
+ freemem = ( memfree + memspecfree ) * pagesize
68
+ end
69
+
70
+ # on AIX use svmon to get the free memory:
71
+ # it's the third value on the line starting with memory
72
+ # svmon can be run by non root users
73
+ def self.svmon_aix_find_free_memory()
74
+ Facter::Core::Execution.exec("/usr/bin/svmon -O unit=KB") =~ /^memory\s+\d+\s+\d+\s+(\d+)\s+/
75
+ $1
76
+ end
77
+
78
+ def self.mem_free(kernel = Facter.value(:kernel))
79
+ output = mem_free_info(kernel)
80
+ scale_mem_free_value output, kernel
81
+ end
82
+
83
+ def self.mem_free_info(kernel = Facter.value(:kernel))
84
+ case kernel
85
+ when /OpenBSD/i, /SunOS/i, /Dragonfly/i
86
+ vmstat_find_free_memory()
87
+ when /FreeBSD/i
88
+ vmstat_find_free_memory(["-H"])
89
+ when /Darwin/i
90
+ vmstat_darwin_find_free_memory()
91
+ when /AIX/i
92
+ svmon_aix_find_free_memory()
93
+ end
94
+ end
95
+
96
+ def self.scale_mem_free_value (value, kernel)
97
+ case kernel
98
+ when /OpenBSD/i, /FreeBSD/i, /SunOS/i, /Dragonfly/i, /AIX/i
99
+ value.to_f / 1024.0
100
+ when /Darwin/i
101
+ value.to_f / 1024.0 / 1024.0
102
+ else
103
+ value.to_f
104
+ end
105
+ end
106
+
107
+ def self.mem_size(kernel = Facter.value(:kernel))
108
+ output = mem_size_info(kernel)
109
+ scale_mem_size_value output, kernel
110
+ end
111
+
112
+ def self.mem_size_info(kernel = Facter.value(:kernel))
113
+ case kernel
114
+ when /OpenBSD/i
115
+ Facter::Core::Execution.exec("sysctl hw.physmem | cut -d'=' -f2")
116
+ when /FreeBSD/i
117
+ Facter::Core::Execution.exec("sysctl -n hw.physmem")
118
+ when /Darwin/i
119
+ Facter::Core::Execution.exec("sysctl -n hw.memsize")
120
+ when /Dragonfly/i
121
+ Facter::Core::Execution.exec("sysctl -n hw.physmem")
122
+ when /AIX/i
123
+ if Facter::Core::Execution.exec("/usr/bin/svmon -O unit=KB") =~ /^memory\s+(\d+)\s+/
124
+ $1
125
+ end
126
+ end
127
+ end
128
+
129
+ def self.scale_mem_size_value(value, kernel)
130
+ case kernel
131
+ when /OpenBSD/i, /FreeBSD/i, /Darwin/i, /Dragonfly/i
132
+ value.to_f / 1024.0 / 1024.0
133
+ when /AIX/i
134
+ value.to_f / 1024.0
135
+ else
136
+ value.to_f
137
+ end
138
+ end
139
+
140
+ def self.swap_size(kernel = Facter.value(:kernel))
141
+ output = swap_info(kernel)
142
+ parse_swap output, kernel, :size if output
143
+ end
144
+
145
+ def self.swap_free(kernel = Facter.value(:kernel))
146
+ output = swap_info(kernel)
147
+ parse_swap output, kernel, :free if output
148
+ end
149
+
150
+ def self.swap_info(kernel = Facter.value(:kernel))
151
+ case kernel
152
+ when /AIX/i
153
+ (Facter.value(:id) == "root") ? Facter::Core::Execution.exec('swap -l 2>/dev/null') : nil
154
+ when /OpenBSD/i
155
+ Facter::Core::Execution.exec('swapctl -s')
156
+ when /FreeBSD/i
157
+ Facter::Core::Execution.exec('swapinfo -k')
158
+ when /Darwin/i
159
+ Facter::Core::Execution.exec('sysctl vm.swapusage')
160
+ when /SunOS/i
161
+ Facter::Core::Execution.exec('/usr/sbin/swap -l 2>/dev/null')
162
+ end
163
+ end
164
+
165
+ def self.parse_swap (output, kernel = Facter.value(:kernel), size_or_free = :size)
166
+ value_in_mb = 0.0
167
+ value = 0
168
+ is_size = size_or_free == :size
169
+ unless output.nil?
170
+ output.each_line do |line|
171
+ value += parse_swap_line(line, kernel, is_size)
172
+ end
173
+ end
174
+ value_in_mb = scale_swap_value(value, kernel)
175
+ end
176
+
177
+ # There is a lot of duplication here because of concern over being able to add
178
+ # new platforms in a reasonable manner. For all of these platforms the first
179
+ # regex corresponds to the swap size value and the second corresponds to the swap
180
+ # free value, but this may not always be the case. In Ruby 1.9.3 it is possible
181
+ # to give these names, but sadly 1.8.7 does not support this.
182
+
183
+ def self.parse_swap_line(line, kernel, is_size)
184
+ case kernel
185
+ when /AIX/i
186
+ if line =~ /^\/\S+\s.*\s+(\S+)MB\s+(\S+)MB/
187
+ (is_size) ? $1.to_i : $2.to_i
188
+ else
189
+ 0
190
+ end
191
+ when /OpenBSD/i
192
+ if line =~ /^total: (\d+)k bytes allocated = \d+k used, (\d+)k available$/
193
+ (is_size) ? $1.to_i : $2.to_i
194
+ else
195
+ 0
196
+ end
197
+ when /FreeBSD/i
198
+ if line =~ /\S+\s+(\d+)\s+\d+\s+(\d+)\s+\d+%$/
199
+ (is_size) ? $1.to_i : $2.to_i
200
+ else
201
+ 0
202
+ end
203
+ when /Darwin/i
204
+ if line =~ /total\s=\s(\S+)M\s+used\s=\s\S+M\s+free\s=\s(\S+)M\s/
205
+ (is_size) ? $1.to_i : $2.to_i
206
+ else
207
+ 0
208
+ end
209
+ when /SunOS/i
210
+ if line =~ /^\/\S+\s.*\s+(\d+)\s+(\d+)$/
211
+ (is_size) ? $1.to_i : $2.to_i
212
+ else
213
+ 0
214
+ end
215
+ end
216
+ end
217
+
218
+ def self.scale_swap_value(value, kernel)
219
+ case kernel
220
+ when /OpenBSD/i, /FreeBSD/i
221
+ value.to_f / 1024.0
222
+ when /SunOS/i
223
+ value.to_f / 2 / 1024.0
224
+ else
225
+ value.to_f
226
+ end
227
+ end
228
+ end