Revision: 15006 http://gar.svn.sourceforge.net/gar/?rev=15006&view=rev Author: phipsy Date: 2011-07-08 11:46:56 +0000 (Fri, 08 Jul 2011)
Log Message: ----------- Applying puppetlabs 7038 patch to facter 1.6.0 Modified Paths: -------------- csw/mgar/pkg/facter/trunk/Makefile Added Paths: ----------- csw/mgar/pkg/facter/trunk/files/0001-puppetlabs-ticket-7038-prtdiag-fixes.patch Removed Paths: ------------- csw/mgar/pkg/facter/trunk/files/0001-Patch-to-prtconf-run-in-memory.rb.patch Modified: csw/mgar/pkg/facter/trunk/Makefile =================================================================== --- csw/mgar/pkg/facter/trunk/Makefile 2011-07-08 11:16:16 UTC (rev 15005) +++ csw/mgar/pkg/facter/trunk/Makefile 2011-07-08 11:46:56 UTC (rev 15006) @@ -26,7 +26,7 @@ RUNTIME_DEP_PKGS = CSWruby18 BUILD_DEP_PKGS = $(RUNTIME_DEP_PKGS) -#PATCHFILES += 0001-Patch-to-prtconf-run-in-memory.rb.patch +PATCHFILES += 0001-puppetlabs-ticket-7038-prtdiag-fixes.patch ARCHALL = 1 CONFIGURE_SCRIPTS = Deleted: csw/mgar/pkg/facter/trunk/files/0001-Patch-to-prtconf-run-in-memory.rb.patch =================================================================== --- csw/mgar/pkg/facter/trunk/files/0001-Patch-to-prtconf-run-in-memory.rb.patch 2011-07-08 11:16:16 UTC (rev 15005) +++ csw/mgar/pkg/facter/trunk/files/0001-Patch-to-prtconf-run-in-memory.rb.patch 2011-07-08 11:46:56 UTC (rev 15006) @@ -1,25 +0,0 @@ -From a99e009edb9c5b948947466a9247a820ea907cb4 Mon Sep 17 00:00:00 2001 -From: Mark Phillips <none@none> -Date: Tue, 31 May 2011 19:35:05 +0200 -Subject: [PATCH] Patch to prtconf run in memory.rb - ---- - lib/facter/memory.rb | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/lib/facter/memory.rb b/lib/facter/memory.rb -index 9dd2e29..fdb3099 100644 ---- a/lib/facter/memory.rb -+++ b/lib/facter/memory.rb -@@ -172,7 +172,7 @@ if Facter.value(:kernel) == "SunOS" - end - - # Total memory size available from prtconf -- pconf = Facter::Util::Resolution.exec('/usr/sbin/prtconf') -+ pconf = Facter::Util::Resolution.exec('/usr/sbin/prtconf 2>/dev/null') - phymem = "" - pconf.each do |line| - if line =~ /^Memory size:\s+(\d+) Megabytes/ --- -1.7.3.2 - Added: csw/mgar/pkg/facter/trunk/files/0001-puppetlabs-ticket-7038-prtdiag-fixes.patch =================================================================== --- csw/mgar/pkg/facter/trunk/files/0001-puppetlabs-ticket-7038-prtdiag-fixes.patch (rev 0) +++ csw/mgar/pkg/facter/trunk/files/0001-puppetlabs-ticket-7038-prtdiag-fixes.patch 2011-07-08 11:46:56 UTC (rev 15006) @@ -0,0 +1,1017 @@ +From bcdc9d013a4f680500d702d3232feaed1a53942b Mon Sep 17 00:00:00 2001 +From: Mark Phillips <none@none> +Date: Fri, 8 Jul 2011 13:43:48 +0200 +Subject: [PATCH] puppetlabs ticket 7038 prtdiag fixes + +--- + CHANGELOG | 39 ------ + ...ratingsystem_detection_after_clear_on_ubuntu.rb | 18 +++ + .../ticket_7039_facter_multiple_facts_one_file.rb | 31 +++++ + autotest/discover.rb | 9 ++ + autotest/facter_rspec.rb | 45 +++++++ + autotest/rspec.rb | 74 +++++++++++ + conf/redhat/facter.spec | 5 +- + conf/solaris/pkginfo | 2 +- + documentation/custom.page | 22 +++ + documentation/index.page | 19 +++ + ext/facter-diff | 74 +++++++++++ + lib/facter.rb | 2 +- + lib/facter/util/manufacturer.rb | 7 +- + lib/facter/util/prtdiag.rb | 29 ++++ + man/man8/facter.8 | 54 ++++++++ + .../manufacturer/solaris_sunfire_v120_prtdiag | 33 +++++ + spec/fixtures/manufacturer/solaris_t5220_prtdiag | 136 ++++++++++++++++++++ + spec/unit/util/manufacturer_spec.rb | 7 - + spec/unit/util/prtdiag_spec.rb | 56 ++++++++ + tasks/rake/changlog.rake | 15 ++ + tasks/rake/ci.rake | 16 +++ + tasks/rake/dailybuild.rake | 9 ++ + tasks/rake/mail_patches.rake | 48 +++++++ + tasks/rake/metrics.rake | 6 + + tasks/rake/sign.rake | 14 ++ + 25 files changed, 715 insertions(+), 55 deletions(-) + create mode 100644 acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb + create mode 100644 acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb + create mode 100644 autotest/discover.rb + create mode 100644 autotest/facter_rspec.rb + create mode 100644 autotest/rspec.rb + create mode 100644 documentation/custom.page + create mode 100644 documentation/index.page + create mode 100755 ext/facter-diff + create mode 100644 lib/facter/util/prtdiag.rb + create mode 100644 man/man8/facter.8 + create mode 100644 spec/fixtures/manufacturer/solaris_sunfire_v120_prtdiag + create mode 100644 spec/fixtures/manufacturer/solaris_t5220_prtdiag + create mode 100755 spec/unit/util/prtdiag_spec.rb + create mode 100644 tasks/rake/changlog.rake + create mode 100644 tasks/rake/ci.rake + create mode 100644 tasks/rake/dailybuild.rake + create mode 100644 tasks/rake/mail_patches.rake + create mode 100644 tasks/rake/metrics.rake + create mode 100644 tasks/rake/sign.rake + +diff --git a/CHANGELOG b/CHANGELOG +index d43323e..cbb40bc 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -1,42 +1,3 @@ +-1.6.0 +-=== +-9404a7a (#7670) Add an acceptance test +-0c23845 maint: Fix spelling of acceptance directory +-926e912 (#7670) Stop preloading all facts in the application +-2255abe (#7670) Never fail to find a fact that is present +-8002c24 (#7507) Fix 1.9.2 test failure +-0635822 Removed inappropriately uncredited Ohai method from ec2 fact +-6b1cd16 (#6614) Update ipaddress6 fact to work with Ruby 1.9 +-21fe217 (#6612) Changed uptime spec to be endian agnostic +-19f96b5 (#6728) Facter improperly detects openvzve on CloudLinux systems +-5b10173 (#5135) Fix faulty logic in physicalprocessorcount +-53cd946 Ensures that ARP facts are returned only on EC2 hosts +-bfa038d Fixed #6974 - Moved to Apache 2.0 license +-d56bca8 refactor the mechanism for allowing for resolution ordering to be influenced +-9f4c5c6 (#6740) facter doesn't always respect facts in environment variables +-7441b32 Partial fix for #6971 - Fix for virtual tests +-7f3e89d (#2714) Fixed faulty test +-bfc16f6 (#2714) Added timeout to prtdiag resulution +-c2ff833 (#5135) Refactored physicalprocessorcount +-0c4a98b Re-factor. Do not use pure-Ruby file reading against "/proc/cpuinfo" and possibly any entry under "/sys" from the sysfs file system. +-cb52b06 Fix. Using sysfs file system entries to count the number of physical CPUs. Fall-back to "/proc/cpuinfo" included for backward-compatibility with legacy systems. +-3efa9d7 (#3856) Add virtualbox detection via lspci (graphics card), dmidecode, and prtdiag for Solaris and corresponding tests. Darwin case is not handled yet. +-7c80172 (#6883) Update Facter install.rb to be slightly more informative. +-d31e3f9 (#5394) Document each Facter fact. +-af4947c (#6862) Add a default subject for the mail_patches rake task +-d6967a0 (#6613) Switch solaris macaddress fact to netstat +-e056218 (#6817) Fix for Ruby 1.9 by calling .each_line on a string +-861c2b2 maint: cleanup whitespace +-f6c9927 (#6719) Corrected faulty logic in bugfix +-e42e57c (#3856) Add virtualbox detection via lspci (graphics card), dmidecode, and prtdiag for Solaris and corresponding tests. Darwin case is not handled yet. +-0b5b546 (#6883) Update Facter install.rb to be slightly more informative. +-7c08270 (#5394) Document each Facter fact. +-06eb3f5 (#6883) Update Facter install.rb to be slightly more informative. +-1063753 (#6862) Add a default subject for the mail_patches rake task +-56b5f10 (#6613) Switch solaris macaddress fact to netstat +-fd4f31c (#6817) Fix for Ruby 1.9 by calling .each_line on a string +-72996ff maint: cleanup whitespace +- + 1.5.9 + ===== + 4de8b20 Updated CHANGELOG for 1.5.9rc6 +diff --git a/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb b/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb +new file mode 100644 +index 0000000..3c7c4d9 +--- /dev/null ++++ b/acceptance/tests/operatingsystem_detection_after_clear_on_ubuntu.rb +@@ -0,0 +1,18 @@ ++test_name "#7670: Facter should properly detect operatingsystem on Ubuntu after a clear" ++ ++script_contents = <<-OS_DETECT ++ require 'facter' ++ Facter['operatingsystem'].value ++ Facter.clear ++ exit Facter['operatingsystem'].value == 'Ubuntu' ++OS_DETECT ++ ++script_name = "/tmp/facter_os_detection_test_#{$$}" ++ ++agents.each do |agent| ++ next unless agent['platform'].include? 'ubuntu' ++ ++ create_remote_file(agent, script_name, script_contents) ++ ++ on(agent, "ruby #{script_name}") ++end +diff --git a/acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb b/acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb +new file mode 100644 +index 0000000..fb78628 +--- /dev/null ++++ b/acceptance/tests/ticket_7039_facter_multiple_facts_one_file.rb +@@ -0,0 +1,31 @@ ++test_name "#7039: Facter having issue handling multiple facts in a single file" ++ ++fact_file= %q{ ++Facter.add(:test_fact1) do ++ setcode do ++ "test fact 1" ++ end ++end ++ ++Facter.add(:test_fact2) do ++ setcode do ++ "test fact 2" ++ end ++end ++} ++ ++agent1=agents.first ++step "Agent: Create fact file with multiple facts" ++create_remote_file(agent1, '/tmp/test_facts.rb', fact_file ) ++ ++step "Agent: Verify test_fact1 from /tmp/test_facts.rb" ++on(agent1, "export FACTERLIB=/tmp && facter --puppet test_fact1") do ++ fail_test "Fact 1 not returned by facter --puppet test_fact1" unless ++ stdout.include? 'test fact 1' ++end ++ ++step "Agent: Verify test_fact2 from /tmp/test_facts.rb" ++on(agent1, "export FACTERLIB=/tmp && facter --puppet test_fact2") do ++ fail_test "Fact 1 not returned by facter --puppet test_fact2" unless ++ stdout.include? 'test fact 2' ++end +diff --git a/autotest/discover.rb b/autotest/discover.rb +new file mode 100644 +index 0000000..030d07f +--- /dev/null ++++ b/autotest/discover.rb +@@ -0,0 +1,9 @@ ++require 'autotest' ++ ++Autotest.add_discovery do ++ "rspec" ++end ++ ++Autotest.add_discovery do ++ "facter" ++end +diff --git a/autotest/facter_rspec.rb b/autotest/facter_rspec.rb +new file mode 100644 +index 0000000..90e646d +--- /dev/null ++++ b/autotest/facter_rspec.rb +@@ -0,0 +1,45 @@ ++require 'autotest' ++require 'autotest/rspec' ++ ++Autotest.add_hook :initialize do |at| ++ at.clear_mappings ++ ++ # the libraries under lib/facter ++ at.add_mapping(%r%^lib/facter/(.*)\.rb$%) { |filename, m| ++ at.files_matching %r!spec/(unit|integration)/#{m[1]}.rb! ++ } ++ ++ # the actual spec files themselves ++ at.add_mapping(%r%^spec/(unit|integration)/.*\.rb$%) { |filename, _| ++ filename ++ } ++ ++ # force a complete re-run for all of these: ++ ++ # main facter lib ++ at.add_mapping(%r!^lib/facter\.rb$!) { |filename, _| ++ at.files_matching %r!spec/(unit|integration)/.*\.rb! ++ } ++ ++ # the spec_helper ++ at.add_mapping(%r!^spec/spec_helper\.rb$!) { |filename, _| ++ at.files_matching %r!spec/(unit|integration)/.*\.rb! ++ } ++ ++ # the facter spec libraries ++ at.add_mapping(%r!^spec/lib/spec.*!) { |filename, _| ++ at.files_matching %r!spec/(unit|integration)/.*\.rb! ++ } ++ ++ # the monkey patches for rspec ++ at.add_mapping(%r!^spec/lib/monkey_patches/.*!) { |filename, _| ++ at.files_matching %r!spec/(unit|integration)/.*\.rb! ++ } ++end ++ ++class Autotest::FacterRspec < Autotest::Rspec ++ def spec_commands ++ ENV["AUTOTEST"] = "true" ++ ENV["PATH"].split(File::PATH_SEPARATOR).collect { |dir| File.join(dir, "spec") } ++ end ++end +diff --git a/autotest/rspec.rb b/autotest/rspec.rb +new file mode 100644 +index 0000000..e395dfe +--- /dev/null ++++ b/autotest/rspec.rb +@@ -0,0 +1,74 @@ ++require 'autotest' ++ ++Autotest.add_hook :initialize do |at| ++ at.clear_mappings ++ # watch out: Ruby bug (1.8.6): ++ # %r(/) != /\// ++ at.add_mapping(%r%^spec/.*\.rb$%) { |filename, _| ++ filename ++ } ++ at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m| ++ ["spec/#{m[1]}_spec.rb"] ++ } ++ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) { ++ at.files_matching %r{^spec/.*_spec\.rb$} ++ } ++end ++ ++class RspecCommandError < StandardError; end ++ ++class Autotest::Rspec < Autotest ++ ++ def initialize ++ super ++ ++ self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m ++ self.completed_re = /\Z/ # FIX: some sort of summary line at the end? ++ end ++ ++ def consolidate_failures(failed) ++ filters = Hash.new { |h,k| h[k] = [] } ++ failed.each do |spec, failed_trace| ++ if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } then ++ filters[f] << spec ++ break ++ end ++ end ++ return filters ++ end ++ ++ def make_test_cmd(files_to_test) ++ return "#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}" ++ end ++ ++ def add_options_if_present ++ File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : "" ++ end ++ ++ # Finds the proper spec command to use. Precendence is set in the ++ # lazily-evaluated method spec_commands. Alias + Override that in ++ # ~/.autotest to provide a different spec command then the default ++ # paths provided. ++ def spec_command(separator=File::ALT_SEPARATOR) ++ unless defined? @spec_command then ++ @spec_command = spec_commands.find { |cmd| File.exists? cmd } ++ ++ raise RspecCommandError, "No spec command could be found!" unless @spec_command ++ ++ @spec_command.gsub! File::SEPARATOR, separator if separator ++ end ++ @spec_command ++ end ++ ++ # Autotest will look for spec commands in the following ++ # locations, in this order: ++ # ++ # * bin/spec ++ # * default spec bin/loader installed in Rubygems ++ def spec_commands ++ [ ++ File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')), ++ File.join(Config::CONFIG['bindir'], 'spec') ++ ] ++ end ++end +diff --git a/conf/redhat/facter.spec b/conf/redhat/facter.spec +index e78b655..99a6505 100644 +--- a/conf/redhat/facter.spec ++++ b/conf/redhat/facter.spec +@@ -5,7 +5,7 @@ + + Summary: Ruby module for collecting simple facts about a host operating system + Name: facter +-Version: 1.6.0 ++Version: 1.5.8 + Release: 1%{?dist} + License: Apache 2.0 + Group: System Environment/Base +@@ -52,9 +52,6 @@ rm -rf %{buildroot} + + + %changelog +-* Thu Jun 23 2011 Michael Stahnke <stah...@puppetlabs.com> - 1.6.0-1 +-- Update to 1.6.0 +- + * Sat Aug 28 2010 Todd Zullinger <t...@pobox.com> - 1.5.8-1 + - Update to 1.5.8 + +diff --git a/conf/solaris/pkginfo b/conf/solaris/pkginfo +index 262a436..968a459 100644 +--- a/conf/solaris/pkginfo ++++ b/conf/solaris/pkginfo +@@ -1,6 +1,6 @@ + PKG=CSWfacter + NAME=facter - System Fact Gatherer +-VERSION=1.6.0 ++VERSION=1.3.5 + CATEGORY=application + VENDOR=http://www.puppetlabs.com/puppet/related-projects/facter + HOTLINE=http://puppetlabs.com/cgi-bin/facter.cgi +diff --git a/documentation/custom.page b/documentation/custom.page +new file mode 100644 +index 0000000..0708a70 +--- /dev/null ++++ b/documentation/custom.page +@@ -0,0 +1,22 @@ ++--- ++inMenu: true ++directoryName: Custom Facts ++--- ++ ++Facter does everything it can to make adding custom facts easy. It will ++autoload any files it finds in a ``facter/`` directory in its search ++path, so you don't need to modify the package files. Also, Facter will ++search through your environment for any variables whose names start with ++'FACTER_' (case insensitive) and automatically add those facts. ++ ++As a simple example, here is how I publish my home directory to Puppet: ++ ++ Facter.add("home") do ++ setcode do ++ ENV['HOME'] ++ end ++ end ++ ++I have ~/lib/ruby in my $RUBYLIB environment variable, so I just created ++~/lib/ruby/facter and dropped the above code into a ``home.rb`` file ++within that directory. +diff --git a/documentation/index.page b/documentation/index.page +new file mode 100644 +index 0000000..c64938a +--- /dev/null ++++ b/documentation/index.page +@@ -0,0 +1,19 @@ ++--- ++inMenu: false ++directoryName: Facter ++--- ++ ++A cross-platform Ruby library for retrieving facts from operating systems. ++Supports multiple resolution mechanisms, any of which can be restricted to ++working only on certain operating systems or environments. Facter is especially ++useful for retrieving things like operating system names, IP addresses, MAC ++addresses, and SSH keys. ++ ++It is easy to extend Facter to include your own [custom facts](custom.html) or ++to include additional mechanisms for retrieving facts. ++ ++* [Downloads](/downloads/facter/) ++* [Bug Tracking](/cgi-bin/facter.cgi) ++* [API Documentation](/downloads/facter/apidocs/) ++ ++*$Id$* +diff --git a/ext/facter-diff b/ext/facter-diff +new file mode 100755 +index 0000000..6616318 +--- /dev/null ++++ b/ext/facter-diff +@@ -0,0 +1,74 @@ ++ ++#!/usr/bin/env sh ++# ++# Output the difference between a facter command run on two different versions ++# of facter. Uses unified diff format. ++ ++OPTIONS_SPEC="\ ++facter-diff [options] <rev1> <rev2> [fact]... ++ ++Example: ++ ++ ./ext/facter-diff 1.5.7 1.0.2 ++ ++-- ++h,help Display this help" ++ ++. "$(git --exec-path)/git-sh-setup" ++eval "$(echo "$OPTIONS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)" ++trap 'err=$?; cleanup; exit $err' 0 ++ ++cleanup() { ++ test $origin && git checkout -q "$origin" ++} ++ ++facter() { ++ ruby -Ilib bin/facter "$@" ++} ++ ++log_facter_run() { ++ local ref=$1 && shift ++ local tmpfile=$1 && shift ++ ++ git checkout -qf "$ref" || ++ die "fatal: unable to checkout $ref" ++ facter "$@" > $tmpfile ++} ++ ++verify_revision() { ++ git rev-parse --verify --quiet "$1" > /dev/null || ++ die "fatal: '$1' is not a valid revision" ++} ++ ++test $1 = "--" && shift # git rev-parse seems to leave the -- in ++test $# -eq 0 && usage ++ ++test $# -gt 1 || ++ die "fatal: must specify two revisions" ++ ++status=$(git status -s) ++test -z "$status" || ++ die "fatal: $0 cannot be used with a dirty working copy" ++ ++origin=$(git rev-parse --symbolic-full-name HEAD) ++test "$origin" = "HEAD" && ++ origin=$(git rev-parse HEAD) ++ ++test -x "bin/facter" || ++ die "fatal: $0 must be run from the project root" ++ ++ref1="$1" && shift ++ref2="$1" && shift ++ ++verify_revision $ref1 ++verify_revision $ref2 ++ ++tmpfile1="/tmp/$(basename $0).$$.1.tmp" ++tmpfile2="/tmp/$(basename $0).$$.2.tmp" ++ ++log_facter_run $ref1 $tmpfile1 $@ ++log_facter_run $ref2 $tmpfile2 $@ ++ ++git checkout -f "$origin" > /dev/null 2>&1 ++ ++diff --label "$ref1" --label "$ref2" -u $tmpfile1 $tmpfile2 +diff --git a/lib/facter.rb b/lib/facter.rb +index eed32f8..2073b84 100644 +--- a/lib/facter.rb ++++ b/lib/facter.rb +@@ -24,7 +24,7 @@ module Facter + include Comparable + include Enumerable + +- FACTERVERSION = '1.6.0' ++ FACTERVERSION = '1.5.9' + # = Facter + # Functions as a hash of 'facts' you might care about about your + # system, such as mac address, IP address, Video card, etc. +diff --git a/lib/facter/util/manufacturer.rb b/lib/facter/util/manufacturer.rb +index 8e9bde2..33389c9 100644 +--- a/lib/facter/util/manufacturer.rb ++++ b/lib/facter/util/manufacturer.rb +@@ -1,6 +1,8 @@ + # mamufacturer.rb + # Support methods for manufacturer specific facts + ++require 'facter/util/prtdiag' ++ + module Facter::Manufacturer + + def self.get_dmi_table() +@@ -62,11 +64,10 @@ module Facter::Manufacturer + end + + def self.prtdiag_sparc_find_system_info() +- # Parses prtdiag for a SPARC architecture string, won't work with Solaris x86 +- output = Facter::Util::Resolution.exec('/usr/sbin/prtdiag') + ++ # Parses prtdiag for a SPARC architecture string, won't work with Solaris x86 + # System Configuration: Sun Microsystems sun4u Sun SPARC Enterprise M3000 Server +- sysconfig = output.split("\n")[0] ++ sysconfig = Facter::Util::Prtdiag.system_configuration + if sysconfig =~ /^System Configuration:\s+(.+?)\s+(sun\d+\S+)\s+(.+)/ then + Facter.add('manufacturer') do + setcode do +diff --git a/lib/facter/util/prtdiag.rb b/lib/facter/util/prtdiag.rb +new file mode 100644 +index 0000000..5edce5b +--- /dev/null ++++ b/lib/facter/util/prtdiag.rb +@@ -0,0 +1,29 @@ ++# Module to safely query prtdiag ++# ++# prtdiag will fail if it is called on a non-solaris host, or if it is in a ++# zone, and it will hang if a service that prtdiag relies on is crashed. ++# This should abstract safely retrieving information from prtdiag ++ ++require 'timeout' ++ ++module Facter::Util::Prtdiag ++ ++ def self.system_configuration ++ begin ++ Timeout.timeout(6) do ++ output = Facter::Util::Resolution.exec('/usr/sbin/prtdiag') ++ if output ++ output.each_line do |pd| ++ return pd if pd =~ /System Configuration/ ++ end ++ end ++ end ++ rescue Timeout::Error => detail ++ warn "Timed out while calling prtdiag" ++ # This call avoids zombies -- basically, create a thread that will ++ # dezombify all of the child processes that we're ignoring because ++ # of the timeout. ++ Thread.new { Process.waitall } ++ end ++ end ++end +diff --git a/man/man8/facter.8 b/man/man8/facter.8 +new file mode 100644 +index 0000000..ff24b89 +--- /dev/null ++++ b/man/man8/facter.8 +@@ -0,0 +1,54 @@ ++.TH "" "" "" ++.SH NAME ++ \- ++.\" Man page generated from reStructeredText. ++. ++.SH SYNOPSIS ++.sp ++Collect and display facts about the system. ++.SH USAGE ++.INDENT 0.0 ++.INDENT 3.5 ++.sp ++facter [\-d|\-\-debug] [\-h|\-\-help] [\-p|\-\-puppet] [\-v|\-\-version] [\-y|\-\-yaml] [fact] [fact] [...] ++.UNINDENT ++.UNINDENT ++.SH DESCRIPTION ++.sp ++Collect and display facts about the current system. The library behind ++Facter is easy to expand, making Facter an easy way to collect ++information about a system from within the shell or within Ruby. ++.sp ++If no facts are specifically asked for, then all facts will be returned. ++.SH OPTIONS ++.sp ++debug: Enable debugging. ++.sp ++help: Print this help message ++.INDENT 0.0 ++.TP ++.B puppet: Load the Puppet libraries, thus allowing Facter to load ++. ++Puppet\-specific facts. ++.UNINDENT ++.sp ++version: Print the version and exit. ++.sp ++yaml: Emit facts in YAML format. ++.SH EXAMPLE ++.INDENT 0.0 ++.INDENT 3.5 ++.sp ++facter kernel ++.UNINDENT ++.UNINDENT ++.SH AUTHOR ++.sp ++Luke Kanies ++.SH COPYRIGHT ++.sp ++Copyright (c) 2006 Reductive Labs, LLC Licensed under the GNU Public ++License ++.\" Generated by docutils manpage writer. ++.\" ++. +diff --git a/spec/fixtures/manufacturer/solaris_sunfire_v120_prtdiag b/spec/fixtures/manufacturer/solaris_sunfire_v120_prtdiag +new file mode 100644 +index 0000000..e9949b5 +--- /dev/null ++++ b/spec/fixtures/manufacturer/solaris_sunfire_v120_prtdiag +@@ -0,0 +1,33 @@ ++System Configuration: Sun Microsystems sun4u Sun Fire V120 (UltraSPARC-IIe 648MHz) ++System clock frequency: 100 MHz ++Memory size: 2048 Megabytes ++ ++========================= CPUs ========================= ++ ++ Run Ecache CPU CPU ++Brd CPU Module MHz MB Impl. Mask ++--- --- ------- ----- ------ ------ ---- ++ 0 0 0 648 0.5 13 3.3 ++ ++ ++========================= IO Cards ========================= ++ ++ Bus# Freq ++Brd Type MHz Slot Name Model ++--- ---- ---- ---- -------------------------------- ---------------------- ++ 0 PCI-1 33 12 ebus ++ 0 PCI-1 33 3 pmu-pci10b9,7101 ++ 0 PCI-1 33 3 lomp ++ 0 PCI-1 33 7 isa ++ 0 PCI-1 33 12 network-pci108e,1101 SUNW,pci-eri ++ 0 PCI-1 33 12 usb-pci108e,1103.1 ++ 0 PCI-1 33 13 ide-pci10b9,5229 ++ 0 PCI-1 33 5 network-pci108e,1101 SUNW,pci-eri ++ 0 PCI-1 33 5 usb-pci108e,1103.1 ++ 0 PCI-2 33 8 scsi-glm Symbios,53C896 ++ 0 PCI-2 33 8 scsi-glm Symbios,53C896 ++ 0 PCI-2 33 5 network-pci108e,2bad SUNW,pci-gem ++ ++ ++No failures found in System ++=========================== +diff --git a/spec/fixtures/manufacturer/solaris_t5220_prtdiag b/spec/fixtures/manufacturer/solaris_t5220_prtdiag +new file mode 100644 +index 0000000..91a428d +--- /dev/null ++++ b/spec/fixtures/manufacturer/solaris_t5220_prtdiag +@@ -0,0 +1,136 @@ ++System Configuration: Sun Microsystems sun4v SPARC Enterprise T5220 ++Memory size: 32640 Megabytes ++ ++================================ Virtual CPUs ================================ ++ ++ ++CPU ID Frequency Implementation Status ++------ --------- ---------------------- ------- ++0 1165 MHz SUNW,UltraSPARC-T2 on-line ++1 1165 MHz SUNW,UltraSPARC-T2 on-line ++2 1165 MHz SUNW,UltraSPARC-T2 on-line ++3 1165 MHz SUNW,UltraSPARC-T2 on-line ++4 1165 MHz SUNW,UltraSPARC-T2 on-line ++5 1165 MHz SUNW,UltraSPARC-T2 on-line ++6 1165 MHz SUNW,UltraSPARC-T2 on-line ++7 1165 MHz SUNW,UltraSPARC-T2 on-line ++8 1165 MHz SUNW,UltraSPARC-T2 on-line ++9 1165 MHz SUNW,UltraSPARC-T2 on-line ++10 1165 MHz SUNW,UltraSPARC-T2 on-line ++11 1165 MHz SUNW,UltraSPARC-T2 on-line ++12 1165 MHz SUNW,UltraSPARC-T2 on-line ++13 1165 MHz SUNW,UltraSPARC-T2 on-line ++14 1165 MHz SUNW,UltraSPARC-T2 on-line ++15 1165 MHz SUNW,UltraSPARC-T2 on-line ++16 1165 MHz SUNW,UltraSPARC-T2 on-line ++17 1165 MHz SUNW,UltraSPARC-T2 on-line ++18 1165 MHz SUNW,UltraSPARC-T2 on-line ++19 1165 MHz SUNW,UltraSPARC-T2 on-line ++20 1165 MHz SUNW,UltraSPARC-T2 on-line ++21 1165 MHz SUNW,UltraSPARC-T2 on-line ++22 1165 MHz SUNW,UltraSPARC-T2 on-line ++23 1165 MHz SUNW,UltraSPARC-T2 on-line ++24 1165 MHz SUNW,UltraSPARC-T2 on-line ++25 1165 MHz SUNW,UltraSPARC-T2 on-line ++26 1165 MHz SUNW,UltraSPARC-T2 on-line ++27 1165 MHz SUNW,UltraSPARC-T2 on-line ++28 1165 MHz SUNW,UltraSPARC-T2 on-line ++29 1165 MHz SUNW,UltraSPARC-T2 on-line ++30 1165 MHz SUNW,UltraSPARC-T2 on-line ++31 1165 MHz SUNW,UltraSPARC-T2 on-line ++32 1165 MHz SUNW,UltraSPARC-T2 on-line ++33 1165 MHz SUNW,UltraSPARC-T2 on-line ++34 1165 MHz SUNW,UltraSPARC-T2 on-line ++35 1165 MHz SUNW,UltraSPARC-T2 on-line ++36 1165 MHz SUNW,UltraSPARC-T2 on-line ++37 1165 MHz SUNW,UltraSPARC-T2 on-line ++38 1165 MHz SUNW,UltraSPARC-T2 on-line ++39 1165 MHz SUNW,UltraSPARC-T2 on-line ++40 1165 MHz SUNW,UltraSPARC-T2 on-line ++41 1165 MHz SUNW,UltraSPARC-T2 on-line ++42 1165 MHz SUNW,UltraSPARC-T2 on-line ++43 1165 MHz SUNW,UltraSPARC-T2 on-line ++44 1165 MHz SUNW,UltraSPARC-T2 on-line ++45 1165 MHz SUNW,UltraSPARC-T2 on-line ++46 1165 MHz SUNW,UltraSPARC-T2 on-line ++47 1165 MHz SUNW,UltraSPARC-T2 on-line ++48 1165 MHz SUNW,UltraSPARC-T2 on-line ++49 1165 MHz SUNW,UltraSPARC-T2 on-line ++50 1165 MHz SUNW,UltraSPARC-T2 on-line ++51 1165 MHz SUNW,UltraSPARC-T2 on-line ++52 1165 MHz SUNW,UltraSPARC-T2 on-line ++53 1165 MHz SUNW,UltraSPARC-T2 on-line ++54 1165 MHz SUNW,UltraSPARC-T2 on-line ++55 1165 MHz SUNW,UltraSPARC-T2 on-line ++56 1165 MHz SUNW,UltraSPARC-T2 on-line ++57 1165 MHz SUNW,UltraSPARC-T2 on-line ++58 1165 MHz SUNW,UltraSPARC-T2 on-line ++59 1165 MHz SUNW,UltraSPARC-T2 on-line ++60 1165 MHz SUNW,UltraSPARC-T2 on-line ++61 1165 MHz SUNW,UltraSPARC-T2 on-line ++62 1165 MHz SUNW,UltraSPARC-T2 on-line ++63 1165 MHz SUNW,UltraSPARC-T2 on-line ++ ++======================= Physical Memory Configuration ======================== ++Segment Table: ++-------------------------------------------------------------- ++Base Segment Interleave Bank Contains ++Address Size Factor Size Modules ++-------------------------------------------------------------- ++0x0 32 GB 8 4 GB MB/CMP0/BR0/CH0/D0 ++ MB/CMP0/BR0/CH1/D0 ++ 4 GB MB/CMP0/BR0/CH0/D1 ++ MB/CMP0/BR0/CH1/D1 ++ 4 GB MB/CMP0/BR1/CH0/D0 ++ MB/CMP0/BR1/CH1/D0 ++ 4 GB MB/CMP0/BR1/CH0/D1 ++ MB/CMP0/BR1/CH1/D1 ++ 4 GB MB/CMP0/BR2/CH0/D0 ++ MB/CMP0/BR2/CH1/D0 ++ 4 GB MB/CMP0/BR2/CH0/D1 ++ MB/CMP0/BR2/CH1/D1 ++ 4 GB MB/CMP0/BR3/CH0/D0 ++ MB/CMP0/BR3/CH1/D0 ++ 4 GB MB/CMP0/BR3/CH0/D1 ++ MB/CMP0/BR3/CH1/D1 ++ ++ ++================================ IO Devices ================================ ++Slot + Bus Name + Model ++Status Type Path ++---------------------------------------------------------------------------- ++MB/NET0 PCIE network-pciex8086,105e ++ /pci@0/pci@0/pci@1/pci@0/pci@2/network@0 ++MB/NET1 PCIE network-pciex8086,105e ++ /pci@0/pci@0/pci@1/pci@0/pci@2/network@0,1 ++MB/NET2 PCIE network-pciex8086,105e ++ /pci@0/pci@0/pci@1/pci@0/pci@3/network@0 ++MB/NET3 PCIE network-pciex8086,105e ++ /pci@0/pci@0/pci@1/pci@0/pci@3/network@0,1 ++MB/SASHBA PCIE scsi-pciex1000,58 LSI,1068E ++ /pci@0/pci@0/pci@2/scsi@0 ++MB PCIX usb-pciclass,0c0310 ++ /pci@0/pci@0/pci@1/pci@0/pci@1/pci@0/usb@0 ++MB PCIX usb-pciclass,0c0310 ++ /pci@0/pci@0/pci@1/pci@0/pci@1/pci@0/usb@0,1 ++MB PCIX usb-pciclass,0c0320 ++ /pci@0/pci@0/pci@1/pci@0/pci@1/pci@0/usb@0,2 ++ ++============================ Environmental Status ============================ ++Fan sensors: ++All fan sensors are OK. ++ ++Temperature sensors: ++All temperature sensors are OK. ++ ++Current sensors: ++All current sensors are OK. ++ ++Voltage sensors: ++All voltage sensors are OK. ++ ++Voltage indicators: ++All voltage indicators are OK. ++ ++============================ FRU Status ============================ ++All FRUs are enabled. +diff --git a/spec/unit/util/manufacturer_spec.rb b/spec/unit/util/manufacturer_spec.rb +index c3b372e..77644af 100644 +--- a/spec/unit/util/manufacturer_spec.rb ++++ b/spec/unit/util/manufacturer_spec.rb +@@ -16,13 +16,6 @@ describe Facter::Manufacturer do + Facter::Manufacturer.get_dmi_table().should be_nil + end + +- it "should parse prtdiag output" do +- Facter::Util::Resolution.stubs(:exec).returns("System Configuration: Sun Microsystems sun4u Sun SPARC Enterprise M3000 Server") +- Facter::Manufacturer.prtdiag_sparc_find_system_info() +- Facter.value(:manufacturer).should == "Sun Microsystems" +- Facter.value(:productname).should == "Sun SPARC Enterprise M3000 Server" +- end +- + it "should strip white space on dmi output with spaces" do + sample_output_file = File.dirname(__FILE__) + "/../data/linux_dmidecode_with_spaces" + dmidecode_output = File.new(sample_output_file).read() +diff --git a/spec/unit/util/prtdiag_spec.rb b/spec/unit/util/prtdiag_spec.rb +new file mode 100755 +index 0000000..3301c04 +--- /dev/null ++++ b/spec/unit/util/prtdiag_spec.rb +@@ -0,0 +1,56 @@ ++#!/usr/bin/env ruby ++require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper') ++ ++require 'facter/util/prtdiag' ++ ++def fixture_data(fixture_name) ++ fixture_path = File.join(SPECDIR, 'fixtures', 'manufacturer') ++ File.read(File.join(fixture_path, fixture_name)) ++end ++ ++describe Facter::Util::Prtdiag, 'prtdiag' do ++ describe 'on a solaris sunfire v120' do ++ before do ++ Facter::Util::Prtdiag.expects("system_configuration").returns(fixture_data('solaris_sunfire_v120_prtdiag')) ++ Facter::Manufacturer.prtdiag_sparc_find_system_info() ++ end ++ ++ it 'sets the correct manufacturer fact' do ++ Facter.value(:manufacturer).should == "Sun Microsystems" ++ end ++ ++ it 'sets the correct productname fact' do ++ Facter.value(:productname).should == "Sun Fire V120 (UltraSPARC-IIe 648MHz)" ++ end ++ end ++ ++ describe 'on a solaris t5520' do ++ before do ++ Facter::Util::Prtdiag.expects("system_configuration").returns(fixture_data('solaris_t5220_prtdiag')) ++ Facter::Manufacturer.prtdiag_sparc_find_system_info() ++ end ++ ++ it 'sets the correct manufacturer fact' do ++ Facter.value(:manufacturer).should == "Sun Microsystems" ++ end ++ ++ it 'sets the correct productname fact' do ++ Facter.value(:productname).should == "SPARC Enterprise T5220" ++ end ++ end ++ ++ describe 'on an unknown SunOS sparc system' do ++ before do ++ Facter::Util::Prtdiag.expects("system_configuration").returns(nil) ++ Facter::Manufacturer.prtdiag_sparc_find_system_info() ++ end ++ ++ it 'clears the manufacturer fact' do ++ Facter.value(:manufacturer).should be_nil ++ end ++ ++ it 'clears the productname fact' do ++ Facter.value(:productname).should be_nil ++ end ++ end ++end +diff --git a/tasks/rake/changlog.rake b/tasks/rake/changlog.rake +new file mode 100644 +index 0000000..0c2f1d2 +--- /dev/null ++++ b/tasks/rake/changlog.rake +@@ -0,0 +1,15 @@ ++desc "Create a ChangeLog based on git commits." ++task :changelog do ++ begin ++ gitc = %x{which git-changelog} ++ rescue ++ puts "This task needs the git-changelog binary - http://github.com/ReinH/git-changelog" ++ end ++ ++ CHANGELOG_DIR = "#{Dir.pwd}" ++ mkdir(CHANGELOG_DIR) unless File.directory?(CHANGELOG_DIR) ++ change_body = `git-changelog --limit=99999` ++ File.open(File.join(CHANGELOG_DIR, "CHANGELOG"), 'w') do |f| ++ f << change_body ++ end ++end +diff --git a/tasks/rake/ci.rake b/tasks/rake/ci.rake +new file mode 100644 +index 0000000..e0e5aed +--- /dev/null ++++ b/tasks/rake/ci.rake +@@ -0,0 +1,16 @@ ++desc "Prep CI RSpec tests" ++task :ci_prep do ++ require 'rubygems' ++ begin ++ gem 'ci_reporter' ++ require 'ci/reporter/rake/rspec' ++ require 'ci/reporter/rake/test_unit' ++ ENV['CI_REPORTS'] = 'results' ++ rescue LoadError ++ puts 'Missing ci_reporter gem. You must have the ci_reporter gem installed to run the CI spec tests' ++ end ++end ++ ++desc "Run the CI RSpec tests" ++task :ci_spec => [:ci_prep, 'ci:setup:rspec', :spec] do ++end +diff --git a/tasks/rake/dailybuild.rake b/tasks/rake/dailybuild.rake +new file mode 100644 +index 0000000..709bd48 +--- /dev/null ++++ b/tasks/rake/dailybuild.rake +@@ -0,0 +1,9 @@ ++desc "Create a Facter daily build" ++task :daily => :changelog do ++ version = "facter" + "-" + Time.now.localtime.strftime("%Y%m%d") ++ sh "git archive --format=tar --prefix=#{version}/ HEAD^{tree} >#{version}.tar" ++ sh "pax -waf #{version}.tar -s ':^:#{version}/:' ChangeLog" ++ sh "rm ChangeLog" ++ sh "gzip -f -9 #{version}.tar" ++end ++ +diff --git a/tasks/rake/mail_patches.rake b/tasks/rake/mail_patches.rake +new file mode 100644 +index 0000000..1346faa +--- /dev/null ++++ b/tasks/rake/mail_patches.rake +@@ -0,0 +1,48 @@ ++desc "Send patch information to the puppet-dev list" ++task :mail_patches do ++ if Dir.glob("00*.patch").length > 0 ++ raise "Patches already exist matching '00*.patch'; clean up first" ++ end ++ ++ unless %x{git status} =~ /On branch (.+)/ ++ raise "Could not get branch from 'git status'" ++ end ++ branch = $1 ++ ++ unless branch =~ %r{^([^\/]+)/([^\/]+)/([^\/]+)$} ++ raise "Branch name does not follow <type>/<parent>/<name> model; cannot autodetect parent branch" ++ end ++ ++ type, parent, name = $1, $2, $3 ++ ++ # Create all of the patches ++ sh "git format-patch -C -M -s -n --subject-prefix='PATCH/facter' #{parent}..HEAD" ++ ++ # Add info to the patches ++ additional_info = "Local-branch: #{branch}\n" ++ files = Dir.glob("00*.patch") ++ files.each do |file| ++ contents = File.read(file) ++ contents.sub!(/^---\n/, "---\n#{additional_info}") ++ File.open(file, 'w') do |file_handle| ++ file_handle.print contents ++ end ++ end ++ ++ # And then mail them out. ++ ++ # If we've got more than one patch, add --compose ++ if files.length > 1 ++ compose = "--compose" ++ subject = %Q{--subject "#{type} #{name} against #{parent}"} ++ else ++ compose = "" ++ subject = "" ++ end ++ ++ # Now send the mail. ++ sh "git send-email #{compose} #{subject} --no-signed-off-by-cc --suppress-from --to puppet-...@googlegroups.com 00*.patch" ++ ++ # Finally, clean up the patches ++ sh "rm 00*.patch" ++end +diff --git a/tasks/rake/metrics.rake b/tasks/rake/metrics.rake +new file mode 100644 +index 0000000..63af552 +--- /dev/null ++++ b/tasks/rake/metrics.rake +@@ -0,0 +1,6 @@ ++begin ++ require 'metric_fu' ++rescue LoadError ++ # Metric-fu not installed ++ # http://metric-fu.rubyforge.org/ ++end +diff --git a/tasks/rake/sign.rake b/tasks/rake/sign.rake +new file mode 100644 +index 0000000..f0e9d83 +--- /dev/null ++++ b/tasks/rake/sign.rake +@@ -0,0 +1,14 @@ ++desc "Sign the package with the Puppet Labs release key" ++task :sign_packages do ++ ++version = Facter::FACTERVERSION ++ ++# Sign package ++ ++sh "gpg --homedir $HOME/pl_release_key --detach-sign --output pkg/facter-#{version}.tar.gz.sign --armor pkg/facter-#{version}.tar.gz" ++ ++# Sign gem ++ ++sh "gpg --homedir $HOME/pl_release_key --detach-sign --output pkg/facter-#{version}.gem.sign --armor pkg/facter-#{version}.gem" ++ ++end +-- +1.7.6 + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel