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,83 @@
|
|
1
|
+
# A Facter plugin that loads external facts.
|
2
|
+
#
|
3
|
+
# Default Unix Directories:
|
4
|
+
# /etc/facter/facts.d", "/etc/puppetlabs/facter/facts.d"
|
5
|
+
#
|
6
|
+
# Default Windows Direcotires:
|
7
|
+
# C:\ProgramData\Puppetlabs\facter\facts.d (2008)
|
8
|
+
# C:\Documents and Settings\All Users\Application Data\Puppetlabs\facter\facts.d (2003)
|
9
|
+
#
|
10
|
+
# Can also load from command-line specified directory
|
11
|
+
#
|
12
|
+
# Facts can be in the form of JSON, YAML or Text files
|
13
|
+
# and any executable that returns key=value pairs.
|
14
|
+
|
15
|
+
require 'facter'
|
16
|
+
require 'facter/util/config'
|
17
|
+
require 'facter/util/composite_loader'
|
18
|
+
require 'facter/util/parser'
|
19
|
+
require 'yaml'
|
20
|
+
|
21
|
+
class Facter::Util::DirectoryLoader
|
22
|
+
|
23
|
+
class NoSuchDirectoryError < Exception
|
24
|
+
end
|
25
|
+
|
26
|
+
# This value makes it highly likely that external facts will take
|
27
|
+
# precedence over all other facts
|
28
|
+
EXTERNAL_FACT_WEIGHT = 10000
|
29
|
+
|
30
|
+
# Directory for fact loading
|
31
|
+
attr_reader :directory
|
32
|
+
|
33
|
+
def initialize(dir)
|
34
|
+
@directory = dir
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.loader_for(dir)
|
38
|
+
if File.directory?(dir)
|
39
|
+
Facter::Util::DirectoryLoader.new(dir)
|
40
|
+
else
|
41
|
+
raise NoSuchDirectoryError
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.default_loader
|
46
|
+
loaders = Facter::Util::Config.external_facts_dirs.collect do |dir|
|
47
|
+
Facter::Util::DirectoryLoader.new(dir)
|
48
|
+
end
|
49
|
+
Facter::Util::CompositeLoader.new(loaders)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Load facts from files in fact directory using the relevant parser classes to
|
53
|
+
# parse them.
|
54
|
+
def load(collection)
|
55
|
+
entries.each do |file|
|
56
|
+
parser = Facter::Util::Parser.parser_for(file)
|
57
|
+
if parser == nil
|
58
|
+
next
|
59
|
+
end
|
60
|
+
|
61
|
+
data = parser.results
|
62
|
+
if data == false
|
63
|
+
Facter.warn "Could not interpret fact file #{file}"
|
64
|
+
elsif data == {} or data == nil
|
65
|
+
Facter.warn "Fact file #{file} was parsed but returned an empty data set"
|
66
|
+
else
|
67
|
+
data.each { |p,v| collection.add(p, :value => v) { has_weight(EXTERNAL_FACT_WEIGHT) } }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def entries
|
75
|
+
Dir.entries(directory).find_all { |f| should_parse?(f) }.sort.map { |f| File.join(directory, f) }
|
76
|
+
rescue Errno::ENOENT => detail
|
77
|
+
[]
|
78
|
+
end
|
79
|
+
|
80
|
+
def should_parse?(file)
|
81
|
+
not file =~ /^\./
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
# Provide a set of utility static methods that help with resolving the EC2
|
5
|
+
# fact.
|
6
|
+
module Facter::Util::EC2
|
7
|
+
class << self
|
8
|
+
# Test if we can connect to the EC2 api. Return true if able to connect.
|
9
|
+
# On failure this function fails silently and returns false.
|
10
|
+
#
|
11
|
+
# The +wait_sec+ parameter provides you with an adjustable timeout.
|
12
|
+
#
|
13
|
+
def can_connect?(wait_sec=2)
|
14
|
+
url = "http://169.254.169.254:80/"
|
15
|
+
Timeout::timeout(wait_sec) {open(url)}
|
16
|
+
return true
|
17
|
+
rescue Timeout::Error
|
18
|
+
return false
|
19
|
+
rescue
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
|
23
|
+
# Test if this host has a mac address used by Eucalyptus clouds, which
|
24
|
+
# normally is +d0:0d+.
|
25
|
+
def has_euca_mac?
|
26
|
+
!!(Facter.value(:macaddress) =~ %r{^[dD]0:0[dD]:})
|
27
|
+
end
|
28
|
+
|
29
|
+
# Test if this host has a mac address used by OpenStack, which
|
30
|
+
# normally starts with FA:16:3E (older versions of OpenStack
|
31
|
+
# may generate mac addresses starting with 02:16:3E)
|
32
|
+
def has_openstack_mac?
|
33
|
+
!!(Facter.value(:macaddress) =~ %r{^(02|[fF][aA]):16:3[eE]})
|
34
|
+
end
|
35
|
+
|
36
|
+
# Test if the host has an arp entry in its cache that matches the EC2 arp,
|
37
|
+
# which is normally +fe:ff:ff:ff:ff:ff+.
|
38
|
+
def has_ec2_arp?
|
39
|
+
kernel = Facter.value(:kernel)
|
40
|
+
|
41
|
+
mac_address_re = case kernel
|
42
|
+
when /Windows/i
|
43
|
+
/fe-ff-ff-ff-ff-ff/i
|
44
|
+
else
|
45
|
+
/fe:ff:ff:ff:ff:ff/i
|
46
|
+
end
|
47
|
+
|
48
|
+
arp_command = case kernel
|
49
|
+
when /Windows/i, /SunOS/i
|
50
|
+
"arp -a"
|
51
|
+
else
|
52
|
+
"arp -an"
|
53
|
+
end
|
54
|
+
|
55
|
+
if arp_table = Facter::Core::Execution.exec(arp_command)
|
56
|
+
return true if arp_table.match(mac_address_re)
|
57
|
+
end
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# userdata returns a single string containing the body of the response of the
|
64
|
+
# GET request for the URI http://169.254.169.254/latest/user-data/ If the
|
65
|
+
# metadata server responds with a 404 Not Found error code then this method
|
66
|
+
# retuns `nil`.
|
67
|
+
#
|
68
|
+
# @param version [String] containing the API version for the request.
|
69
|
+
# Defaults to "latest" and other examples are documented at
|
70
|
+
# http://aws.amazon.com/archives/Amazon%20EC2
|
71
|
+
#
|
72
|
+
# @api public
|
73
|
+
#
|
74
|
+
# @return [String] containing the response body or `nil`
|
75
|
+
def self.userdata(version="latest")
|
76
|
+
uri = "http://169.254.169.254/#{version}/user-data/"
|
77
|
+
begin
|
78
|
+
read_uri(uri)
|
79
|
+
rescue OpenURI::HTTPError => detail
|
80
|
+
case detail.message
|
81
|
+
when /404 Not Found/i
|
82
|
+
Facter.debug "No user-data present at #{uri}: server responded with #{detail.message}"
|
83
|
+
return nil
|
84
|
+
else
|
85
|
+
raise detail
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# read_uri provides a seam method to easily test the HTTP client
|
92
|
+
# functionality of a HTTP based metadata server.
|
93
|
+
#
|
94
|
+
# @api private
|
95
|
+
#
|
96
|
+
# @return [String] containing the body of the response
|
97
|
+
def self.read_uri(uri)
|
98
|
+
open(uri).read
|
99
|
+
end
|
100
|
+
private_class_method :read_uri
|
101
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
require 'facter'
|
2
|
+
require 'facter/util/resolution'
|
3
|
+
require 'facter/core/aggregate'
|
4
|
+
|
5
|
+
# This class represents a fact. Each fact has a name and multiple
|
6
|
+
# {Facter::Util::Resolution resolutions}.
|
7
|
+
#
|
8
|
+
# Create facts using {Facter.add}
|
9
|
+
#
|
10
|
+
# @api public
|
11
|
+
class Facter::Util::Fact
|
12
|
+
# The name of the fact
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :name
|
15
|
+
|
16
|
+
# @return [String]
|
17
|
+
# @deprecated
|
18
|
+
attr_accessor :ldapname
|
19
|
+
|
20
|
+
# Creates a new fact, with no resolution mechanisms. See {Facter.add}
|
21
|
+
# for the public API for creating facts.
|
22
|
+
# @param name [String] the fact name
|
23
|
+
# @param options [Hash] optional parameters
|
24
|
+
# @option options [String] :ldapname set the ldapname property on the fact
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
def initialize(name, options = {})
|
28
|
+
@name = name.to_s.downcase.intern
|
29
|
+
|
30
|
+
extract_ldapname_option!(options)
|
31
|
+
|
32
|
+
@ldapname ||= @name.to_s
|
33
|
+
|
34
|
+
@resolves = []
|
35
|
+
@searching = false
|
36
|
+
|
37
|
+
@value = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
# Adds a new {Facter::Util::Resolution resolution}. This requires a
|
41
|
+
# block, which will then be evaluated in the context of the new
|
42
|
+
# resolution.
|
43
|
+
#
|
44
|
+
# @param options [Hash] A hash of options to set on the resolution
|
45
|
+
#
|
46
|
+
# @return [Facter::Util::Resolution]
|
47
|
+
#
|
48
|
+
# @api private
|
49
|
+
def add(options = {}, &block)
|
50
|
+
define_resolution(nil, options, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Define a new named resolution or return an existing resolution with
|
54
|
+
# the given name.
|
55
|
+
#
|
56
|
+
# @param resolution_name [String] The name of the resolve to define or look up
|
57
|
+
# @param options [Hash] A hash of options to set on the resolution
|
58
|
+
# @return [Facter::Util::Resolution]
|
59
|
+
#
|
60
|
+
# @api public
|
61
|
+
def define_resolution(resolution_name, options = {}, &block)
|
62
|
+
|
63
|
+
resolution_type = options.delete(:type) || :simple
|
64
|
+
|
65
|
+
resolve = create_or_return_resolution(resolution_name, resolution_type)
|
66
|
+
|
67
|
+
resolve.set_options(options) unless options.empty?
|
68
|
+
resolve.evaluate(&block) if block
|
69
|
+
|
70
|
+
resolve
|
71
|
+
rescue => e
|
72
|
+
Facter.log_exception(e, "Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.message}")
|
73
|
+
end
|
74
|
+
|
75
|
+
# Retrieve an existing resolution by name
|
76
|
+
#
|
77
|
+
# @param name [String]
|
78
|
+
#
|
79
|
+
# @return [Facter::Util::Resolution, nil] The resolution if exists, nil if
|
80
|
+
# it doesn't exist or name is nil
|
81
|
+
def resolution(name)
|
82
|
+
return nil if name.nil?
|
83
|
+
|
84
|
+
@resolves.find { |resolve| resolve.name == name }
|
85
|
+
end
|
86
|
+
|
87
|
+
# Flushes any cached values.
|
88
|
+
#
|
89
|
+
# @return [void]
|
90
|
+
#
|
91
|
+
# @api private
|
92
|
+
def flush
|
93
|
+
@resolves.each { |r| r.flush }
|
94
|
+
@value = nil
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns the value for this fact. This searches all resolutions by
|
98
|
+
# suitability and weight (see {Facter::Util::Resolution}). If no
|
99
|
+
# suitable resolution is found, it returns nil.
|
100
|
+
#
|
101
|
+
# @api public
|
102
|
+
def value
|
103
|
+
return @value if @value
|
104
|
+
|
105
|
+
if @resolves.empty?
|
106
|
+
Facter.debug "No resolves for %s" % @name
|
107
|
+
return nil
|
108
|
+
end
|
109
|
+
|
110
|
+
searching do
|
111
|
+
|
112
|
+
suitable_resolutions = sort_by_weight(find_suitable_resolutions(@resolves))
|
113
|
+
@value = find_first_real_value(suitable_resolutions)
|
114
|
+
|
115
|
+
announce_when_no_suitable_resolution(suitable_resolutions)
|
116
|
+
announce_when_no_value_found(@value)
|
117
|
+
|
118
|
+
@value
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# @api private
|
123
|
+
# @deprecated
|
124
|
+
def extract_ldapname_option!(options)
|
125
|
+
if options[:ldapname]
|
126
|
+
Facter.warnonce("ldapname is deprecated and will be removed in a future version")
|
127
|
+
self.ldapname = options.delete(:ldapname)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
# Are we in the midst of a search?
|
134
|
+
def searching?
|
135
|
+
@searching
|
136
|
+
end
|
137
|
+
|
138
|
+
# Lock our searching process, so we never ge stuck in recursion.
|
139
|
+
def searching
|
140
|
+
raise RuntimeError, "Caught recursion on #{@name}" if searching?
|
141
|
+
|
142
|
+
# If we've gotten this far, we're not already searching, so go ahead and do so.
|
143
|
+
@searching = true
|
144
|
+
begin
|
145
|
+
yield
|
146
|
+
ensure
|
147
|
+
@searching = false
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def find_suitable_resolutions(resolutions)
|
152
|
+
resolutions.find_all{ |resolve| resolve.suitable? }
|
153
|
+
end
|
154
|
+
|
155
|
+
def sort_by_weight(resolutions)
|
156
|
+
resolutions.sort { |a, b| b.weight <=> a.weight }
|
157
|
+
end
|
158
|
+
|
159
|
+
def find_first_real_value(resolutions)
|
160
|
+
resolutions.each do |resolve|
|
161
|
+
value = resolve.value
|
162
|
+
if not value.nil?
|
163
|
+
return value
|
164
|
+
end
|
165
|
+
end
|
166
|
+
nil
|
167
|
+
end
|
168
|
+
|
169
|
+
def announce_when_no_suitable_resolution(resolutions)
|
170
|
+
if resolutions.empty?
|
171
|
+
Facter.debug "Found no suitable resolves of %s for %s" % [@resolves.length, @name]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def announce_when_no_value_found(value)
|
176
|
+
if value.nil?
|
177
|
+
Facter.debug("value for %s is still nil" % @name)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def create_or_return_resolution(resolution_name, resolution_type)
|
182
|
+
resolve = self.resolution(resolution_name)
|
183
|
+
|
184
|
+
if resolve
|
185
|
+
if resolution_type != resolve.resolution_type
|
186
|
+
raise ArgumentError, "Cannot return resolution #{resolution_name} with type" +
|
187
|
+
" #{resolution_type}; already defined as #{resolve.resolution_type}"
|
188
|
+
end
|
189
|
+
else
|
190
|
+
case resolution_type
|
191
|
+
when :simple
|
192
|
+
resolve = Facter::Util::Resolution.new(resolution_name, self)
|
193
|
+
when :aggregate
|
194
|
+
resolve = Facter::Core::Aggregate.new(resolution_name, self)
|
195
|
+
else
|
196
|
+
raise ArgumentError, "Expected resolution type to be one of (:simple, :aggregate) but was #{resolution_type}"
|
197
|
+
end
|
198
|
+
|
199
|
+
@resolves << resolve
|
200
|
+
end
|
201
|
+
|
202
|
+
resolve
|
203
|
+
end
|
204
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Facter
|
2
|
+
module Util
|
3
|
+
|
4
|
+
# {Facter::Util::FileRead} is a utility module intended to provide easily
|
5
|
+
# mockable methods that delegate to simple file read methods. The intent is to
|
6
|
+
# avoid the need to execute the `cat` system command or `File.read` directly in
|
7
|
+
# Ruby, as mocking these behaviors can have wide-ranging effects.
|
8
|
+
#
|
9
|
+
# All Facter facts are encouraged to use this method instead of File.read or
|
10
|
+
# Facter::Core::Execution.exec('cat ...')
|
11
|
+
#
|
12
|
+
# @api public
|
13
|
+
module FileRead
|
14
|
+
# read returns the raw content of a file as a string. If the file does not
|
15
|
+
# exist, or the process does not have permission to read the file then nil is
|
16
|
+
# returned.
|
17
|
+
#
|
18
|
+
# @api public
|
19
|
+
#
|
20
|
+
# @param path [String] the path to be read
|
21
|
+
#
|
22
|
+
# @return [String, nil] the raw contents of the file or `nil` if the
|
23
|
+
# file cannot be read because it does not exist or the process does not have
|
24
|
+
# permission to read the file.
|
25
|
+
def self.read(path)
|
26
|
+
File.read(path)
|
27
|
+
rescue Errno::ENOENT, Errno::EACCES => detail
|
28
|
+
Facter.debug "Could not read #{path}: #{detail.message}"
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.read_binary(path)
|
33
|
+
File.open(path, "rb") { |contents| contents.read }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Facter
|
4
|
+
module Util
|
5
|
+
module Formatter
|
6
|
+
|
7
|
+
def self.format_json(hash)
|
8
|
+
if Facter.json?
|
9
|
+
JSON.pretty_generate(hash)
|
10
|
+
else
|
11
|
+
raise "Cannot format facts as JSON; 'json' library is not present"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.format_yaml(hash)
|
16
|
+
YAML.dump(hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.format_plaintext(hash)
|
20
|
+
output = ''
|
21
|
+
|
22
|
+
# Print the value of a single fact, otherwise print a list sorted by fact
|
23
|
+
# name and separated by "=>"
|
24
|
+
if hash.length == 1
|
25
|
+
if value = hash.values.first
|
26
|
+
output = value
|
27
|
+
end
|
28
|
+
else
|
29
|
+
hash.sort_by { |(name, value)| name }.each do |name,value|
|
30
|
+
output << "#{name} => #{value}\n"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
output
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|