equal
deleted
inserted
replaced
|
1 Puppet Specific Facts |
|
2 ===================== |
|
3 |
|
4 Facter is meant to stand alone and apart from Puppet. However, Facter often |
|
5 runs inside Puppet and all custom facts included in the stdlib module will |
|
6 almost always be evaluated in the context of Puppet and Facter working |
|
7 together. |
|
8 |
|
9 Still, we don't want to write custom facts that blow up in the users face if |
|
10 Puppet is not loaded in memory. This is often the case if the user runs |
|
11 `facter` without also supplying the `--puppet` flag. |
|
12 |
|
13 Ah! But Jeff, the custom fact won't be in the `$LOAD_PATH` unless the user |
|
14 supplies `--facter`! You might say... |
|
15 |
|
16 Not (always) true I say! If the user happens to have a CWD of |
|
17 `<modulepath>/stdlib/lib` then the facts will automatically be evaluated and |
|
18 blow up. |
|
19 |
|
20 In any event, it's pretty easy to write a fact that has no value if Puppet is |
|
21 not loaded. Simply do it like this: |
|
22 |
|
23 Facter.add(:node_vardir) do |
|
24 setcode do |
|
25 # This will be nil if Puppet is not available. |
|
26 Facter::Util::PuppetSettings.with_puppet do |
|
27 Puppet[:vardir] |
|
28 end |
|
29 end |
|
30 end |
|
31 |
|
32 The `Facter::Util::PuppetSettings.with_puppet` method accepts a block and |
|
33 yields to it only if the Puppet library is loaded. If the Puppet library is |
|
34 not loaded, then the method silently returns `nil` which Facter interprets as |
|
35 an undefined fact value. The net effect is that the fact won't be set. |