Search code examples
rubyvagrantpuppet

Scope of modules using Puppet in a Vagrant multi machine environment


I have a projekt with a setup for a multi machine environment for Vagrant. I had to fix some problems, which were initially caused by the redirect issue to https, but solving these lead into other errors, which I fixed in all projects except this one now, which uses the multi machine feature of Vagrant.

So I have this folder structure:

/Vagrantfile
/puppet/box_1/puppetfile
/puppet/box_1/manifests/site.pp

This is my code snippet, where I define my provision directories:

config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "puppet/box_1/manifests"
    puppet.manifest_file = "site.pp"
end

My puppetfile looks like this:

forge "https://forgeapi.puppetlabs.com"

mod 'tPl0ch/composer'
mod 'puppetlabs/apt'
mod 'puppetlabs/apache'
mod 'puppetlabs/firewall'

In my site.pp I try to include apt, but I get this error message:

Error: Evaluation Error: Error while evaluating a Function Call, Could      not find class ::apt for project.local at /tmp/vagrant-puppet/manifests-f2b1fd0ac42b51938ed6ae7e6917367e/site.pp:1:1 on node project.local

When I rearange my puppet files like this:

/Vagrantfile
/puppet/puppetfile
/puppet/manifests/site.pp

like this is the common way of setting this up, it works without that problem, but as I mentioned, there are other boxes, which use different puppetfiles and site.pp files, so this folder structure makes some kinda sense. It seems, that it doesn'even matter, if I delete the config for the other boxes, and setup my Vagrantfile, as if it would be only one box, so I am just confused, how the location, of these files influence the scope of certain classes.

So my questions is here: Is there a way, to keep this folder structure and still have these modules defined in puppetfile available in my site.pp? Or is this generally some kinda bad practice to organize it this way? I was searching for some examples for this, but couldn't find any for some reason...

EDIT: It seems, on provision the puppetfile isnt even used anymore, when its not located in /puppet/ So maybe I just have to tell Vagrant how to use it?


Solution

  • define where librarian should find the puppet file

    Vagrant.configure("2") do |config|
    
      config.librarian_puppet.puppetfile_dir = "puppet/box1"
    
      config.vm.provision :puppet do |puppet|
        puppet.manifests_path = "puppet/box_1/manifests"
        puppet.manifest_file = "site.pp"
      end