Affects Version/s: PUP 3.7.4
Fix Version/s: PUP 4.0.0
A master with a modules directory that is a symlink and one or more modules with no facts.d or lib directories.
Currently, Puppet produces one of two pluginsync errors during an agent run if the root of a modulepath directory is a symlink and no modules contain a facts.d or lib directory.
In the normal case, when the base module path is a directory and none if its modules include facts.d or lib directories, pluginsync returns the path to the module path directory itself, at which point the file type disables recursion in its `recurse_remote` method and stops the agent from attempting to download plugins.
However, if the base module path is not a directory (in this case a link), `recurse_remote` returns early, causing the agent-side facts.d or lib directory to not have its 'source' metadata set, leading to a failing query back to the master.
1) Install any version of Puppet from 3.5.1 onward
2) Edit puppet.conf to look like the following (where this is both the master and the agent):
3) mkdir -p /h/puppet_modules
4) mkdir -p /etc/puppet/environments/production
5) ln -s /h/puppet_modules /etc/puppet/environments/production/modules
6) puppet module install puppetlabs-stdlib
7) Start the master with puppet master --verbose --no-daemonize
8) Run the agent with puppet agent -t
To "fix" the error, simply run mkdir /h/puppet_modules/stdlib/facts.d.