| Facter 3 correctly detects recursive invocations. It can be triggered by removing --no-custom-facts --no-external-facts from the external fact.
# facter --version |
3.14.24 (commit 91ed8a2de5c9d686345859fe12ea2914415758f0) |
|
# head -3 /opt/puppetlabs/facter/facts.d/fact.sh |
#!/usr/bin/env ruby |
require 'json' |
osfamily = %x(/opt/puppetlabs/bin/facter os.family).strip |
|
# puppet facts show packages |
Warning: Facter: external fact file "/opt/puppetlabs/facter/facts.d/fact.sh" had output on stderr: 2023-01-09 18:48:52.300856 WARN puppetlabs.facter - external fact file "/opt/puppetlabs/facter/facts.d/fact.sh" had output on stderr: 2023-01-09 18:48:51.842723 WARN puppetlabs.facter - Facter was called recursively, skipping external facts. Add '--no-external-facts' to silence this warning
|
Facter 4 does not guard against recursion:
# facter --version |
4.2.14 |
|
# head -3 /opt/puppetlabs/facter/facts.d/fact.sh |
#!/usr/bin/env ruby |
require 'json' |
osfamily = %x(/opt/puppetlabs/bin/facter os.family).strip |
|
# strace -zfv -s 80 -e trace=execve -P /opt/puppetlabs/facter/facts.d/fact.sh -P /opt/puppetlabs/puppet/bin/ruby puppet facts show packages |
strace: Process 20543 attached |
[pid 20543] execve("/opt/puppetlabs/puppet/bin/ruby", ["/opt/puppetlabs/puppet/bin/ruby", "-e", " if ENV['LD_LIBRARY_PATH']; print ENV['LD_LIBRARY_PATH'].split(':', -1).keep_i"...], ... |
... |
[pid 20546] execve("/opt/puppetlabs/facter/facts.d/fact.sh", ["/opt/puppetlabs/facter/facts.d/fact.sh"], ... |
... |
[pid 20552] execve("/opt/puppetlabs/puppet/bin/ruby", ["/opt/puppetlabs/puppet/bin/ruby", "-e", " if ENV['LD_LIBRARY_PATH']; print ENV['LD_LIBRARY_PATH'].split(':', -1).keep_i"...], ... |
... |
[pid 20555] execve("/opt/puppetlabs/facter/facts.d/fact.sh", ["/opt/puppetlabs/facter/facts.d/fact.sh"], ... |
... |
[pid 20561] execve("/opt/puppetlabs/puppet/bin/ruby", ["/opt/puppetlabs/puppet/bin/ruby", "-e", " if ENV['LD_LIBRARY_PATH']; print ENV['LD_LIBRARY_PATH'].split(':', -1).keep_i"...], ...
|
|