7

I'm installing a package from a module (Nginx in this specific case) and would like to include a configuration file from outside of the module, i.e. from a top level files directory parallel to the top level manifests directory. I don't see any way to source the file though without including it in a module or in my current Vagrant environment referring to the absolute local path.

Does Puppet allow for sourcing files from outside of modules as described in the documentation?

bennylope
  • 1,113
  • 2
  • 13
  • 24

3 Answers3

3

if I understand your question correctly, you can. In your module a simple code like this

file { '/path/to/file':
    ensure => present,
    source => [
               "puppet:///files/${fqdn}/path/to/file",
               "puppet:///files/${hostgroup}/path/to/file",
               "puppet:///files/${domain}/path/to/file",
               "puppet:///files/global/path/to/file",
    ],
}

will do the job. The /path/to/file will be sourced using a file located in the "files" Puppet share. (in the example above, it search in 4 different locations).

update maybe you're talking about a directory to store files which is not shared by Puppet fileserver (look at http://docs.puppetlabs.com/guides/file_serving.html), and in this case you can't i think, Vagrant or not, but you can add it to your Puppet fileserver to do it. I thinks it's the best (and maybe only) way to do it.

messivanio
  • 2,263
  • 18
  • 24
daks
  • 843
  • 2
  • 7
  • 18
1

If you have a number of Vagrant VMs you can simply store files within your Vagrant project directory (containing your VagrantFile). This directory is usually available to all VMs as /vagrant within the VM on creation.

If you want other directories on your computer to be available to your VMs just add the following to your VagrantFile

# see http://docs.vagrantup.com/v1/docs/config/vm/share_folder.html
config.vm.share_folder "v-packages", "/vagrant_packages", "../../dpkg"

Then to use the files within puppet you can simply treat them as local files to the VM

# bad example, bub basically use 'source => 'file:///vagrant/foo/bar'
file { '/opt/cassandra':
    ensure  => directory,
    replace => true,
    purge   => true,
    recurse => true,
    source  => 'file:///vagrant/conf/dist/apache-cassandra-1.2.0',
}

This is probably only wise to do if you only using local puppet manifests/modules.

StuartW
  • 91
  • 1
  • 2
0

Probably too late to help bennylope, but for others who happen across this question, as I did before figuring it out for myself ...

Include stuff like this in your Vagrantfile ...

GUEST_PROVISIONER_CONFDIR = "/example/destination/path"
HOST_PROVISIONER_CONFDIR  = "/example/source/path"
config.vm.synced_folder HOST_PROVISIONER_CONFIDIR, GUEST_PROVISIONER_CONFDIR
puppet.options = "--fileserverconfig='#{GUEST_PROVISIONER_CONFDIR}/fileserver.conf'"

Then make sure /example/source/path contains the referenced fileserver.conf file. It should look something like ...

[foo]
  path /example/destination/path
  allow *

Now, assuming example-file.txt exists in /example/source/path, the following will work in your manifests:

source  => "puppet:///foo/example-file.txt",

See:

  1. Puppet configuration reference entry for fileserverconfig
  2. Serving Files From Custom Mount Points
Community
  • 1
  • 1
RH Becker
  • 1,692
  • 1
  • 14
  • 11