summaryrefslogtreecommitdiff
path: root/README_DEVELOPER.markdown
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2012-03-12 17:41:24 -0700
committerJeff McCune <jeff@puppetlabs.com>2012-03-12 17:41:24 -0700
commitced1f7476e562fea8241469471c715778f3b8157 (patch)
tree7b1692232877f53b7a18b029b31102c13f405fe8 /README_DEVELOPER.markdown
parentc0ac470e764841b0de88dbabade342dc2c1b193e (diff)
parent5d1cec8a66fd67ebf4242c08abdf087783706057 (diff)
downloadpuppet-stdlib-ced1f7476e562fea8241469471c715778f3b8157.tar.gz
puppet-stdlib-ced1f7476e562fea8241469471c715778f3b8157.tar.bz2
Merge branch '2.3.x'
* 2.3.x: (#12357) Fix broken compatibility with Puppet 2.6 (maint) Comment Ken's fix to String#any? (#13018) Fix missing method any? message for ruby 1.9.x (#12357) Add ability to display an error message from validate_re (#12357) Add validate_absolute_path() function (maint) Stop printing the directory of spec_helper (#12357) Make facter_dot_d look in Puppet[:confdir]/facts.d (#12357) Add puppet_vardir custom fact (#12357) Fix root_home fact on Windows
Diffstat (limited to 'README_DEVELOPER.markdown')
-rw-r--r--README_DEVELOPER.markdown35
1 files changed, 35 insertions, 0 deletions
diff --git a/README_DEVELOPER.markdown b/README_DEVELOPER.markdown
new file mode 100644
index 0000000..e8aa27a
--- /dev/null
+++ b/README_DEVELOPER.markdown
@@ -0,0 +1,35 @@
+Puppet Specific Facts
+=====================
+
+Facter is meant to stand alone and apart from Puppet. However, Facter often
+runs inside Puppet and all custom facts included in the stdlib module will
+almost always be evaluated in the context of Puppet and Facter working
+together.
+
+Still, we don't want to write custom facts that blow up in the users face if
+Puppet is not loaded in memory. This is often the case if the user run
+`facter` without also supplying the `--puppet` flag.
+
+Ah! But Jeff, the custom fact won't be in the `$LOAD_PATH` unless the user
+supplies `--facter`! You might say...
+
+Not (always) true I say! If the user happens to have a CWD of
+`<modulepath>/stdlib/lib` then the facts will automatically be evaluated and
+blow up.
+
+In any event, it's pretty easy to write a fact that has no value if Puppet is
+not loaded. Simply do it like this:
+
+ Facter.add(:node_vardir) do
+ setcode do
+ # This will be nil if Puppet is not available.
+ Facter::Util::PuppetSettings.with_puppet do
+ Puppet[:vardir]
+ end
+ end
+ end
+
+The `Facter::Util::PuppetSettings.with_puppet` method accepts a block and
+yields to it only if the Puppet library is loaded. If the Puppet library is
+not loaded, then the method silently returns `nil` which Facter interprets as
+an undefined fact value. The net effect is that the fact won't be set.