我从模块(在这种特定情况下为Nginx
)安装软件包,并希望包含模块外部的配置文件,即从顶级files
目录中与顶级manifests
目录并行。我没有看到任何方法来获取文件,但没有将其包含在模块中或我当前的Vagrant环境中引用绝对本地路径。
Puppet是否允许如文档中所述从模块外部获取文件?
答案 0 :(得分:3)
如果我理解你的问题,你可以。 在你的模块中有一个像这样的简单代码
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",
],
}
将完成这项工作。 / path / to / file 将使用位于“files”Puppet共享中的文件获取。 (在上面的示例中,它在4个不同的位置搜索)。
更新也许你在谈论一个目录来存储Puppet文件服务器不共享的文件(看http://docs.puppetlabs.com/guides/file_serving.html),在这种情况下你不能想到,是否流浪,但您可以将其添加到您的Puppet文件服务器中。我认为这是最好的(也许是唯一的)方式。
答案 1 :(得分:1)
如果您有许多Vagrant VM,您只需将文件存储在Vagrant项目目录中(包含您的VagrantFile)。 在创建VM时,此目录通常可供所有VM用作/ vagrant。
如果您希望计算机上的其他目录可供您的VM使用,只需将以下内容添加到您的VagrantFile
# see http://docs.vagrantup.com/v1/docs/config/vm/share_folder.html
config.vm.share_folder "v-packages", "/vagrant_packages", "../../dpkg"
然后,要使用puppet中的文件,您只需将它们视为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',
}
如果您只使用本地木偶清单/模块,这可能是明智之举。
答案 2 :(得分:0)
可能为时已晚,无法帮助bennylope,但对于遇到此问题的其他人来说,正如我在为自己搞清楚之前所做的那样......
在您的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'"
然后确保/ example / source / path包含引用的fileserver.conf文件。它应该看起来像......
[foo]
path /example/destination/path
allow *
现在,假设example-file.txt存在于/ example / source / path中,以下内容将适用于您的清单:
source => "puppet:///foo/example-file.txt",
请参阅: