Sourcing Puppet files from outside of modules

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, ie 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?


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.


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.


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:

  • Puppet configuration reference entry for fileserverconfig
  • Serving Files From Custom Mount Points
  • 链接地址: http://www.djcxy.com/p/58004.html

    上一篇: 只能调用一次的安全方法?

    下一篇: 从模块外部采购Puppet文件