facter 2.1.0-x64-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 +53 -0
- data/LICENSE +15 -0
- data/README.md +33 -0
- data/Rakefile +79 -0
- data/bin/facter +20 -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 +36 -0
- data/ext/redhat/facter.spec.erb +220 -0
- data/ext/solaris/pkginfo +7 -0
- data/install.rb +380 -0
- data/lib/facter.rb +261 -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 +123 -0
- data/lib/facter/core/execution/base.rb +81 -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 +113 -0
- data/lib/facter/dhcp_servers.rb +39 -0
- data/lib/facter/domain.rb +99 -0
- data/lib/facter/ec2.rb +44 -0
- data/lib/facter/ec2/rest.rb +130 -0
- data/lib/facter/facterversion.rb +15 -0
- data/lib/facter/filesystems.rb +38 -0
- data/lib/facter/fqdn.rb +24 -0
- data/lib/facter/gce.rb +16 -0
- data/lib/facter/gce/metadata.rb +87 -0
- data/lib/facter/hardwareisa.rb +20 -0
- data/lib/facter/hardwaremodel.rb +67 -0
- data/lib/facter/hostname.rb +31 -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 +23 -0
- data/lib/facter/kernelrelease.rb +50 -0
- data/lib/facter/kernelversion.rb +22 -0
- data/lib/facter/ldom.rb +47 -0
- data/lib/facter/lsbdistcodename.rb +16 -0
- data/lib/facter/lsbdistdescription.rb +25 -0
- data/lib/facter/lsbdistid.rb +16 -0
- data/lib/facter/lsbdistrelease.rb +16 -0
- data/lib/facter/lsbmajdistrelease.rb +27 -0
- data/lib/facter/lsbrelease.rb +16 -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 +168 -0
- data/lib/facter/netmask.rb +42 -0
- data/lib/facter/network.rb +20 -0
- data/lib/facter/operatingsystem.rb +141 -0
- data/lib/facter/operatingsystemmajrelease.rb +47 -0
- data/lib/facter/operatingsystemrelease.rb +250 -0
- data/lib/facter/osfamily.rb +37 -0
- data/lib/facter/partitions.rb +35 -0
- data/lib/facter/path.rb +14 -0
- data/lib/facter/physicalprocessorcount.rb +91 -0
- data/lib/facter/processor.rb +168 -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 +63 -0
- data/lib/facter/util/confine.rb +66 -0
- data/lib/facter/util/dhcp_servers.rb +43 -0
- data/lib/facter/util/directory_loader.rb +83 -0
- data/lib/facter/util/ec2.rb +106 -0
- data/lib/facter/util/fact.rb +204 -0
- data/lib/facter/util/file_read.rb +37 -0
- data/lib/facter/util/formatter.rb +39 -0
- data/lib/facter/util/ip.rb +285 -0
- data/lib/facter/util/ip/windows.rb +215 -0
- data/lib/facter/util/loader.rb +155 -0
- data/lib/facter/util/macaddress.rb +43 -0
- data/lib/facter/util/macosx.rb +73 -0
- data/lib/facter/util/manufacturer.rb +99 -0
- data/lib/facter/util/memory.rb +228 -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/operatingsystem.rb +21 -0
- data/lib/facter/util/parser.rb +158 -0
- data/lib/facter/util/partitions.rb +41 -0
- data/lib/facter/util/partitions/linux.rb +65 -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/posix.rb +16 -0
- data/lib/facter/util/processor.rb +289 -0
- data/lib/facter/util/registry.rb +11 -0
- data/lib/facter/util/resolution.rb +160 -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 +109 -0
- data/lib/facter/util/virtual.rb +180 -0
- data/lib/facter/util/vlans.rb +21 -0
- data/lib/facter/util/windows_root.rb +7 -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 +311 -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/openbsd_bridge_rules +11 -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/dhcp_servers/nmcli_devices +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_devices_disconnected +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_dhcp +36 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_static +24 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_dhcp +49 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_static +37 -0
- data/spec/fixtures/unit/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/dhcp_servers/route_nogw +1 -0
- data/spec/fixtures/unit/ec2/rest/meta-data/root +20 -0
- data/spec/fixtures/unit/filesystems/linux +28 -0
- data/spec/fixtures/unit/gce/metadata/metadata.json +69 -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/kernelrelease/openbsd-5.3 +2 -0
- data/spec/fixtures/unit/kernelrelease/openbsd-5.3-current +3 -0
- data/spec/fixtures/unit/memory/aix-svmon +9 -0
- data/spec/fixtures/unit/memory/aix-swap_l +2 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-multiple +3 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-single +2 -0
- data/spec/fixtures/unit/memory/darwin-vm_stat +13 -0
- data/spec/fixtures/unit/memory/dragonfly-vmstat +3 -0
- data/spec/fixtures/unit/memory/freebsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/linux-proc_meminfo +10 -0
- data/spec/fixtures/unit/memory/openbsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/smartos_zone_swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-prtconf +4 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-multiple +3 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-vmstat +3 -0
- data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
- data/spec/fixtures/unit/netmask/ifconfig_aix_7.txt +3 -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/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/util/dhcp_servers/route_nogw +1 -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/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/smartos_smbios +533 -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/operatingsystem/cumuluslinux.txt +8 -0
- data/spec/fixtures/unit/util/operatingsystem/redhat-7.txt +12 -0
- data/spec/fixtures/unit/util/operatingsystem/sabayon.txt +7 -0
- data/spec/fixtures/unit/util/operatingsystem/wheezy.txt +9 -0
- data/spec/fixtures/unit/util/partitions/partitions/mount +9 -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/centos-5-no-vlans +2 -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_1_cgroup/in_a_container +9 -0
- data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container +8 -0
- data/spec/fixtures/virtual/proc_1_cgroup/not_in_a_container +9 -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 +130 -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 +42 -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 +106 -0
- data/spec/unit/dhcp_servers_spec.rb +152 -0
- data/spec/unit/domain_spec.rb +310 -0
- data/spec/unit/ec2/rest_spec.rb +145 -0
- data/spec/unit/ec2_spec.rb +127 -0
- data/spec/unit/facter_spec.rb +108 -0
- data/spec/unit/filesystems_spec.rb +50 -0
- data/spec/unit/fqdn_spec.rb +16 -0
- data/spec/unit/gce/metadata_spec.rb +49 -0
- data/spec/unit/gce_spec.rb +34 -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 +22 -0
- data/spec/unit/kernelrelease_spec.rb +69 -0
- data/spec/unit/kernelversion_spec.rb +32 -0
- data/spec/unit/ldom_spec.rb +75 -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 +73 -0
- data/spec/unit/manufacturer_spec.rb +115 -0
- data/spec/unit/memory_spec.rb +470 -0
- data/spec/unit/netmask_spec.rb +106 -0
- data/spec/unit/operatingsystem_spec.rb +160 -0
- data/spec/unit/operatingsystemmajrelease_spec.rb +38 -0
- data/spec/unit/operatingsystemrelease_spec.rb +236 -0
- data/spec/unit/osfamily_spec.rb +62 -0
- data/spec/unit/partitions_spec.rb +48 -0
- data/spec/unit/physicalprocessorcount_spec.rb +85 -0
- data/spec/unit/processor_spec.rb +401 -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 +97 -0
- data/spec/unit/util/confine_spec.rb +148 -0
- data/spec/unit/util/dhcp_servers_spec.rb +63 -0
- data/spec/unit/util/directory_loader_spec.rb +88 -0
- data/spec/unit/util/ec2_spec.rb +184 -0
- data/spec/unit/util/fact_spec.rb +142 -0
- data/spec/unit/util/file_read_spec.rb +29 -0
- data/spec/unit/util/formatter_spec.rb +50 -0
- data/spec/unit/util/ip/windows_spec.rb +80 -0
- data/spec/unit/util/ip_spec.rb +467 -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 +114 -0
- data/spec/unit/util/manufacturer_spec.rb +223 -0
- data/spec/unit/util/normalization_spec.rb +113 -0
- data/spec/unit/util/operatingsystem_spec.rb +92 -0
- data/spec/unit/util/parser_spec.rb +200 -0
- data/spec/unit/util/partitions/partitions_spec.rb +67 -0
- data/spec/unit/util/partitions_spec.rb +19 -0
- data/spec/unit/util/posix_spec.rb +11 -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 +171 -0
- data/spec/unit/util/virtual_spec.rb +364 -0
- data/spec/unit/util/vlans_spec.rb +42 -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 +519 -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 +815 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
|
3
|
+
# The resolvable mixin defines behavior for evaluating and returning fact
|
4
|
+
# resolutions.
|
5
|
+
#
|
6
|
+
# Classes including this mixin should implement at #name method describing
|
7
|
+
# the value being resolved and a #resolve_value that actually executes the code
|
8
|
+
# to resolve the value.
|
9
|
+
module Facter::Core::Resolvable
|
10
|
+
|
11
|
+
# The timeout, in seconds, for evaluating this resolution.
|
12
|
+
# @return [Integer]
|
13
|
+
# @api public
|
14
|
+
attr_accessor :timeout
|
15
|
+
|
16
|
+
# Return the timeout period for resolving a value.
|
17
|
+
# (see #timeout)
|
18
|
+
# @return [Numeric]
|
19
|
+
# @comment requiring 'timeout' stdlib class causes Object#timeout to be
|
20
|
+
# defined which delegates to Timeout.timeout. This method may potentially
|
21
|
+
# overwrite the #timeout attr_reader on this class, so we define #limit to
|
22
|
+
# avoid conflicts.
|
23
|
+
def limit
|
24
|
+
@timeout || 0
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# on_flush accepts a block and executes the block when the resolution's value
|
29
|
+
# is flushed. This makes it possible to model a single, expensive system
|
30
|
+
# call inside of a Ruby object and then define multiple dynamic facts which
|
31
|
+
# resolve by sending messages to the model instance. If one of the dynamic
|
32
|
+
# facts is flushed then it can, in turn, flush the data stored in the model
|
33
|
+
# instance to keep all of the dynamic facts in sync without making multiple,
|
34
|
+
# expensive, system calls.
|
35
|
+
#
|
36
|
+
# Please see the Solaris zones fact for an example of how this feature may be
|
37
|
+
# used.
|
38
|
+
#
|
39
|
+
# @see Facter::Util::Fact#flush
|
40
|
+
# @see Facter::Util::Resolution#flush
|
41
|
+
#
|
42
|
+
# @api public
|
43
|
+
def on_flush(&block)
|
44
|
+
@on_flush_block = block
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# flush executes the block, if any, stored by the {on_flush} method
|
49
|
+
#
|
50
|
+
# @see Facter::Util::Fact#flush
|
51
|
+
# @see Facter::Util::Resolution#on_flush
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def flush
|
55
|
+
@on_flush_block.call if @on_flush_block
|
56
|
+
end
|
57
|
+
|
58
|
+
def value
|
59
|
+
result = nil
|
60
|
+
|
61
|
+
with_timing do
|
62
|
+
Timeout.timeout(limit) do
|
63
|
+
result = resolve_value
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
Facter::Util::Normalization.normalize(result)
|
68
|
+
rescue Timeout::Error => detail
|
69
|
+
Facter.log_exception(detail, "Timed out after #{limit} seconds while resolving #{qualified_name}")
|
70
|
+
return nil
|
71
|
+
rescue Facter::Util::Normalization::NormalizationError => detail
|
72
|
+
Facter.log_exception(detail, "Fact resolution #{qualified_name} resolved to an invalid value: #{detail.message}")
|
73
|
+
return nil
|
74
|
+
rescue => detail
|
75
|
+
Facter.log_exception(detail, "Could not retrieve #{qualified_name}: #{detail.message}")
|
76
|
+
return nil
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def with_timing
|
82
|
+
starttime = Time.now.to_f
|
83
|
+
|
84
|
+
yield
|
85
|
+
|
86
|
+
finishtime = Time.now.to_f
|
87
|
+
ms = (finishtime - starttime) * 1000
|
88
|
+
Facter.show_time "#{qualified_name}: #{"%.2f" % ms}ms"
|
89
|
+
end
|
90
|
+
|
91
|
+
def qualified_name
|
92
|
+
"fact='#{@fact.name.to_s}', resolution='#{@name || '<anonymous>'}'"
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'facter'
|
2
|
+
|
3
|
+
# The Suitable mixin provides mechanisms for confining objects to run on
|
4
|
+
# certain platforms and determining the run precedence of these objects.
|
5
|
+
#
|
6
|
+
# Classes that include the Suitable mixin should define a `#confines` method
|
7
|
+
# that returns an Array of zero or more Facter::Util::Confine objects.
|
8
|
+
module Facter::Core::Suitable
|
9
|
+
|
10
|
+
attr_writer :weight
|
11
|
+
|
12
|
+
# Sets the weight of this resolution. If multiple suitable resolutions
|
13
|
+
# are found, the one with the highest weight will be used. If weight
|
14
|
+
# is not given, the number of confines set on a resolution will be
|
15
|
+
# used as its weight (so that the most specific resolution is used).
|
16
|
+
#
|
17
|
+
# @param weight [Integer] the weight of this resolution
|
18
|
+
#
|
19
|
+
# @return [void]
|
20
|
+
#
|
21
|
+
# @api public
|
22
|
+
def has_weight(weight)
|
23
|
+
@weight = weight
|
24
|
+
end
|
25
|
+
|
26
|
+
# Sets the conditions for this resolution to be used. This method accepts
|
27
|
+
# multiple forms of arguments to determine suitability.
|
28
|
+
#
|
29
|
+
# @return [void]
|
30
|
+
#
|
31
|
+
# @api public
|
32
|
+
#
|
33
|
+
# @overload confine(confines)
|
34
|
+
# Confine a fact to a specific fact value or values. This form takes a
|
35
|
+
# hash of fact names and values. Every fact must match the values given for
|
36
|
+
# that fact, otherwise this resolution will not be considered suitable. The
|
37
|
+
# values given for a fact can be an array, in which case the value of the
|
38
|
+
# fact must be in the array for it to match.
|
39
|
+
# @param [Hash{String,Symbol=>String,Array<String>}] confines set of facts identified by the hash keys whose
|
40
|
+
# fact value must match the argument value.
|
41
|
+
# @example Confining to Linux
|
42
|
+
# Facter.add(:powerstates) do
|
43
|
+
# # This resolution only makes sense on linux systems
|
44
|
+
# confine :kernel => "Linux"
|
45
|
+
# setcode do
|
46
|
+
# File.read('/sys/power/states')
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# @overload confine(confines, &block)
|
51
|
+
# Confine a fact to a block with the value of a specified fact yielded to
|
52
|
+
# the block.
|
53
|
+
# @param [String,Symbol] confines the fact name whose value should be
|
54
|
+
# yielded to the block
|
55
|
+
# @param [Proc] block determines the suitability of the fact. If the block
|
56
|
+
# evaluates to `false` or `nil` then the confined fact will not be
|
57
|
+
# evaluated.
|
58
|
+
# @yield [value] the value of the fact identified by {confines}
|
59
|
+
# @example Confine the fact to a host with an ipaddress in a specific
|
60
|
+
# subnet
|
61
|
+
# confine :ipaddress do |addr|
|
62
|
+
# require 'ipaddr'
|
63
|
+
# IPAddr.new('192.168.0.0/16').include? addr
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# @overload confine(&block)
|
67
|
+
# Confine a fact to a block. The fact will be evaluated only if the block
|
68
|
+
# evaluates to something other than `false` or `nil`.
|
69
|
+
# @param [Proc] block determines the suitability of the fact. If the block
|
70
|
+
# evaluates to `false` or `nil` then the confined fact will not be
|
71
|
+
# evaluated.
|
72
|
+
# @example Confine the fact to systems with a specific file.
|
73
|
+
# confine { File.exist? '/bin/foo' }
|
74
|
+
def confine(confines = nil, &block)
|
75
|
+
case confines
|
76
|
+
when Hash
|
77
|
+
confines.each do |fact, values|
|
78
|
+
@confines.push Facter::Util::Confine.new(fact, *values)
|
79
|
+
end
|
80
|
+
else
|
81
|
+
if block
|
82
|
+
if confines
|
83
|
+
@confines.push Facter::Util::Confine.new(confines, &block)
|
84
|
+
else
|
85
|
+
@confines.push Facter::Util::Confine.new(&block)
|
86
|
+
end
|
87
|
+
else
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Returns the importance of this resolution. If the weight was not
|
93
|
+
# given, the number of confines is used instead (so that a more
|
94
|
+
# specific resolution wins over a less specific one).
|
95
|
+
#
|
96
|
+
# @return [Integer] the weight of this resolution
|
97
|
+
#
|
98
|
+
# @api private
|
99
|
+
def weight
|
100
|
+
if @weight
|
101
|
+
@weight
|
102
|
+
else
|
103
|
+
@confines.length
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Is this resolution mechanism suitable on the system in question?
|
108
|
+
#
|
109
|
+
# @api private
|
110
|
+
def suitable?
|
111
|
+
@confines.all? { |confine| confine.true? }
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Fact: dhcp_servers
|
2
|
+
#
|
3
|
+
# Purpose:
|
4
|
+
# Return the DHCP server addresses for all interfaces as a hash.
|
5
|
+
# If the interface that is the default gateway is dhcp assigned, there
|
6
|
+
# will also be a 'system' entry in the hash.
|
7
|
+
#
|
8
|
+
# Resolution:
|
9
|
+
# Parses the output of nmcli to find the DHCP server for the interface if available
|
10
|
+
#
|
11
|
+
# Caveats:
|
12
|
+
# Requires nmcli to be available and the interface must use network-manager.
|
13
|
+
#
|
14
|
+
|
15
|
+
require 'facter'
|
16
|
+
require 'facter/util/dhcp_servers'
|
17
|
+
|
18
|
+
|
19
|
+
Facter.add(:dhcp_servers) do
|
20
|
+
confine :kernel => :linux
|
21
|
+
confine do
|
22
|
+
Facter::Core::Execution.which('nmcli')
|
23
|
+
end
|
24
|
+
|
25
|
+
setcode do
|
26
|
+
gwdev = Facter::Util::DHCPServers.gateway_device
|
27
|
+
devices = Facter::Util::DHCPServers.devices
|
28
|
+
|
29
|
+
dhcp_servers = {}
|
30
|
+
devices.each do |device|
|
31
|
+
if server = Facter::Util::DHCPServers.device_dhcp_server(device)
|
32
|
+
dhcp_servers['system'] = server if device == gwdev
|
33
|
+
dhcp_servers[device] = server
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
dhcp_servers.keys.length > 0 ? dhcp_servers : nil
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# Fact: domain
|
2
|
+
#
|
3
|
+
# Purpose:
|
4
|
+
# Return the host's primary DNS domain name.
|
5
|
+
#
|
6
|
+
# Resolution:
|
7
|
+
# On UNIX (excluding Darwin), first try and use the hostname fact,
|
8
|
+
# which uses the hostname system command, and then parse the output
|
9
|
+
# of that.
|
10
|
+
# Failing that it tries the dnsdomainname system command.
|
11
|
+
# Failing that it uses /etc/resolv.conf and takes the domain from that, or as
|
12
|
+
# a final resort, the search from that.
|
13
|
+
# Otherwise returns nil.
|
14
|
+
#
|
15
|
+
# On Windows uses the win32ole gem and winmgmts to get the DNSDomain value
|
16
|
+
# from the Win32 networking stack.
|
17
|
+
#
|
18
|
+
# Caveats:
|
19
|
+
#
|
20
|
+
|
21
|
+
Facter.add(:domain) do
|
22
|
+
setcode do
|
23
|
+
# Get the domain from various sources; the order of these
|
24
|
+
# steps is important
|
25
|
+
|
26
|
+
# In some OS 'hostname -f' will change the hostname to '-f'
|
27
|
+
# We know that Solaris and HP-UX exhibit this behavior
|
28
|
+
# On good OS, 'hostname -f' will return the FQDN which is preferable
|
29
|
+
# Due to dangerous behavior of 'hostname -f' on old OS, we will explicitly opt-in
|
30
|
+
# 'hostname -f' --hkenney May 9, 2012
|
31
|
+
basic_hostname = 'hostname 2> /dev/null'
|
32
|
+
windows_hostname = 'hostname > NUL'
|
33
|
+
full_hostname = 'hostname -f 2> /dev/null'
|
34
|
+
can_do_hostname_f = Regexp.union /Linux/i, /FreeBSD/i, /Darwin/i
|
35
|
+
|
36
|
+
hostname_command = if Facter.value(:kernel) =~ can_do_hostname_f
|
37
|
+
full_hostname
|
38
|
+
elsif Facter.value(:kernel) == "windows"
|
39
|
+
windows_hostname
|
40
|
+
else
|
41
|
+
basic_hostname
|
42
|
+
end
|
43
|
+
|
44
|
+
if name = Facter::Core::Execution.exec(hostname_command) \
|
45
|
+
and name =~ /.*?\.(.+$)/
|
46
|
+
|
47
|
+
return_value = $1
|
48
|
+
elsif Facter.value(:kernel) != "windows" and domain = Facter::Core::Execution.exec('dnsdomainname 2> /dev/null') \
|
49
|
+
and domain =~ /.+/
|
50
|
+
|
51
|
+
return_value = domain
|
52
|
+
elsif FileTest.exists?("/etc/resolv.conf")
|
53
|
+
domain = nil
|
54
|
+
search = nil
|
55
|
+
File.open("/etc/resolv.conf") { |file|
|
56
|
+
file.each { |line|
|
57
|
+
if line =~ /^\s*domain\s+(\S+)/
|
58
|
+
domain = $1
|
59
|
+
elsif line =~ /^\s*search\s+(\S+)/
|
60
|
+
search = $1
|
61
|
+
end
|
62
|
+
}
|
63
|
+
}
|
64
|
+
return_value ||= domain
|
65
|
+
return_value ||= search
|
66
|
+
end
|
67
|
+
|
68
|
+
if return_value
|
69
|
+
return_value.gsub(/\.$/, '')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
Facter.add(:domain) do
|
75
|
+
confine :kernel => :windows
|
76
|
+
setcode do
|
77
|
+
require 'facter/util/registry'
|
78
|
+
|
79
|
+
domain = nil
|
80
|
+
regvalue = Facter::Util::Registry.hklm_read('SYSTEM\CurrentControlSet\Services\Tcpip\Parameters', 'Domain')
|
81
|
+
|
82
|
+
if regvalue and not regvalue.empty?
|
83
|
+
domain = regvalue
|
84
|
+
else
|
85
|
+
require 'facter/util/wmi'
|
86
|
+
Facter::Util::WMI.execquery("select DNSDomain from Win32_NetworkAdapterConfiguration where IPEnabled = True").each { |nic|
|
87
|
+
if nic.DNSDomain && nic.DNSDomain.length > 0
|
88
|
+
domain = nic.DNSDomain
|
89
|
+
break
|
90
|
+
end
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
if domain
|
96
|
+
domain.gsub(/\.$/, '')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/lib/facter/ec2.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'facter/ec2/rest'
|
2
|
+
|
3
|
+
Facter.define_fact(:ec2_metadata) do
|
4
|
+
define_resolution(:rest) do
|
5
|
+
confine do
|
6
|
+
Facter.value(:virtual).match /^xen/
|
7
|
+
end
|
8
|
+
|
9
|
+
@querier = Facter::EC2::Metadata.new
|
10
|
+
confine do
|
11
|
+
@querier.reachable?
|
12
|
+
end
|
13
|
+
|
14
|
+
setcode do
|
15
|
+
@querier.fetch
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Facter.define_fact(:ec2_userdata) do
|
21
|
+
define_resolution(:rest) do
|
22
|
+
confine do
|
23
|
+
Facter.value(:virtual).match /^xen/
|
24
|
+
end
|
25
|
+
|
26
|
+
@querier = Facter::EC2::Userdata.new
|
27
|
+
confine do
|
28
|
+
@querier.reachable?
|
29
|
+
end
|
30
|
+
|
31
|
+
setcode do
|
32
|
+
@querier.fetch
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# The flattened version of the EC2 facts are deprecated and will be removed in
|
38
|
+
# a future release of Facter.
|
39
|
+
if (ec2_metadata = Facter.value(:ec2_metadata))
|
40
|
+
ec2_facts = Facter::Util::Values.flatten_structure("ec2", ec2_metadata)
|
41
|
+
ec2_facts.each_pair do |factname, factvalue|
|
42
|
+
Facter.add(factname, :value => factvalue)
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module Facter
|
5
|
+
module EC2
|
6
|
+
CONNECTION_ERRORS = [
|
7
|
+
Errno::EHOSTDOWN,
|
8
|
+
Errno::EHOSTUNREACH,
|
9
|
+
Errno::ENETUNREACH,
|
10
|
+
Errno::ECONNABORTED,
|
11
|
+
Errno::ECONNREFUSED,
|
12
|
+
Errno::ECONNRESET,
|
13
|
+
Errno::ETIMEDOUT,
|
14
|
+
]
|
15
|
+
|
16
|
+
class Base
|
17
|
+
def reachable?(retry_limit = 3)
|
18
|
+
timeout = 0.2
|
19
|
+
able_to_connect = false
|
20
|
+
attempts = 0
|
21
|
+
|
22
|
+
begin
|
23
|
+
Timeout.timeout(timeout) do
|
24
|
+
open(@baseurl).read
|
25
|
+
end
|
26
|
+
able_to_connect = true
|
27
|
+
rescue OpenURI::HTTPError => e
|
28
|
+
if e.message.match /404 Not Found/i
|
29
|
+
able_to_connect = false
|
30
|
+
else
|
31
|
+
attempts = attempts + 1
|
32
|
+
retry if attempts < retry_limit
|
33
|
+
end
|
34
|
+
rescue Timeout::Error
|
35
|
+
attempts = attempts + 1
|
36
|
+
retry if attempts < retry_limit
|
37
|
+
rescue *CONNECTION_ERRORS
|
38
|
+
attempts = attempts + 1
|
39
|
+
retry if attempts < retry_limit
|
40
|
+
end
|
41
|
+
|
42
|
+
able_to_connect
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Metadata < Base
|
47
|
+
|
48
|
+
DEFAULT_URI = "http://169.254.169.254/latest/meta-data/"
|
49
|
+
|
50
|
+
def initialize(uri = DEFAULT_URI)
|
51
|
+
@baseurl = uri
|
52
|
+
end
|
53
|
+
|
54
|
+
def fetch(path = '')
|
55
|
+
results = {}
|
56
|
+
|
57
|
+
keys = fetch_endpoint(path)
|
58
|
+
keys.each do |key|
|
59
|
+
if key.match(%r[/$])
|
60
|
+
# If a metadata key is suffixed with '/' then it's a general metadata
|
61
|
+
# resource, so we have to recursively look up all the keys in the given
|
62
|
+
# collection.
|
63
|
+
name = key[0..-2]
|
64
|
+
results[name] = fetch("#{path}#{key}")
|
65
|
+
else
|
66
|
+
# This is a simple key/value pair, we can just query the given endpoint
|
67
|
+
# and store the results.
|
68
|
+
ret = fetch_endpoint("#{path}#{key}")
|
69
|
+
results[key] = ret.size > 1 ? ret : ret.first
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
results
|
74
|
+
end
|
75
|
+
|
76
|
+
# @param path [String] The path relative to the object base url
|
77
|
+
#
|
78
|
+
# @return [Array, NilClass]
|
79
|
+
def fetch_endpoint(path)
|
80
|
+
uri = @baseurl + path
|
81
|
+
body = open(uri).read
|
82
|
+
parse_results(body)
|
83
|
+
rescue OpenURI::HTTPError => e
|
84
|
+
if e.message.match /404 Not Found/i
|
85
|
+
return nil
|
86
|
+
else
|
87
|
+
Facter.log_exception(e, "Failed to fetch ec2 uri #{uri}: #{e.message}")
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
rescue *CONNECTION_ERRORS => e
|
91
|
+
Facter.log_exception(e, "Failed to fetch ec2 uri #{uri}: #{e.message}")
|
92
|
+
return nil
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def parse_results(body)
|
98
|
+
lines = body.split("\n")
|
99
|
+
lines.map do |line|
|
100
|
+
if (match = line.match(/^(\d+)=.*$/))
|
101
|
+
# Metadata arrays are formatted like '<index>=<associated key>/', so
|
102
|
+
# we need to extract the index from that output.
|
103
|
+
"#{match[1]}/"
|
104
|
+
else
|
105
|
+
line
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class Userdata < Base
|
112
|
+
DEFAULT_URI = "http://169.254.169.254/latest/user-data/"
|
113
|
+
|
114
|
+
def initialize(uri = DEFAULT_URI)
|
115
|
+
@baseurl = uri
|
116
|
+
end
|
117
|
+
|
118
|
+
def fetch
|
119
|
+
open(@baseurl).read
|
120
|
+
rescue OpenURI::HTTPError => e
|
121
|
+
if e.message.match /404 Not Found/i
|
122
|
+
return nil
|
123
|
+
else
|
124
|
+
Facter.log_exception(e, "Failed to fetch ec2 uri #{uri}: #{e.message}")
|
125
|
+
return nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|