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.
- 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 +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
|