Search code examples
centosvagrantpuppet

puppet 4.0 vagrant modules missing


I am trying to use puppet modules in vagrant. My box is running puppet 4.0

I am installing modules using:

if [ ! -d /etc/puppet/modules/ ]; then 
    puppet module install puppetlabs-java
fi

in site.pp I have:

class { 'java': 
    distribution => 'jdk',
} 

I keep getting an error about could not find declared class java why can't puppet find my module?

/etc/puppet/modules/ is the default path isn't it?

vagrant file

Vagrant.configure(2) do |config|
  config.vm.box = "bento/centos-7.2"
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.memory = "8192"
  end
  config.vm.provision :shell, :path => "upgrade_puppet.sh"
  config.vm.provision :shell, :path => "puppet_modules.sh"

  config.vm.provision :puppet do |puppet|
    puppet.options = '--verbose --debug'
    puppet.environment_path = "puppet/environments"
    puppet.environment = "production"  
  end

end

Solution

  • Updated answer now that Vagrantfile has been provided

    Locations have changed in puppet 4 and directory environments are now in use by default.

    So how you are using the puppet provisioner is correct. However, vagrant will upload all the directories it needs to the guest, based on your Vagrantfile to: /tmp/vagrant-puppet/environments/production

    When Vagrant calls the puppet apply it will be looking for the modules it requires in: /tmp/vagrant-puppet/environments/production/modules

    and that module directory does not exist on your host.

    You can change your if block to be:

    if [ ! -d /vagrant/puppet/environments/production/modules ]; then
        puppet module install puppetlabs-java --modulepath /vagrant/puppet/environments/production/modules
    fi
    

    /vagrant is shared between host and guest. This would install the java module and its dependencies on your host machine under:

    puppet
    |
    +--environments
       +
       -- production
          |
          + -- manifests
          |    +
          |    -- site.pp
          |
          + -- modules
               +
               -- java
               +
               -- stdlib
    

    When you do your vagrant up, this content gets uploaded to the host under:

    /tmp/vagrant-puppet
    

    Tested and confirmed based on your Vagrantfile.