diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2012-02-29 12:47:08 -0800 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-03-05 16:26:22 -0800 |
commit | a452f6a9af21d9ec5f34e6cda40af0ec3971b422 (patch) | |
tree | 595c5f48927dfeaa7e5cbc215b50ea7c1b83fc5a /spec/unit | |
parent | c0ac470e764841b0de88dbabade342dc2c1b193e (diff) | |
download | puppet-stdlib-a452f6a9af21d9ec5f34e6cda40af0ec3971b422.tar.gz puppet-stdlib-a452f6a9af21d9ec5f34e6cda40af0ec3971b422.tar.bz2 |
(#12357) Add puppet_vardir custom fact
Without this patch the PE modules don't have a way to identify a
filesystem path where it's OK to place variable data related to managing
the target node. This is a problem when a module like pe_compliance
needs to write a wrapper script to the node's filesystem.
This patch addresses the problem by exposing the node's Puppet[:vardir]
setting as a Facter fact.
This fact value will be set to `nil` if Puppet is not loaded into
memory. If Puppet is loaded, e.g. using `facter --puppet` or using
`puppet agent` or `puppet apply` then the fact will automatically set
the value to Puppet[:vardir]
The value of this setting is subject to Puppet's run_mode.
This patch implements a new utility method in the standard library
module named `Facter::Util::PuppetSettings.with_puppet`. The method
accepts a block and will only invoke the block if the Puppet library is
loaded into the Ruby process. If Puppet is not loaded, the method
always returns nil. This makes it easy to define Facter facts that only
give values if Puppet is loaded in memory.
Diffstat (limited to 'spec/unit')
-rw-r--r-- | spec/unit/facter/util/puppet_settings_spec.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/spec/unit/facter/util/puppet_settings_spec.rb b/spec/unit/facter/util/puppet_settings_spec.rb new file mode 100644 index 0000000..c3ce6ea --- /dev/null +++ b/spec/unit/facter/util/puppet_settings_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' +require 'facter/util/puppet_settings' + +describe Facter::Util::PuppetSettings do + + describe "#with_puppet" do + context "Without Puppet loaded" do + before(:each) do + Module.expects(:const_get).with("Puppet").raises(NameError) + end + + it 'should be nil' do + subject.with_puppet { Puppet[:vardir] }.should be_nil + end + it 'should not yield to the block' do + Puppet.expects(:[]).never + subject.with_puppet { Puppet[:vardir] }.should be_nil + end + end + context "With Puppet loaded" do + module Puppet; end + let(:vardir) { "/var/lib/puppet" } + + before :each do + Puppet.expects(:[]).with(:vardir).returns vardir + end + it 'should yield to the block' do + subject.with_puppet { Puppet[:vardir] } + end + it 'should return the nodes vardir' do + subject.with_puppet { Puppet[:vardir] }.should eq vardir + end + end + end +end |