2013-10-14 36 views
3

我無法讓我的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

不能使用傀儡URI方案與模板功能結合起來。根據文檔:

注意,路徑模板不傀儡使用相同的語義 路徑:/// URL。對不一致的抱歉。 (Source

此外:

(如果一個文件無法找到任何模塊中,模板函數 將回落到搜索相對於木偶的 TEMPLATEDIR路徑但是,使用此。不再推薦設置)(Source

這意味着,在爲了使用TEMPLATEDIR模板函數需要一個簡單的相對路徑:

template("zabbix/zabbix_agent_conf.erb") 

不建議使用templatedir。這有一個很好的理由。最好在module的共同分母下將文件組合在一起,否則事情會非常快速地變得非常混亂。將模塊看作是將所有屬於彼此的puppet資源進行分組的最好方法:清單,文件,模板,擴展和測試。

所以我建議創建一個zabbix模塊。將您的木偶代碼放入zabbix模塊清單目錄中的init.pp中的zabbix類中。然後,你可以把你的模板在ZABBIX模塊的模板目錄,您可以通過引用它:

template("zabbix/zabbix_agent_conf.erb") 

希望這有助於。祝你好運!

模塊中
+0

你在這裏所說的話有很大的意義,而且我實際上一直在思考類似的問題,只要複雜性如此,我想我會按照你的建議去做。非常感謝! –

+0

只是一個更新......實施更改和事情更易於管理。感謝您的幫助。 –

+1

Puppet URL更多用於在主節點/代理節點之間共享:http://docs.puppetlabs.com/guides/file_serving。HTML然而,他們不適用於模板,如下所述:http://docs.puppetlabs.com/learning/templates.html#refererring-to-template-files-in-modules – xiankai

1

一次,使用

模板(「$ {}模塊名/xxx.erb」)

引用您的模板文件(適用於木偶4.x的不知道對以前的版本) 。