Install a Puppet module to the global modules directory by default

puppet

I'm setting up a Puppet master server for the first time. It's configured to use environments:

/etc/puppet/puppet.conf:

[main]
environmentpath = /var/opt/puppet/environments
basemodulepath = /var/opt/puppet/modules

Whenever I install a module, puppet module install foo, it get installed into my "production" environment's module directory. What I want to happen is for the module to be installed to /var/opt/puppet/modules unless I specify an environment with the --environment switch.

How do I do that?

Best Answer

As of the current Puppet version (v6.0):

By default, this command installs modules into the first directory in the Puppet modulepath, which defaults to $codedir/environments/production/modules.

That means you need to set the modulepath so that '/var/opt/puppet/modules' is the first directory in your modulepath. Since the modulepath setting can only be set in environment.conf, you need to edit your environment.conf for all of your environments.

nano -w /etc/puppetlabs/code/environments/{environment_name}/environment.conf

modulepath = '/var/opt/puppet/modules:/etc/puppetlabs/code/environments/production/modules:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules'

BTW: For Puppet v6.0 '/etc/puppetlabs/code/modules' may be a better choice for a global modules directory.

Related Topic