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.
- checksums.yaml +7 -0
- data/COMMITTERS.md +194 -0
- data/CONTRIBUTING.md +65 -0
- data/Gemfile +43 -0
- data/LICENSE +15 -0
- data/README.md +33 -0
- data/Rakefile +79 -0
- data/bin/facter +16 -0
- data/etc/facter.conf +5 -0
- data/ext/build_defaults.yaml +24 -0
- data/ext/debian/changelog.erb +59 -0
- data/ext/debian/compat +1 -0
- data/ext/debian/control +14 -0
- data/ext/debian/copyright +19 -0
- data/ext/debian/docs +1 -0
- data/ext/debian/lintian-overrides +0 -0
- data/ext/debian/rules +10 -0
- data/ext/debian/source/format +1 -0
- data/ext/facter-diff +74 -0
- data/ext/ips/facter.p5m.erb +10 -0
- data/ext/ips/rules +7 -0
- data/ext/ips/transforms +18 -0
- data/ext/osx/file_mapping.yaml +27 -0
- data/ext/osx/preflight.erb +33 -0
- data/ext/osx/prototype.plist.erb +38 -0
- data/ext/project_data.yaml +33 -0
- data/ext/redhat/facter.spec.erb +220 -0
- data/ext/solaris/pkginfo +7 -0
- data/install.rb +380 -0
- data/lib/facter.rb +262 -0
- data/lib/facter/Cfkey.rb +42 -0
- data/lib/facter/application.rb +204 -0
- data/lib/facter/architecture.rb +50 -0
- data/lib/facter/augeasversion.rb +28 -0
- data/lib/facter/blockdevices.rb +105 -0
- data/lib/facter/core/aggregate.rb +220 -0
- data/lib/facter/core/directed_graph.rb +46 -0
- data/lib/facter/core/execution.rb +100 -0
- data/lib/facter/core/execution/base.rb +73 -0
- data/lib/facter/core/execution/posix.rb +50 -0
- data/lib/facter/core/execution/windows.rb +57 -0
- data/lib/facter/core/logging.rb +169 -0
- data/lib/facter/core/resolvable.rb +94 -0
- data/lib/facter/core/suitable.rb +117 -0
- data/lib/facter/domain.rb +99 -0
- data/lib/facter/ec2.rb +37 -0
- data/lib/facter/facterversion.rb +15 -0
- data/lib/facter/filesystems.rb +38 -0
- data/lib/facter/fqdn.rb +22 -0
- data/lib/facter/hardwareisa.rb +20 -0
- data/lib/facter/hardwaremodel.rb +67 -0
- data/lib/facter/hostname.rb +33 -0
- data/lib/facter/id.rb +21 -0
- data/lib/facter/interfaces.rb +46 -0
- data/lib/facter/ipaddress.rb +171 -0
- data/lib/facter/ipaddress6.rb +82 -0
- data/lib/facter/iphostnumber.rb +29 -0
- data/lib/facter/kernel.rb +22 -0
- data/lib/facter/kernelmajversion.rb +15 -0
- data/lib/facter/kernelrelease.rb +42 -0
- data/lib/facter/kernelversion.rb +22 -0
- data/lib/facter/ldom.rb +47 -0
- data/lib/facter/lsbdistcodename.rb +18 -0
- data/lib/facter/lsbdistdescription.rb +21 -0
- data/lib/facter/lsbdistid.rb +18 -0
- data/lib/facter/lsbdistrelease.rb +18 -0
- data/lib/facter/lsbmajdistrelease.rb +27 -0
- data/lib/facter/lsbrelease.rb +18 -0
- data/lib/facter/macaddress.rb +97 -0
- data/lib/facter/macosx.rb +56 -0
- data/lib/facter/manufacturer.rb +68 -0
- data/lib/facter/memory.rb +162 -0
- data/lib/facter/netmask.rb +42 -0
- data/lib/facter/network.rb +20 -0
- data/lib/facter/operatingsystem.rb +121 -0
- data/lib/facter/operatingsystemmajrelease.rb +33 -0
- data/lib/facter/operatingsystemrelease.rb +226 -0
- data/lib/facter/osfamily.rb +35 -0
- data/lib/facter/path.rb +14 -0
- data/lib/facter/physicalprocessorcount.rb +84 -0
- data/lib/facter/processor.rb +183 -0
- data/lib/facter/ps.rb +30 -0
- data/lib/facter/puppetversion.rb +20 -0
- data/lib/facter/rubysitedir.rb +12 -0
- data/lib/facter/rubyversion.rb +12 -0
- data/lib/facter/selinux.rb +99 -0
- data/lib/facter/ssh.rb +72 -0
- data/lib/facter/timezone.rb +14 -0
- data/lib/facter/uniqueid.rb +4 -0
- data/lib/facter/uptime.rb +34 -0
- data/lib/facter/uptime_days.rb +15 -0
- data/lib/facter/uptime_hours.rb +15 -0
- data/lib/facter/uptime_seconds.rb +24 -0
- data/lib/facter/util/architecture.rb +19 -0
- data/lib/facter/util/collection.rb +161 -0
- data/lib/facter/util/composite_loader.rb +12 -0
- data/lib/facter/util/config.rb +61 -0
- data/lib/facter/util/confine.rb +66 -0
- data/lib/facter/util/directory_loader.rb +83 -0
- data/lib/facter/util/ec2.rb +101 -0
- data/lib/facter/util/fact.rb +204 -0
- data/lib/facter/util/file_read.rb +37 -0
- data/lib/facter/util/formatter.rb +38 -0
- data/lib/facter/util/ip.rb +285 -0
- data/lib/facter/util/ip/windows.rb +215 -0
- data/lib/facter/util/loader.rb +146 -0
- data/lib/facter/util/macaddress.rb +43 -0
- data/lib/facter/util/macosx.rb +73 -0
- data/lib/facter/util/manufacturer.rb +104 -0
- data/lib/facter/util/memory.rb +228 -0
- data/lib/facter/util/monkey_patches.rb +8 -0
- data/lib/facter/util/netmask.rb +40 -0
- data/lib/facter/util/normalization.rb +94 -0
- data/lib/facter/util/nothing_loader.rb +12 -0
- data/lib/facter/util/parser.rb +158 -0
- data/lib/facter/util/plist.rb +24 -0
- data/lib/facter/util/plist/generator.rb +228 -0
- data/lib/facter/util/plist/parser.rb +226 -0
- data/lib/facter/util/processor.rb +291 -0
- data/lib/facter/util/registry.rb +11 -0
- data/lib/facter/util/resolution.rb +152 -0
- data/lib/facter/util/solaris_zones.rb +158 -0
- data/lib/facter/util/unix_root.rb +5 -0
- data/lib/facter/util/uptime.rb +81 -0
- data/lib/facter/util/values.rb +80 -0
- data/lib/facter/util/virtual.rb +151 -0
- data/lib/facter/util/vlans.rb +24 -0
- data/lib/facter/util/windows_root.rb +37 -0
- data/lib/facter/util/wmi.rb +16 -0
- data/lib/facter/util/xendomains.rb +10 -0
- data/lib/facter/version.rb +86 -0
- data/lib/facter/virtual.rb +262 -0
- data/lib/facter/vlans.rb +17 -0
- data/lib/facter/xendomains.rb +20 -0
- data/lib/facter/zfs_version.rb +10 -0
- data/lib/facter/zonename.rb +6 -0
- data/lib/facter/zones.rb +17 -0
- data/lib/facter/zpool_version.rb +10 -0
- data/spec/fixtures/cpuinfo/amd64dual +57 -0
- data/spec/fixtures/cpuinfo/amd64quad +79 -0
- data/spec/fixtures/cpuinfo/amd64solo +23 -0
- data/spec/fixtures/cpuinfo/amd64tri +86 -0
- data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
- data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
- data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
- data/spec/fixtures/cpuinfo/panda-armel +17 -0
- data/spec/fixtures/cpuinfo/ppc64 +19 -0
- data/spec/fixtures/cpuinfo/sparc +10 -0
- data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
- data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
- data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
- data/spec/fixtures/hpux/sched.models +174 -0
- data/spec/fixtures/hpux/unistd.h +1534 -0
- data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
- data/spec/fixtures/ifconfig/centos_5_5 +17 -0
- data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
- data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
- data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
- data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
- data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
- data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
- data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
- data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
- data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
- data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
- data/spec/fixtures/ifconfig/fedora_10 +36 -0
- data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
- data/spec/fixtures/ifconfig/fedora_13 +18 -0
- data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
- data/spec/fixtures/ifconfig/fedora_8 +38 -0
- data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
- data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
- data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
- data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
- data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
- data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
- data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
- data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
- data/spec/fixtures/ldom/ldom_v1 +6 -0
- data/spec/fixtures/netstat/centos_5_5 +5 -0
- data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
- data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
- data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
- data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
- data/spec/fixtures/netstat/fedora_10 +7 -0
- data/spec/fixtures/netstat/open_solaris_10 +16 -0
- data/spec/fixtures/netstat/open_solaris_b132 +17 -0
- data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
- data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
- data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
- data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
- data/spec/fixtures/unit/filesystems/linux +28 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
- data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
- data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
- data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
- data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
- data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
- data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
- data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
- data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
- data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
- data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
- data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
- data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
- data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
- data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
- data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
- data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
- data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
- data/spec/fixtures/unit/util/loader/nosuchfact.rb +1 -0
- data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
- data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
- data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
- data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
- data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
- data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
- data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
- data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
- data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
- data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
- data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
- data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
- data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
- data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
- data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
- data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
- data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
- data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
- data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
- data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
- data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
- data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
- data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
- data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
- data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
- data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
- data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
- data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
- data/spec/integration/facter_spec.rb +39 -0
- data/spec/lib/facter_spec/cpuinfo.rb +15 -0
- data/spec/lib/facter_spec/windows_network.rb +64 -0
- data/spec/puppetlabs_spec/files.rb +57 -0
- data/spec/puppetlabs_spec/fixtures.rb +49 -0
- data/spec/puppetlabs_spec/matchers.rb +87 -0
- data/spec/puppetlabs_spec/verbose.rb +9 -0
- data/spec/puppetlabs_spec_helper.rb +26 -0
- data/spec/shared_contexts/platform.rb +55 -0
- data/spec/shared_formats/parses.rb +3 -0
- data/spec/spec_helper.rb +75 -0
- data/spec/unit/application_spec.rb +101 -0
- data/spec/unit/architecture_spec.rb +63 -0
- data/spec/unit/blockdevices_spec.rb +109 -0
- data/spec/unit/core/aggregate_spec.rb +125 -0
- data/spec/unit/core/directed_graph_spec.rb +79 -0
- data/spec/unit/core/execution/base_spec.rb +119 -0
- data/spec/unit/core/execution/posix_spec.rb +86 -0
- data/spec/unit/core/execution/windows_spec.rb +106 -0
- data/spec/unit/core/execution_spec.rb +37 -0
- data/spec/unit/core/logging_spec.rb +104 -0
- data/spec/unit/core/resolvable_spec.rb +81 -0
- data/spec/unit/core/suitable_spec.rb +96 -0
- data/spec/unit/domain_spec.rb +310 -0
- data/spec/unit/ec2_spec.rb +187 -0
- data/spec/unit/facter_spec.rb +108 -0
- data/spec/unit/filesystems_spec.rb +50 -0
- data/spec/unit/hardwareisa_spec.rb +41 -0
- data/spec/unit/hardwaremodel_spec.rb +56 -0
- data/spec/unit/hostname_spec.rb +40 -0
- data/spec/unit/id_spec.rb +29 -0
- data/spec/unit/interfaces_spec.rb +57 -0
- data/spec/unit/ipaddress6_spec.rb +161 -0
- data/spec/unit/ipaddress_spec.rb +114 -0
- data/spec/unit/kernel_spec.rb +24 -0
- data/spec/unit/kernelmajversion_spec.rb +17 -0
- data/spec/unit/kernelrelease_spec.rb +53 -0
- data/spec/unit/kernelversion_spec.rb +32 -0
- data/spec/unit/ldom_spec.rb +74 -0
- data/spec/unit/lsbdistcodename_spec.rb +25 -0
- data/spec/unit/lsbdistdescription_spec.rb +25 -0
- data/spec/unit/lsbdistid_spec.rb +25 -0
- data/spec/unit/lsbdistrelease_spec.rb +25 -0
- data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
- data/spec/unit/lsbrelease_spec.rb +25 -0
- data/spec/unit/macaddress_spec.rb +61 -0
- data/spec/unit/manufacturer_spec.rb +115 -0
- data/spec/unit/memory_spec.rb +539 -0
- data/spec/unit/netmask_spec.rb +95 -0
- data/spec/unit/operatingsystem_spec.rb +141 -0
- data/spec/unit/operatingsystemmajrelease_spec.rb +16 -0
- data/spec/unit/operatingsystemrelease_spec.rb +226 -0
- data/spec/unit/physicalprocessorcount_spec.rb +76 -0
- data/spec/unit/processor_spec.rb +393 -0
- data/spec/unit/ps_spec.rb +42 -0
- data/spec/unit/selinux_spec.rb +114 -0
- data/spec/unit/ssh_spec.rb +77 -0
- data/spec/unit/uniqueid_spec.rb +27 -0
- data/spec/unit/uptime_spec.rb +110 -0
- data/spec/unit/util/collection_spec.rb +258 -0
- data/spec/unit/util/config_spec.rb +84 -0
- data/spec/unit/util/confine_spec.rb +148 -0
- data/spec/unit/util/directory_loader_spec.rb +88 -0
- data/spec/unit/util/ec2_spec.rb +180 -0
- data/spec/unit/util/fact_spec.rb +142 -0
- data/spec/unit/util/file_read_spec.rb +29 -0
- data/spec/unit/util/ip/windows_spec.rb +80 -0
- data/spec/unit/util/ip_spec.rb +463 -0
- data/spec/unit/util/loader_spec.rb +286 -0
- data/spec/unit/util/macaddress_spec.rb +141 -0
- data/spec/unit/util/macosx_spec.rb +113 -0
- data/spec/unit/util/manufacturer_spec.rb +179 -0
- data/spec/unit/util/normalization_spec.rb +113 -0
- data/spec/unit/util/parser_spec.rb +200 -0
- data/spec/unit/util/processor_spec.rb +92 -0
- data/spec/unit/util/registry_spec.rb +76 -0
- data/spec/unit/util/resolution_spec.rb +129 -0
- data/spec/unit/util/solaris_zones_spec.rb +127 -0
- data/spec/unit/util/uptime_spec.rb +126 -0
- data/spec/unit/util/values_spec.rb +131 -0
- data/spec/unit/util/virtual_spec.rb +294 -0
- data/spec/unit/util/vlans_spec.rb +12 -0
- data/spec/unit/util/wmi_spec.rb +19 -0
- data/spec/unit/util/xendomains_spec.rb +21 -0
- data/spec/unit/version_spec.rb +42 -0
- data/spec/unit/virtual_spec.rb +470 -0
- data/spec/unit/zfs_version_spec.rb +75 -0
- data/spec/unit/zonename_spec.rb +14 -0
- data/spec/unit/zones_spec.rb +55 -0
- data/spec/unit/zpool_version_spec.rb +75 -0
- data/spec/watchr.rb +125 -0
- 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
|