5

我无法让我的 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"];
}

这不会:

file {
     $zabbix_agent_conf:
     owner => root,
     group => root,
     mode => 0644,
     content => template("puppet:///templates/zabbix/zabbix_agent_conf.erb"),
     require => Package["zabbix-agent"];
}

我的 /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
4

2 回答 2

4

到目前为止,您还不能将 puppet URI 方案与模板功能结合使用。根据文档:

请注意,模板的路径与 puppet:/// URL 中的路径使用的语义不同。对不一致的地方感到抱歉。(来源

此外:

(如果文件不能在任何模块中找到,则模板函数将回退到相对于 Puppet 的模板目录中的路径进行搜索。但是,不再建议使用此设置。)(来源

这意味着为了使用 templatedir 模板函数需要一个简单的相对路径:

template("zabbix/zabbix_agent_conf.erb")

不建议使用模板目录。这是有充分理由的。最好在模块的共同点下将文件分组在一起,否则事情会很快变得非常混乱。将模块视为对属于彼此的所有 puppet 资源进行分组的好方法:清单、文件、模板、扩展和测试。

所以我建议创建一个 zabbix 模块。将您的 puppet 代码放在 zabbix 模块清单目录中的 init.pp 内的 zabbix 类中。然后你可以将你的模板放在你的 zabbix 模块的模板目录中,你可以通过以下方式引用它:

template("zabbix/zabbix_agent_conf.erb")

希望这可以帮助。祝你好运!

于 2013-10-14T16:46:18.773 回答
1

一旦进入一个模块,使用

模板("${module_name}/xxx.erb")

引用您的模板文件(适用于 puppet 4.x。不确定以前的版本)。

于 2017-01-06T12:37:40.427 回答