从模块外部采购Puppet文件
我正在从一个模块(在这个特定情况下是Nginx
)安装一个软件包,并希望从模块外部包含一个配置文件,即从顶级files
目录并行到顶级manifests
目录。 我没有看到任何方式来源文件,但没有将其包含在模块中,或者在我当前的指向绝对本地路径的Vagrant环境中。
Puppet是否允许根据文档中的描述从模块外部获取文件?
如果我正确理解你的问题,你可以。 在你的模块中有这样一个简单的代码
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 /文件将使用位于“文件”Puppet共享中的文件来源。 (在上面的例子中,它在4个不同的位置搜索)。
更新也许你正在谈论一个目录来存储文件不被Puppet文件服务器共享(看看http://docs.puppetlabs.com/guides/file_serving.html),在这种情况下你不能这么想, Vagrant与否,但你可以将它添加到你的Puppet文件服务器来完成它。 我认为这是最好的(也许是唯一的)方法。
如果您有多个Vagrant虚拟机,您可以将文件存储在Vagrant项目目录(包含您的VagrantFile)中。 在创建时,该目录通常可供所有虚拟机在虚拟机内使用。
如果您希望计算机上的其他目录可供您的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',
}
如果你只使用当地的木偶清单/模块,这可能只是明智的做法。
可能来不及帮助bennylope,但对于发生在这个问题上的其他人,就像我之前做过的那样,
在你的Vagrant文件中包含这样的东西...
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 / source / path中存在example-file.txt,以下内容将在您的清单中起作用:
source => "puppet:///foo/example-file.txt",
看到: