summaryrefslogtreecommitdiff
path: root/lib/facter/util/puppet_settings.rb
AgeCommit message (Collapse)Author
2012-03-13(#13091) Fix LoadError exception with puppet applyJeff McCune
Puppet apply does not add the stdlib lib directory to the $LOAD_PATH. This is a problem because the puppet_vardir fact requires the puppet_settings library to be available for the `with_puppet` utility method. Without this patch, puppet apply will result in the following error: $ puppet apply --modulepath=/vagrant/modules -e 'notice $puppet_vardir' warning: Could not load fact file stdlib/lib/facter/puppet_vardir.rb: no such file to load -- facter/util/puppet_settings notice: Scope(Class[main]): notice: Finished catalog run in 0.01 seconds With this patch applied, puppet apply works as expected: $ puppet apply --modulepath=/vagrant/modules.pe -e 'notice $puppet_vardir' notice: Scope(Class[main]): /Users/jeff/.puppet/var notice: Finished catalog run in 0.01 seconds This patch defensively tries to load facter/util/puppet_settings. If it cannot load it, it falls back to trying to explicitly locate and load the library. Once puppet is fixed such that a modules lib directory is truly in the $LOAD_PATH, the fall back implementation will no longer be exercised since the LoadError should not be raised.
2012-03-05(#12357) Add puppet_vardir custom factJeff McCune
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.