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,285 @@
1
+ # A base module for collecting IP-related
2
+ # information from all kinds of platforms.
3
+ module Facter::Util::IP
4
+ # A map of all the different regexes that work for
5
+ # a given platform or set of platforms.
6
+ REGEX_MAP = {
7
+ :linux => {
8
+ :ipaddress => /inet (?:addr:)?([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/,
9
+ :ipaddress6 => /inet6 (?:addr: )?((?![fe80|::1])(?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/,
10
+ :macaddress => /(?:ether|HWaddr)\s+((\w{1,2}:){5,}\w{1,2})/,
11
+ :netmask => /(?:Mask:|netmask )([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/,
12
+ :mtu => /MTU:(\d+)/
13
+ },
14
+ :bsd => {
15
+ :aliases => [:openbsd, :netbsd, :freebsd, :darwin, :"gnu/kfreebsd", :dragonfly],
16
+ :ipaddress => /inet\s+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/,
17
+ :ipaddress6 => /inet6 ((?![fe80|::1])(?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/,
18
+ :macaddress => /(?:ether|lladdr)\s+(\w?\w:\w?\w:\w?\w:\w?\w:\w?\w:\w?\w)/,
19
+ :netmask => /netmask\s+0x(\w{8})/,
20
+ :mtu => /mtu\s+(\d+)/
21
+ },
22
+ :sunos => {
23
+ :ipaddress => /inet\s+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/,
24
+ :ipaddress6 => /inet6 ((?![fe80|::1])(?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/,
25
+ :macaddress => /(?:ether|lladdr)\s+(\w?\w:\w?\w:\w?\w:\w?\w:\w?\w:\w?\w)/,
26
+ :netmask => /netmask\s+(\w{8})/,
27
+ :mtu => /mtu\s+(\d+)/
28
+ },
29
+ :"hp-ux" => {
30
+ :ipaddress => /\s+inet (\S+)\s.*/,
31
+ :macaddress => /(\w{1,2}:\w{1,2}:\w{1,2}:\w{1,2}:\w{1,2}:\w{1,2})/,
32
+ :netmask => /.*\s+netmask (\S+)\s.*/
33
+ },
34
+ :windows => {}
35
+ }
36
+
37
+ # Convert an interface name into purely alphanumeric characters.
38
+ def self.alphafy(interface)
39
+ interface.gsub(/[^a-z0-9_]/i, '_')
40
+ end
41
+
42
+ def self.convert_from_hex?(kernel)
43
+ kernels_to_convert = [:sunos, :openbsd, :netbsd, :freebsd, :darwin, :"hp-ux", :"gnu/kfreebsd", :dragonfly]
44
+ kernels_to_convert.include?(kernel)
45
+ end
46
+
47
+ def self.supported_platforms
48
+ REGEX_MAP.inject([]) do |result, tmp|
49
+ key, map = tmp
50
+ if map[:aliases]
51
+ result += map[:aliases]
52
+ else
53
+ result << key
54
+ end
55
+ result
56
+ end
57
+ end
58
+
59
+ def self.get_interfaces
60
+ if Facter.value(:kernel) == 'windows'
61
+ require 'facter/util/ip/windows'
62
+ return Facter::Util::IP::Windows.interfaces
63
+ end
64
+
65
+ return [] unless output = Facter::Util::IP.get_all_interface_output()
66
+
67
+ # Our regex appears to be stupid, in that it leaves colons sitting
68
+ # at the end of interfaces. So, we have to trim those trailing
69
+ # characters. I tried making the regex better but supporting all
70
+ # platforms with a single regex is probably a bit too much.
71
+ output.scan(/^\S+/).collect { |i| i.sub(/:$/, '') }.uniq
72
+ end
73
+
74
+ def self.get_all_interface_output
75
+ case Facter.value(:kernel)
76
+ when 'Linux', 'OpenBSD', 'NetBSD', 'FreeBSD', 'Darwin', 'GNU/kFreeBSD', 'DragonFly'
77
+ output = Facter::Util::IP.exec_ifconfig(["-a","2>/dev/null"])
78
+ when 'SunOS'
79
+ output = Facter::Util::IP.exec_ifconfig(["-a"])
80
+ when 'HP-UX'
81
+ # (#17487)[https://projects.puppetlabs.com/issues/17487]
82
+ # Handle NIC bonding where asterisks and virtual NICs are printed.
83
+ if output = hpux_netstat_in
84
+ output.gsub!(/\*/, "") # delete asterisks.
85
+ output.gsub!(/^[^\n]*none[^\n]*\n/, "") # delete lines with 'none' instead of IPs.
86
+ output.sub!(/^[^\n]*\n/, "") # delete the header line.
87
+ output
88
+ end
89
+ end
90
+ output
91
+ end
92
+
93
+
94
+ ##
95
+ # exec_ifconfig uses the ifconfig command
96
+ #
97
+ # @return [String] the output of `ifconfig #{arguments} 2>/dev/null` or nil
98
+ def self.exec_ifconfig(additional_arguments=[])
99
+ Facter::Core::Execution.exec("#{self.get_ifconfig} #{additional_arguments.join(' ')}")
100
+ end
101
+ ##
102
+ # get_ifconfig looks up the ifconfig binary
103
+ #
104
+ # @return [String] path to the ifconfig binary
105
+ def self.get_ifconfig
106
+ common_paths=["/bin/ifconfig","/sbin/ifconfig","/usr/sbin/ifconfig"]
107
+ common_paths.select{|path| File.executable?(path)}.first
108
+ end
109
+ ##
110
+ # hpux_netstat_in is a delegate method that allows us to stub netstat -in
111
+ # without stubbing exec.
112
+ def self.hpux_netstat_in
113
+ Facter::Core::Execution.exec("/bin/netstat -in")
114
+ end
115
+
116
+ def self.get_infiniband_macaddress(interface)
117
+ if File.exists?("/sys/class/net/#{interface}/address") then
118
+ ib_mac_address = `cat /sys/class/net/#{interface}/address`.chomp
119
+ elsif File.exists?("/sbin/ip") then
120
+ ip_output = %x{/sbin/ip link show #{interface}}
121
+ ib_mac_address = ip_output.scan(%r{infiniband\s+((\w{1,2}:){5,}\w{1,2})})
122
+ else
123
+ ib_mac_address = "FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF"
124
+ Facter.debug("ip.rb: nothing under /sys/class/net/#{interface}/address and /sbin/ip not available")
125
+ end
126
+ ib_mac_address
127
+ end
128
+
129
+ def self.ifconfig_interface(interface)
130
+ output = Facter::Util::IP.exec_ifconfig([interface,"2>/dev/null"])
131
+ end
132
+
133
+ def self.get_single_interface_output(interface)
134
+ output = ""
135
+ case Facter.value(:kernel)
136
+ when 'OpenBSD', 'NetBSD', 'FreeBSD', 'Darwin', 'GNU/kFreeBSD', 'DragonFly'
137
+ output = Facter::Util::IP.ifconfig_interface(interface)
138
+ when 'Linux'
139
+ ifconfig_output = Facter::Util::IP.ifconfig_interface(interface)
140
+ if interface =~ /^ib/ then
141
+ real_mac_address = get_infiniband_macaddress(interface)
142
+ output = ifconfig_output.sub(%r{(?:ether|HWaddr)\s+((\w{1,2}:){5,}\w{1,2})}, "HWaddr #{real_mac_address}")
143
+ else
144
+ output = ifconfig_output
145
+ end
146
+ when 'SunOS'
147
+ output = Facter::Util::IP.exec_ifconfig([interface])
148
+ when 'HP-UX'
149
+ mac = ""
150
+ ifc = hpux_ifconfig_interface(interface)
151
+ hpux_lanscan.scan(/(\dx\S+).*UP\s+(\w+\d+)/).each {|i| mac = i[0] if i.include?(interface) }
152
+ mac = mac.sub(/0x(\S+)/,'\1').scan(/../).join(":")
153
+ output = ifc + "\n" + mac
154
+ end
155
+ output
156
+ end
157
+
158
+ def self.hpux_ifconfig_interface(interface)
159
+ Facter::Util::IP.exec_ifconfig([interface])
160
+ end
161
+
162
+ def self.hpux_lanscan
163
+ Facter::Core::Execution.exec("/usr/sbin/lanscan")
164
+ end
165
+
166
+ def self.get_output_for_interface_and_label(interface, label)
167
+ return get_single_interface_output(interface) unless Facter.value(:kernel) == 'windows'
168
+
169
+ require 'facter/util/ip/windows'
170
+ output = Facter::Util::IP::Windows.value_for_interface_and_label(interface, label)
171
+ output ? output : ""
172
+ end
173
+
174
+ def self.get_bonding_master(interface)
175
+ if Facter.value(:kernel) != 'Linux'
176
+ return nil
177
+ end
178
+ # We need ip instead of ifconfig because it will show us
179
+ # the bonding master device.
180
+ if not FileTest.executable?("/sbin/ip")
181
+ return nil
182
+ end
183
+ # A bonding interface can never be an alias interface. Alias
184
+ # interfaces do have a colon in their name and the ip link show
185
+ # command throws an error message when we pass it an alias
186
+ # interface.
187
+ if interface =~ /:/
188
+ return nil
189
+ end
190
+ regex = /SLAVE[,>].* (bond[0-9]+)/
191
+ ethbond = regex.match(%x{/sbin/ip link show #{interface}})
192
+ if ethbond
193
+ device = ethbond[1]
194
+ else
195
+ device = nil
196
+ end
197
+ device
198
+ end
199
+
200
+ ##
201
+ # get_interface_value obtains the value of a specific attribute of a specific
202
+ # interface.
203
+ #
204
+ # @param interface [String] the interface identifier, e.g. "eth0" or "bond0"
205
+ #
206
+ # @param label [String] the attribute of the interface to obtain a value for,
207
+ # e.g. "netmask" or "ipaddress"
208
+ #
209
+ # @api private
210
+ #
211
+ # @return [String] representing the requested value. An empty array is
212
+ # returned if the kernel is not supported by the REGEX_MAP constant.
213
+ def self.get_interface_value(interface, label)
214
+ if Facter.value(:kernel) == 'windows'
215
+ require 'facter/util/ip/windows'
216
+ return Facter::Util::IP::Windows.value_for_interface_and_label(interface, label)
217
+ end
218
+
219
+ tmp1 = []
220
+
221
+ kernel = Facter.value(:kernel).downcase.to_sym
222
+
223
+ # If it's not directly in the map or aliased in the map, then we don't know how to deal with it.
224
+ unless map = REGEX_MAP[kernel] || REGEX_MAP.values.find { |tmp| tmp[:aliases] and tmp[:aliases].include?(kernel) }
225
+ return []
226
+ end
227
+
228
+ # Pull the correct regex out of the map.
229
+ regex = map[label.to_sym]
230
+
231
+ # Linux changes the MAC address reported via ifconfig when an ethernet interface
232
+ # becomes a slave of a bonding device to the master MAC address.
233
+ # We have to dig a bit to get the original/real MAC address of the interface.
234
+ bonddev = get_bonding_master(interface)
235
+ if label == 'macaddress' and bonddev
236
+ bondinfo = read_proc_net_bonding("/proc/net/bonding/#{bonddev}")
237
+ re = /^Slave Interface: #{interface}\b.*?\bPermanent HW addr: (([0-9A-F]{2}:?)*)$/im
238
+ if match = re.match(bondinfo)
239
+ value = match[1].upcase
240
+ end
241
+ else
242
+ output_int = get_output_for_interface_and_label(interface, label)
243
+
244
+ output_int.each_line do |s|
245
+ if s =~ regex
246
+ value = $1
247
+ if label == 'netmask' && convert_from_hex?(kernel)
248
+ value = value.scan(/../).collect do |byte| byte.to_i(16) end.join('.')
249
+ end
250
+ tmp1.push(value)
251
+ end
252
+ end
253
+
254
+ if tmp1
255
+ value = tmp1.shift
256
+ end
257
+ end
258
+ end
259
+
260
+ ##
261
+ # read_proc_net_bonding is a seam method for mocking purposes.
262
+ #
263
+ # @param path [String] representing the path to read, e.g. "/proc/net/bonding/bond0"
264
+ #
265
+ # @api private
266
+ #
267
+ # @return [String] modeling the raw file read
268
+ def self.read_proc_net_bonding(path)
269
+ File.read(path) if File.exists?(path)
270
+ end
271
+ private_class_method :read_proc_net_bonding
272
+
273
+ def self.get_network_value(interface)
274
+ require 'ipaddr'
275
+
276
+ ipaddress = get_interface_value(interface, "ipaddress")
277
+ netmask = get_interface_value(interface, "netmask")
278
+
279
+ if ipaddress && netmask
280
+ ip = IPAddr.new(ipaddress, Socket::AF_INET)
281
+ subnet = IPAddr.new(netmask, Socket::AF_INET)
282
+ network = ip.mask(subnet.to_s).to_s
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,215 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'facter/util/wmi'
4
+ require 'facter/util/ip'
5
+
6
+ class Facter::Util::IP::Windows
7
+ # The WMI query used to return ip information
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @api private
12
+ WMI_IP_INFO_QUERY = 'SELECT Description, ServiceName, IPAddress, IPConnectionMetric, InterfaceIndex, Index, IPSubnet, MACAddress, MTU, SettingID FROM Win32_NetworkAdapterConfiguration WHERE IPConnectionMetric IS NOT NULL AND IPEnabled = TRUE'
13
+
14
+ # Mapping fact names to WMI properties of the Win32_NetworkAdapterConfiguration
15
+ #
16
+ # @api private
17
+ WINDOWS_LABEL_WMI_MAP = {
18
+ :ipaddress => 'IPAddress',
19
+ :ipaddress6 => 'IPAddress',
20
+ :macaddress => 'MACAddress',
21
+ :netmask => 'IPSubnet'
22
+ }
23
+
24
+ def self.to_s
25
+ 'windows'
26
+ end
27
+
28
+ # Windows doesn't display netmask in hex.
29
+ #
30
+ # @return [Boolean] false by default
31
+ #
32
+ # @api private
33
+ def self.convert_netmask_from_hex?
34
+ false
35
+ end
36
+
37
+ # Retrieves a list of unique interfaces names.
38
+ #
39
+ # @return [Array<String>]
40
+ #
41
+ # @api private
42
+ def self.interfaces
43
+ interface_names = []
44
+
45
+ network_adapter_configurations.map do |nic|
46
+ Facter::Util::WMI.execquery("SELECT * FROM Win32_NetworkAdapter WHERE Index = #{nic.Index} AND NetEnabled = TRUE").each do |nic|
47
+ interface_names << nic.NetConnectionId unless nic.NetConnectionId.nil? or nic.NetConnectionId.empty?
48
+ end
49
+ end
50
+
51
+ interface_names.uniq
52
+ end
53
+
54
+ # Get the value of an interface and label. For example, you may want to find
55
+ # the MTU for eth0.
56
+ #
57
+ # @param [String] interface the name of the interface returned by the {#interfaces} method.
58
+ # @param [String] label the type of value to return, e.g. ipaddress
59
+ # @return [String] the value, or nil if not defined
60
+ #
61
+ # @api private
62
+ def self.value_for_interface_and_label(interface, label)
63
+ wmi_value = WINDOWS_LABEL_WMI_MAP[label.downcase.to_sym]
64
+ label_value = nil
65
+ Facter::Util::WMI.execquery("SELECT Index FROM Win32_NetworkAdapter WHERE NetConnectionID = '#{interface}'").each do |nic|
66
+ Facter::Util::WMI.execquery("SELECT #{wmi_value} FROM Win32_NetworkAdapterConfiguration WHERE Index = #{nic.Index}").each do |nic_config|
67
+ case label.downcase.to_sym
68
+ when :ipaddress
69
+ nic_config.IPAddress.any? do |addr|
70
+ label_value = addr if valid_ipv4_address?(addr)
71
+ label_value
72
+ end
73
+ when :ipaddress6
74
+ nic_config.IPAddress.any? do |addr|
75
+ label_value = addr if Facter::Util::IP::Windows.valid_ipv6_address?(addr)
76
+ label_value
77
+ end
78
+ when :netmask
79
+ nic_config.IPSubnet.any? do |addr|
80
+ label_value = addr if Facter::Util::IP::Windows.valid_ipv4_address?(addr)
81
+ label_value
82
+ end
83
+ when :macaddress
84
+ label_value = nic_config.MACAddress
85
+ end
86
+ end
87
+ end
88
+
89
+ label_value
90
+ end
91
+
92
+ # Returns an array of partial Win32_NetworkAdapterConfiguration objects.
93
+ #
94
+ # @return [Array<WIN32OLE>] objects
95
+ #
96
+ # @api private
97
+ def self.network_adapter_configurations
98
+ nics = []
99
+ # WIN32OLE doesn't implement Enumerable
100
+ Facter::Util::WMI.execquery(WMI_IP_INFO_QUERY).each do |nic|
101
+ nics << nic
102
+ end
103
+ nics
104
+ end
105
+
106
+ # Gets a list of active IPv4 network adapter configurations sorted by the
107
+ # lowest IP connection metric. If two configurations have the same metric,
108
+ # then the IPv4 specific binding order as specified in the registry will
109
+ # be used.
110
+ #
111
+ # @return [Array<WIN32OLE>]
112
+ #
113
+ # @api private
114
+ def self.get_preferred_ipv4_adapters
115
+ get_preferred_network_adapters(Bindings4.new)
116
+ end
117
+
118
+ # Gets a list of active IPv6 network adapter configurations sorted by the
119
+ # lowest IP connection metric. If two configurations have the same metric,
120
+ # then the IPv6 specific binding order as specified in the registry will
121
+ # be used.
122
+ #
123
+ # @return [Array<WIN32OLE>]
124
+ #
125
+ # @api private
126
+ def self.get_preferred_ipv6_adapters
127
+ get_preferred_network_adapters(Bindings6.new)
128
+ end
129
+
130
+ # Gets a list of active network adapter configurations sorted by the lowest
131
+ # IP connection metric. If two configurations have the same metric, then
132
+ # the adapter binding order as specified in the registry will be used.
133
+ # Note the order may different for IPv4 vs IPv6 addresses.
134
+ #
135
+ # @see http://support.microsoft.com/kb/894564
136
+ # @return [Array<WIN32OLE>]
137
+ #
138
+ # @api private
139
+ def self.get_preferred_network_adapters(bindings)
140
+ network_adapter_configurations.select do |nic|
141
+ bindings.bindings.include?(nic.SettingID)
142
+ end.sort do |nic_left,nic_right|
143
+ cmp = nic_left.IPConnectionMetric <=> nic_right.IPConnectionMetric
144
+ if cmp == 0
145
+ bindings.bindings[nic_left.SettingID] <=> bindings.bindings[nic_right.SettingID]
146
+ else
147
+ cmp
148
+ end
149
+ end
150
+ end
151
+
152
+ class Bindings4
153
+ def initialize
154
+ @key = 'SYSTEM\CurrentControlSet\Services\Tcpip\Linkage'
155
+ end
156
+
157
+ def bindings
158
+ require 'facter/util/registry'
159
+ bindings = {}
160
+
161
+ Facter::Util::Registry.hklm_read(@key, 'Bind').each_with_index do |entry, index|
162
+ match_data = entry.match(/\\Device\\(\{.*\})/)
163
+ unless match_data.nil?
164
+ bindings[match_data[1]] = index
165
+ end
166
+ end
167
+
168
+ bindings
169
+ rescue
170
+ {}
171
+ end
172
+ end
173
+
174
+ class Bindings6 < Bindings4
175
+ def initialize
176
+ @key = 'SYSTEM\CurrentControlSet\Services\Tcpip6\Linkage'
177
+ end
178
+ end
179
+
180
+ # Determines if the value passed in is a valid ipv4 address.
181
+ #
182
+ # @param [String] ip_address the IPv4 address to validate
183
+ # @return [Boolean]
184
+ #
185
+ # @api private
186
+ def self.valid_ipv4_address?(ip_address)
187
+ String(ip_address).scan(/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/).each do |match|
188
+ # excluding 169.254.x.x in Windows - this is the DHCP APIPA
189
+ # meaning that if the node cannot get an ip address from the dhcp server,
190
+ # it auto-assigns a private ip address
191
+ unless match == "127.0.0.1" or match =~ /^169.254.*/
192
+ return !!match
193
+ end
194
+ end
195
+
196
+ false
197
+ end
198
+
199
+ # Determines if the value passed in is a valid ipv6 address.
200
+ #
201
+ # @param [String] ip_address the IPv6 address to validate
202
+ # @return [Boolean]
203
+ #
204
+ # @api private
205
+ def self.valid_ipv6_address?(ip_address)
206
+ String(ip_address).scan(/(?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4}/).each do |match|
207
+ unless match =~ /fe80.*/ or match == "::1"
208
+ return !!match
209
+ end
210
+ end
211
+
212
+ false
213
+ end
214
+
215
+ end