facter 2.0.1.rc1-x86-mingw32

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 +758 -0
@@ -0,0 +1,151 @@
1
+ require 'facter/util/file_read'
2
+
3
+ module Facter::Util::Virtual
4
+ ##
5
+ # virt_what is a delegating helper method intended to make it easier to stub
6
+ # the system call without affecting other calls to
7
+ # Facter::Core::Execution.exec
8
+ #
9
+ # Per https://bugzilla.redhat.com/show_bug.cgi?id=719611 when run as a
10
+ # non-root user the virt-what command may emit an error message on stdout,
11
+ # and later versions of virt-what may emit this message on stderr. This
12
+ # method ensures stderr is redirected and that error messages are stripped
13
+ # from stdout.
14
+ def self.virt_what(command = "virt-what")
15
+ command = Facter::Core::Execution.which(command)
16
+ return unless command
17
+
18
+ if Facter.value(:kernel) == 'windows'
19
+ redirected_cmd = "#{command} 2>NUL"
20
+ else
21
+ redirected_cmd = "#{command} 2>/dev/null"
22
+ end
23
+ output = Facter::Core::Execution.exec redirected_cmd
24
+ output.gsub(/^virt-what: .*$/, '') if output
25
+ end
26
+
27
+ ##
28
+ # lspci is a delegating helper method intended to make it easier to stub the
29
+ # system call without affecting other calls to Facter::Core::Execution.exec
30
+ def self.lspci(command = "lspci 2>/dev/null")
31
+ Facter::Core::Execution.exec command
32
+ end
33
+
34
+ def self.openvz?
35
+ FileTest.directory?("/proc/vz") and not self.openvz_cloudlinux?
36
+ end
37
+
38
+ # So one can either have #6728 work on OpenVZ or Cloudlinux. Whoo.
39
+ def self.openvz_type
40
+ return false unless self.openvz?
41
+ return false unless FileTest.exists?( '/proc/self/status' )
42
+
43
+ envid = Facter::Core::Execution.exec( 'grep "envID" /proc/self/status' )
44
+ if envid =~ /^envID:\s+0$/i
45
+ return 'openvzhn'
46
+ elsif envid =~ /^envID:\s+(\d+)$/i
47
+ return 'openvzve'
48
+ end
49
+ end
50
+
51
+ # Cloudlinux uses OpenVZ to a degree, but always has an empty /proc/vz/ and
52
+ # has /proc/lve/list present
53
+ def self.openvz_cloudlinux?
54
+ FileTest.file?("/proc/lve/list") or Dir.glob('/proc/vz/*').empty?
55
+ end
56
+
57
+ def self.zone?
58
+ return true if FileTest.directory?("/.SUNWnative")
59
+ z = Facter::Core::Execution.exec("/sbin/zonename")
60
+ return false unless z
61
+ return z.chomp != 'global'
62
+ end
63
+
64
+ def self.vserver?
65
+ return false unless FileTest.exists?("/proc/self/status")
66
+ txt = File.open("/proc/self/status", "rb").read
67
+ if txt.respond_to?(:encode!)
68
+ txt.encode!('UTF-16', 'UTF-8', :invalid => :replace)
69
+ txt.encode!('UTF-8', 'UTF-16')
70
+ end
71
+ return true if txt =~ /^(s_context|VxID):[[:blank:]]*[0-9]/
72
+ return false
73
+ end
74
+
75
+ def self.vserver_type
76
+ if self.vserver?
77
+ if FileTest.exists?("/proc/virtual")
78
+ "vserver_host"
79
+ else
80
+ "vserver"
81
+ end
82
+ end
83
+ end
84
+
85
+ def self.xen?
86
+ ["/proc/sys/xen", "/sys/bus/xen", "/proc/xen" ].detect do |f|
87
+ FileTest.exists?(f)
88
+ end
89
+ end
90
+
91
+ def self.kvm?
92
+ txt = if FileTest.exists?("/proc/cpuinfo")
93
+ File.read("/proc/cpuinfo")
94
+ elsif ["FreeBSD", "OpenBSD"].include? Facter.value(:kernel)
95
+ Facter::Core::Execution.exec("/sbin/sysctl -n hw.model")
96
+ end
97
+ (txt =~ /QEMU Virtual CPU/) ? true : false
98
+ end
99
+
100
+ def self.virtualbox?
101
+ File.read("/sys/devices/virtual/dmi/id/product_name") =~ /VirtualBox/ rescue false
102
+ end
103
+
104
+ def self.kvm_type
105
+ # TODO Tell the difference between kvm and qemu
106
+ # Can't work out a way to do this at the moment that doesn't
107
+ # require a special binary
108
+ if self.kvm?
109
+ "kvm"
110
+ end
111
+ end
112
+
113
+ def self.rhev?
114
+ File.read("/sys/devices/virtual/dmi/id/product_name") =~ /RHEV Hypervisor/ rescue false
115
+ end
116
+
117
+ def self.ovirt?
118
+ File.read("/sys/devices/virtual/dmi/id/product_name") =~ /oVirt Node/ rescue false
119
+ end
120
+
121
+ def self.jail?
122
+ path = case Facter.value(:kernel)
123
+ when "FreeBSD" then "/sbin"
124
+ when "GNU/kFreeBSD" then "/bin"
125
+ end
126
+ Facter::Core::Execution.exec("#{path}/sysctl -n security.jail.jailed") == "1"
127
+ end
128
+
129
+ def self.hpvm?
130
+ Facter::Core::Execution.exec("/usr/bin/getconf MACHINE_MODEL").chomp =~ /Virtual Machine/
131
+ end
132
+
133
+ def self.zlinux?
134
+ "zlinux"
135
+ end
136
+
137
+ ##
138
+ # read_sysfs Reads the raw data as per the documentation at [Detecting if You
139
+ # Are Running in Google Compute
140
+ # Engine](https://developers.google.com/compute/docs/instances#dmi) This
141
+ # method is intended to provide an easy seam to mock.
142
+ #
143
+ # @api public
144
+ #
145
+ # @return [String] or nil if the path does not exist
146
+ def self.read_sysfs_dmi_entries(path="/sys/firmware/dmi/entries/1-0/raw")
147
+ if File.exists?(path)
148
+ Facter::Util::FileRead.read_binary(path)
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,24 @@
1
+ # A module to gather vlan facts
2
+ #
3
+ module Facter::Util::Vlans
4
+ def self.get_vlan_config
5
+ output = ""
6
+ if File.exists?('/proc/net/vlan/config') and File.readable?('/proc/net/vlan/config')
7
+ output = File.open('/proc/net/vlan/config').read
8
+ end
9
+ output
10
+ end
11
+
12
+ def self.get_vlans
13
+ vlans = Array.new
14
+ if self.get_vlan_config
15
+ self.get_vlan_config.each_line do |line|
16
+ if line =~ /^([0-9A-Za-z]+)\.([0-9]+) /
17
+ vlans.insert(-1, $~[2]) if $~[2]
18
+ end
19
+ end
20
+ end
21
+
22
+ vlans.join(',')
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ require 'windows/system_info'
2
+ require 'windows/security'
3
+ require 'sys/admin'
4
+
5
+ module Facter::Util::Root
6
+ extend ::Windows::SystemInfo
7
+ extend ::Windows::Security
8
+
9
+ def self.root?
10
+ # if Vista or later, check for unrestricted process token
11
+ return Win32::Security.elevated_security? unless windows_version < 6.0
12
+
13
+ # otherwise 2003 or less
14
+ check_token_membership
15
+ end
16
+
17
+ def self.check_token_membership
18
+ sid = 0.chr * 80
19
+ size = [80].pack('L')
20
+ member = 0.chr * 4
21
+
22
+ unless CreateWellKnownSid(Windows::Security::WinBuiltinAdministratorsSid, nil, sid, size)
23
+ raise "Failed to create administrators SID"
24
+ end
25
+
26
+ unless IsValidSid(sid)
27
+ raise "Invalid SID"
28
+ end
29
+
30
+ unless CheckTokenMembership(nil, sid, member)
31
+ raise "Failed to check membership"
32
+ end
33
+
34
+ # Is administrators SID enabled in calling thread's access token?
35
+ member.unpack('L')[0] == 1
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ module Facter::Util::WMI
2
+ class << self
3
+ def connect(uri = wmi_resource_uri)
4
+ require 'win32ole'
5
+ WIN32OLE.connect(uri)
6
+ end
7
+
8
+ def wmi_resource_uri( host = '.' )
9
+ "winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2"
10
+ end
11
+
12
+ def execquery(query)
13
+ connect().execquery(query)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ # A module to gather running Xen Domains
2
+ #
3
+ module Facter::Util::Xendomains
4
+ def self.get_domains
5
+ if xm_list = Facter::Core::Execution.exec('/usr/sbin/xm list 2>/dev/null')
6
+ domains = xm_list.split("\n").reject { |line| line =~ /^(Name|Domain-0)/ }
7
+ domains.map { |line| line.split(/\s/)[0] }.join(',')
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,86 @@
1
+ module Facter
2
+ if not defined? FACTERVERSION then
3
+ FACTERVERSION = '2.0.1-rc1'
4
+ end
5
+
6
+ # Returns the running version of Facter.
7
+ #
8
+ # @comment The intent is that software external to Facter be able to
9
+ # determine the Facter version with no side-effects. The expected
10
+ # use is:
11
+ #
12
+ # require 'facter/version'
13
+ # version = Facter.version
14
+ #
15
+ # This function has the following ordering precedence. This precedence list
16
+ # is designed to facilitate automated packaging tasks by simply writing to
17
+ # the VERSION file in the same directory as this source file.
18
+ #
19
+ # 1. If a version has been explicitly assigned using the Facter.version=
20
+ # method, return that version.
21
+ # 2. If there is a VERSION file, read the contents, trim any
22
+ # trailing whitespace, and return that version string.
23
+ # 3. Return the value of the Facter::FACTERVERSION constant hard-coded into
24
+ # the source code.
25
+ #
26
+ # If there is no VERSION file, the method must return the version string of
27
+ # the nearest parent version that is an officially released version. That is
28
+ # to say, if a branch named 3.1.x contains 25 patches on top of the most
29
+ # recent official release of 3.1.1, then the version method must return the
30
+ # string "3.1.1" if no "VERSION" file is present.
31
+ #
32
+ # By design the version identifier is _not_ intended to vary during the life of
33
+ # a process. There is no guarantee provided that writing to the VERSION file
34
+ # while a Puppet process is running will cause the version string to be
35
+ # updated. On the contrary, the contents of the VERSION are cached to reduce
36
+ # filesystem accesses.
37
+ #
38
+ # The VERSION file is intended to be used by package maintainers who may be
39
+ # applying patches or otherwise changing the software version in a manner
40
+ # that warrants a different software version identifier. The VERSION file is
41
+ # intended to be managed and owned by the release process and packaging
42
+ # related tasks, and as such should not reside in version control. The
43
+ # FACTERVERSION constant is intended to be version controlled in history.
44
+ #
45
+ # Ideally, this behavior will allow package maintainers to precisely specify
46
+ # the version of the software they're packaging as in the following example:
47
+ #
48
+ # $ git describe > lib/facter/VERSION
49
+ # $ ruby -r facter -e 'puts Facter.version'
50
+ # 1.6.14-6-g66f2c99
51
+ #
52
+ # @api public
53
+ #
54
+ # @return [String] containing the facter version, e.g. "1.6.14"
55
+ def self.version
56
+ version_file = File.join(File.dirname(__FILE__), 'VERSION')
57
+ return @facter_version if @facter_version
58
+ if version = read_version_file(version_file)
59
+ @facter_version = version
60
+ end
61
+ @facter_version ||= FACTERVERSION
62
+ end
63
+
64
+ # Sets the Facter version
65
+ #
66
+ # @return [void]
67
+ #
68
+ # @api private
69
+ def self.version=(version)
70
+ @facter_version = version
71
+ end
72
+
73
+ # This reads the content of the "VERSION" file that lives in the
74
+ # same directory as this source code file.
75
+ #
76
+ # @api private
77
+ #
78
+ # @return [String] the version -- for example: "1.6.14-6-gea42046" or nil if the VERSION
79
+ # file does not exist.
80
+ def self.read_version_file(path)
81
+ if File.exists?(path)
82
+ File.read(path).chomp
83
+ end
84
+ end
85
+ private_class_method :read_version_file
86
+ end
@@ -0,0 +1,262 @@
1
+ # Fact: virtual
2
+ #
3
+ # Purpose: Determine if the system's hardware is real or virtualised.
4
+ #
5
+ # Resolution:
6
+ # Assumes physical unless proven otherwise.
7
+ #
8
+ # On Darwin, use the macosx util module to acquire the SPDisplaysDataType,
9
+ # from that parse it to see if it's VMWare or Parallels pretending to be the
10
+ # display.
11
+ #
12
+ # On Linux, BSD, Solaris and HPUX:
13
+ # Much of the logic here is obscured behind util/virtual.rb, which rather
14
+ # than document here, which would encourage drift, just refer to it.
15
+ # The Xen tests in here rely on /sys and /proc, and check for the presence and
16
+ # contents of files in there.
17
+ # If after all the other tests, it's still seen as physical, then it tries to
18
+ # parse the output of the "lspci", "dmidecode" and "prtdiag" and parses them
19
+ # for obvious signs of being under VMWare, Parallels or VirtualBox.
20
+ # Finally it checks for the existence of vmware-vmx, which would hint it's
21
+ # VMWare.
22
+ #
23
+ # Caveats:
24
+ # Many checks rely purely on existence of files.
25
+ #
26
+
27
+ require 'facter/util/virtual'
28
+
29
+ Facter.add("virtual") do
30
+ confine :kernel => "Darwin"
31
+
32
+ setcode do
33
+ require 'facter/util/macosx'
34
+ result = "physical"
35
+ output = Facter::Util::Macosx.profiler_data("SPDisplaysDataType")
36
+ if output.is_a?(Hash)
37
+ result = "parallels" if output["spdisplays_vendor-id"] =~ /0x1ab8/
38
+ result = "parallels" if output["spdisplays_vendor"] =~ /[Pp]arallels/
39
+ result = "vmware" if output["spdisplays_vendor-id"] =~ /0x15ad/
40
+ result = "vmware" if output["spdisplays_vendor"] =~ /VM[wW]are/
41
+ result = "virtualbox" if output["spdisplays_vendor-id"] =~ /0x80ee/
42
+ end
43
+ result
44
+ end
45
+ end
46
+
47
+ Facter.add("virtual") do
48
+ confine :kernel => ["FreeBSD", "GNU/kFreeBSD"]
49
+ has_weight 10
50
+ setcode do
51
+ "jail" if Facter::Util::Virtual.jail?
52
+ end
53
+ end
54
+
55
+ Facter.add("virtual") do
56
+ confine :kernel => 'SunOS'
57
+ has_weight 10
58
+ self.timeout = 6
59
+
60
+ setcode do
61
+ next "zone" if Facter::Util::Virtual.zone?
62
+
63
+ output = Facter::Core::Execution.exec('prtdiag')
64
+ if output
65
+ lines = output.split("\n")
66
+ next "parallels" if lines.any? {|l| l =~ /Parallels/ }
67
+ next "vmware" if lines.any? {|l| l =~ /VM[wW]are/ }
68
+ next "virtualbox" if lines.any? {|l| l =~ /VirtualBox/ }
69
+ next "xenhvm" if lines.any? {|l| l =~ /HVM domU/ }
70
+ end
71
+ end
72
+ end
73
+
74
+ Facter.add("virtual") do
75
+ confine :kernel => 'HP-UX'
76
+ has_weight 10
77
+ setcode do
78
+ "hpvm" if Facter::Util::Virtual.hpvm?
79
+ end
80
+ end
81
+
82
+ Facter.add("virtual") do
83
+ confine :architecture => 's390x'
84
+ has_weight 10
85
+ setcode do
86
+ "zlinux" if Facter::Util::Virtual.zlinux?
87
+ end
88
+ end
89
+
90
+ Facter.add("virtual") do
91
+ confine :kernel => 'OpenBSD'
92
+ has_weight 10
93
+ setcode do
94
+ output = Facter::Core::Execution.exec('sysctl -n hw.product 2>/dev/null')
95
+ if output
96
+ lines = output.split("\n")
97
+ next "parallels" if lines.any? {|l| l =~ /Parallels/ }
98
+ next "vmware" if lines.any? {|l| l =~ /VMware/ }
99
+ next "virtualbox" if lines.any? {|l| l =~ /VirtualBox/ }
100
+ next "xenhvm" if lines.any? {|l| l =~ /HVM domU/ }
101
+ end
102
+ end
103
+ end
104
+
105
+ Facter.add("virtual") do
106
+ confine :kernel => %w{Linux FreeBSD OpenBSD SunOS HP-UX GNU/kFreeBSD}
107
+
108
+ setcode do
109
+ next Facter::Util::Virtual.openvz_type if Facter::Util::Virtual.openvz?
110
+ next Facter::Util::Virtual.vserver_type if Facter::Util::Virtual.vserver?
111
+
112
+ if Facter::Util::Virtual.xen?
113
+ next "xen0" if FileTest.exists?("/dev/xen/evtchn")
114
+ next "xenu" if FileTest.exists?("/proc/xen")
115
+ end
116
+
117
+ next "virtualbox" if Facter::Util::Virtual.virtualbox?
118
+ next Facter::Util::Virtual.kvm_type if Facter::Util::Virtual.kvm?
119
+ next "rhev" if Facter::Util::Virtual.rhev?
120
+ next "ovirt" if Facter::Util::Virtual.ovirt?
121
+
122
+ # Parse lspci
123
+ output = Facter::Util::Virtual.lspci
124
+ if output
125
+ lines = output.split("\n")
126
+ next "vmware" if lines.any? {|l| l =~ /VM[wW]are/ }
127
+ next "virtualbox" if lines.any? {|l| l =~ /VirtualBox/ }
128
+ next "parallels" if lines.any? {|l| l =~ /1ab8:|[Pp]arallels/ }
129
+ next "xenhvm" if lines.any? {|l| l =~ /XenSource/ }
130
+ next "hyperv" if lines.any? {|l| l =~ /Microsoft Corporation Hyper-V/ }
131
+ next "gce" if lines.any? {|l| l =~ /Class 8007: Google, Inc/ }
132
+ end
133
+
134
+ # Parse dmidecode
135
+ output = Facter::Core::Execution.exec('dmidecode 2> /dev/null')
136
+ if output
137
+ lines = output.split("\n")
138
+ next "parallels" if lines.any? {|l| l =~ /Parallels/ }
139
+ next "vmware" if lines.any? {|l| l =~ /VMware/ }
140
+ next "virtualbox" if lines.any? {|l| l =~ /VirtualBox/ }
141
+ next "xenhvm" if lines.any? {|l| l =~ /HVM domU/ }
142
+ next "hyperv" if lines.any? {|l| l =~ /Product Name: Virtual Machine/ }
143
+ next "rhev" if lines.any? {|l| l =~ /Product Name: RHEV Hypervisor/ }
144
+ next "ovirt" if lines.any? {|l| l =~ /Product Name: oVirt Node/ }
145
+ end
146
+
147
+ # Sample output of vmware -v `VMware Server 1.0.5 build-80187`
148
+ output = Facter::Core::Execution.exec("vmware -v")
149
+ if output
150
+ mdata = output.match /(\S+)\s+(\S+)/
151
+ next "#{mdata[1]}_#{mdata[2]}".downcase if mdata
152
+ end
153
+
154
+ # Default to 'physical'
155
+ next 'physical'
156
+ end
157
+ end
158
+
159
+ Facter.add("virtual") do
160
+ confine :kernel => "windows"
161
+ setcode do
162
+ require 'facter/util/wmi'
163
+ result = nil
164
+ Facter::Util::WMI.execquery("SELECT manufacturer, model FROM Win32_ComputerSystem").each do |computersystem|
165
+ case computersystem.model
166
+ when /VirtualBox/
167
+ result = "virtualbox"
168
+ when /Virtual Machine/
169
+ result = "hyperv" if computersystem.manufacturer =~ /Microsoft/
170
+ when /VMware/
171
+ result = "vmware"
172
+ when /KVM/
173
+ result = "kvm"
174
+ when /Bochs/
175
+ result = "bochs"
176
+ end
177
+
178
+ if result.nil? and computersystem.manufacturer =~ /Xen/
179
+ result = "xen"
180
+ end
181
+
182
+ break
183
+ end
184
+ result ||= "physical"
185
+
186
+ result
187
+ end
188
+ end
189
+
190
+ ##
191
+ # virtual fact based on virt-what command.
192
+ #
193
+ # The output is mapped onto existing known values for the virtual fact in an
194
+ # effort to preserve consistency. This fact has a high weight becuase the
195
+ # virt-what tool is expected to be maintained upstream.
196
+ #
197
+ # If the virt-what command is not available, this fact will not resolve to a
198
+ # value and lower-weight virtual facts will be attempted.
199
+ #
200
+ # Only the last line of the virt-what command is returned
201
+ Facter.add("virtual") do
202
+ has_weight 500
203
+
204
+ setcode do
205
+ if output = Facter::Util::Virtual.virt_what
206
+ case output
207
+ when 'linux_vserver'
208
+ Facter::Util::Virtual.vserver_type
209
+ when /xen-hvm/i
210
+ 'xenhvm'
211
+ when /xen-dom0/i
212
+ 'xen0'
213
+ when /xen-domU/i
214
+ 'xenu'
215
+ when /ibm_systemz/i
216
+ 'zlinux'
217
+ else
218
+ output.to_s.split("\n").last
219
+ end
220
+ end
221
+ end
222
+ end
223
+
224
+ ##
225
+ # virtual fact specific to Google Compute Engine's Linux sysfs entry.
226
+ Facter.add("virtual") do
227
+ has_weight 600
228
+ confine :kernel => "Linux"
229
+
230
+ setcode do
231
+ if dmi_data = Facter::Util::Virtual.read_sysfs_dmi_entries
232
+ case dmi_data
233
+ when /Google/
234
+ "gce"
235
+ end
236
+ end
237
+ end
238
+ end
239
+ # Fact: is_virtual
240
+ #
241
+ # Purpose: returning true or false for if a machine is virtualised or not.
242
+ #
243
+ # Resolution: Hypervisors and the like may be detected as a virtual type, but
244
+ # are not actual virtual machines, or should not be treated as such. This
245
+ # determines if the host is actually virtualized.
246
+ #
247
+ # Caveats:
248
+ #
249
+
250
+ Facter.add("is_virtual") do
251
+ confine :kernel => %w{Linux FreeBSD OpenBSD SunOS HP-UX Darwin GNU/kFreeBSD windows}
252
+
253
+ setcode do
254
+ physical_types = %w{physical xen0 vmware_server vmware_workstation openvzhn vserver_host}
255
+
256
+ if physical_types.include? Facter.value(:virtual)
257
+ "false"
258
+ else
259
+ "true"
260
+ end
261
+ end
262
+ end