puppet能否判断服务端模版文件是否存在
客户端使用主机名区分,比如主机名为aaa、bbb、ccc、ddd四台机器,我模版文件里有aaa.erb、bbb.erb、standard.erb我想取他们相对应的主机名的模版文件,如aaa取aaa.erb的模版文件,bbb取bbb.erb模版文件,ccc、ddd没有相对应的,就取standard.erb
我现在设置如下:
$mark = $hostname
file {
"test":
mode => 644, owner => root, group => root,
ensure => present,
name => "/tmp/test.txt",
content => template("test/${mark}.erb");
}
我用这种方法是模版文件里有相对应的可以取到,那么没有对应的,我要怎么判断,然后让他去取standard.erb,请问各位有没有做过类似这样的设置 的在外面加个判断吧?比如:先把模板下的文件做个list,然后判断hostname是否存在。存在则赋予hostname为mark如果没有则使用默认模板。这个思路 本帖最后由 关阴月飞 于 2013-09-27 14:12 编辑
回复 1# anran_008
试试这样行不行:
https://github.com/deanwilson/puppet-multitemplate $mark = $hostname
file {
"test":
mode => 644, owner => root, group => root,
ensure => present,
name => "/tmp/test.txt",
content => template("test/${mark}.erb",
'test/standard.erb'
),
} 回复 3# 关阴月飞
试了不行,存在的文件去找standard.erb,不存在的文件直接报错提示模版文件不存在
问题已经解决了,我自己定义了一个函数去判断文件是否存在,然后返回不同值,然后配置文件里再去做判断就可以了
自定义exist函数,文件存在返回0,不存在返回1Puppet::Parser::Functions::newfunction(:exist, :type => :rvalue) do |vals|
key = vals
result = []
key.each do |file|
if File.exists?(file)
result << 0
else
result << 1
end
end
return result.join(" ")
end配置文件里的设置 $myvar = exist("/puppet/modules/test/templates/${hostname}.erb")
if $myvar == 0 {
$mark = $hostname
}
else {
$mark = Standard
}
file {
"test":
mode => 644, owner => root, group => root,
ensure => present,
name => "/tmp/test.txt",
content => template("test/${mark}.erb");
}
页:
[1]