无法在Puppet中找到模板

时间:2013-10-14 15:49:14

标签: 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

2 个答案:

答案 0 :(得分:4)

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

  

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

此外:

  

(如果文件不能位于任何模块内,则为模板功能   将回到相对于Puppet的路径搜索   TEMPLATEDIR。但是,不再推荐使用此设置。)(Source

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

template("zabbix/zabbix_agent_conf.erb")

不建议使用templatedir。这是有充分理由的。最好在module的公分母下将文件组合在一起,否则事情会很快变得非常混乱。将模块视为将所有彼此属性的木偶资源分组的好方法:清单,文件,模板,扩展和测试。

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

template("zabbix/zabbix_agent_conf.erb")

希望这会有所帮助。祝你好运!

答案 1 :(得分:1)

进入模块后,请使用

模板( “$ {MODULE_NAME} /xxx.erb”)

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