我无法让Puppet清单以期望的方式找到模板,所以我认为有人可能会很快给出答案。我是puppet的新手,所以只是尝试了解所有内容的所有位置以及如何正确引用文件。如果我遗漏了一些非常明显的东西,我深表歉意。
这有效:
file {
$zabbix_agent_conf:
owner => root,
group => root,
mode => 0644,
content => template("/etc/puppet/templates/zabbix/files/zabbix_agent_conf.erb"),
require => Package["zabbix-agent"];
}
Run Code Online (Sandbox Code Playgroud)
这不是:
file {
$zabbix_agent_conf:
owner => root,
group => root,
mode => 0644,
content => template("puppet:///templates/zabbix/zabbix_agent_conf.erb"),
require => Package["zabbix-agent"];
}
Run Code Online (Sandbox Code Playgroud)
我的/etc/puppet/puppet.conf:
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=/etc/puppet/templates
prerun_command=/etc/puppet/etckeeper-commit-pre
postrun_command=/etc/puppet/etckeeper-commit-post
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
Run Code Online (Sandbox Code Playgroud)
目前还不能将 puppet URI 方案与模板函数结合使用。根据文档:
\n\n\n\n\n请注意,模板的路径\xe2\x80\x99 不使用与 puppet:/// URL 中的路径相同的语义。对于不一致之处,我们深表歉意。(来源)
\n
此外:
\n\n\n\n\n(如果在任何模块中都找不到文件,模板函数将回退到相对于 Puppet\xe2\x80\x99s\n templatedir 中的路径进行搜索。但是,不再建议使用此设置。)(源)
\n
这意味着为了使用 templatedir,模板函数需要一个简单的相对路径:
\n\ntemplate("zabbix/zabbix_agent_conf.erb")\n
Run Code Online (Sandbox Code Playgroud)\n\n不建议使用templatedir。这是有充分理由的。最好将文件分组在模块的共同点下的共同点下,否则事情很快就会变得非常混乱。将模块视为对彼此所属的所有 Puppet 资源进行分组的好方法:清单、文件、模板、扩展和测试。
\n\n所以我建议创建一个 zabbix 模块。将您的 puppet 代码放置在 zabbix 模块的清单目录中的 init.pp 中的 zabbix 类中。然后你可以将你的模板放在zabbix模块的templates目录中,你可以通过以下方式引用它:
\n\ntemplate("zabbix/zabbix_agent_conf.erb")\n
Run Code Online (Sandbox Code Playgroud)\n\n希望这可以帮助。祝你好运!
\n