Facter.add(:factname) do
config :fact => value
desc "This describes the fact"
end
The resulting descriptions are displayed:
$ facter --desc
Or:
$ facter -D
This is purely experimental - smarter people
than I can probably come up with a better way
of doing this.
I've documented the id fact as an example.
Signed-off-by: James Turnbull <[email protected]>
---
Local-branch: tickets/master/5394
bin/facter | 3 +++
lib/facter.rb | 29 +++++++++++++++++++++++++++--
lib/facter/application.rb | 1 +
lib/facter/id.rb | 2 ++
lib/facter/util/resolution.rb | 8 ++++++++
spec/unit/facter_spec.rb | 27 +++++++++++++++++++++++++++
spec/unit/util/resolution_spec.rb | 6 +++++-
7 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/bin/facter b/bin/facter
index 622d72e..f709787 100755
--- a/bin/facter
+++ b/bin/facter
@@ -42,6 +42,9 @@
# timing::
# Enable timing.
#
+# desc::
+# Enable fact descriptions
+#
# = Example
#
# facter kernel
diff --git a/lib/facter.rb b/lib/facter.rb
index f48138a..97fe173 100644
--- a/lib/facter.rb
+++ b/lib/facter.rb
@@ -49,6 +49,7 @@ module Facter
RESET = " [0m"
@@debug = 0
@@timing = 0
+ @@desc = 0
# module methods
@@ -87,8 +88,15 @@ module Facter
@@timing != 0
end
- # Return a fact object by name. If you use this, you still have to call
- # 'value' on it to retrieve the actual value.
+ # show the description
+ def self.show_desc(desc)
+ puts "#{GREEN}#{desc}#{RESET}" if desc and Facter.desc?
+ end
+
+ def self.desc?
+ @@desc != 0
+ end
+
def self.[](name)
collection.fact(name)
end
@@ -204,6 +212,23 @@ module Facter
end
end
+ # Set desc on or off.
+ def self.desc(bit)
+ if bit
+ case bit
+ when TrueClass; @@desc = 1
+ when Fixnum
+ if bit > 0
+ @@desc = 1
+ else
+ @@desc = 0
+ end
+ end
+ else
+ @@desc = 0
+ end
+ end
+
def self.warn(msg)
if Facter.debugging? and msg and not msg.empty?
msg = [msg] unless msg.respond_to? :each
diff --git a/lib/facter/application.rb b/lib/facter/application.rb
index 6b351b1..8d63f78 100644
--- a/lib/facter/application.rb
+++ b/lib/facter/application.rb
@@ -74,6 +74,7 @@ module Facter
opts.on( "--trace") { |v| options[:trace] = v }
opts.on("-d", "--debug") { |v| Facter.debugging(1) }
opts.on("-t", "--timing") { |v| Facter.timing(1) }
+ opts.on("-D", "--desc") { |v| Facter.desc(1) }
opts.on("-p", "--puppet") { |v| load_puppet }
opts.on_tail("-v", "--version") do
diff --git a/lib/facter/id.rb b/lib/facter/id.rb
index c2c3594..ec8b688 100644
--- a/lib/facter/id.rb
+++ b/lib/facter/id.rb
@@ -1,10 +1,12 @@
Facter.add(:id) do
confine :operatingsystem => %w{Linux Fedora RedHat CentOS SuSE SLES Debian
Ubuntu Gentoo AIX OEL OVS GNU/kFreeBSD windows}
+ desc "The id fact uses whoami to return an id"
setcode "whoami"
end
Facter.add(:id) do
confine :operatingsystem => %w{Solaris}
+ desc "The id fact on Solaris uses the id binary to return an id"
setcode do
if %x{id} =~ /^uid=\d+\((\S+)\)/
$1
diff --git a/lib/facter/util/resolution.rb b/lib/facter/util/resolution.rb
index 4a99c35..7a9235f 100644
--- a/lib/facter/util/resolution.rb
+++ b/lib/facter/util/resolution.rb
@@ -85,10 +85,16 @@ class Facter::Util::Resolution
end
end
+ # Add a new description to the resolution mechanism
+ def desc(desc)
+ @desc = desc
+ end
+
# Create a new resolution mechanism.
def initialize(name)
@name = name
@confines = []
+ @desc = nil
@value = nil
@timeout = 0
end
@@ -163,6 +169,8 @@ class Facter::Util::Resolution
ms = (finishtime - starttime) * 1000
Facter.show_time "#{self.name}: #{"%.2f" % ms}ms"
+ Facter.show_desc "#{self.name}: %s" % @desc unless @desc.nil?
+
return nil if result == ""
return result
end
diff --git a/spec/unit/facter_spec.rb b/spec/unit/facter_spec.rb
index e63bc76..eef910a 100755
--- a/spec/unit/facter_spec.rb
+++ b/spec/unit/facter_spec.rb
@@ -143,6 +143,14 @@ describe Facter do
Facter.should respond_to(:show_time)
end
+ it "should have a method to query description mode" do
+ Facter.should respond_to(:desc?)
+ end
+
+ it "should have a method to show description information" do
+ Facter.should respond_to(:show_desc)
+ end
+
it "should have a method to warn" do
Facter.should respond_to(:warn)
end
@@ -231,6 +239,25 @@ describe Facter do
end
end
+ describe "when setting description mode" do
+ it "should have descriptions enabled using 1" do
+ Facter.desc(1)
+ Facter.should be_desc
+ end
+ it "should have descriptions enabled using true" do
+ Facter.desc(true)
+ Facter.should be_desc
+ end
+ it "should have descriptions disabled using 0" do
+ Facter.desc(0)
+ Facter.should_not be_desc
+ end
+ it "should have descriptions disabled using false" do
+ Facter.desc(false)
+ Facter.should_not be_desc
+ end
+ end
+
describe "when registering directories to search" do
after { Facter.instance_variable_set("@search_path", []) }
diff --git a/spec/unit/util/resolution_spec.rb
b/spec/unit/util/resolution_spec.rb
index 581d0e1..e6fb887 100755
--- a/spec/unit/util/resolution_spec.rb
+++ b/spec/unit/util/resolution_spec.rb
@@ -17,6 +17,10 @@ describe Facter::Util::Resolution do
Facter::Util::Resolution.new("yay").should respond_to(:setcode)
end
+ it "should have a method for setting the description" do
+ Facter::Util::Resolution.new("yay").should respond_to(:desc)
+ end
+
it "should support a timeout value" do
Facter::Util::Resolution.new("yay").should respond_to(:timeout=)
end
@@ -93,7 +97,7 @@ describe Facter::Util::Resolution do
Facter::Util::Resolution::WINDOWS = true
Facter::Util::Resolution::INTERPRETER = "cmd.exe"
end
-
+
it "should return the result of executing the code with the
interpreter" do
@resolve.setcode "/bin/foo"
Facter::Util::Resolution.expects(:exec).once.with("/bin/foo",
"cmd.exe").returns "yup"
--
1.7.1
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en.