anran_008 发表于 2013-09-26 14:34

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,请问各位有没有做过类似这样的设置

wenhq 发表于 2013-09-26 20:44

的在外面加个判断吧?比如:先把模板下的文件做个list,然后判断hostname是否存在。存在则赋予hostname为mark如果没有则使用默认模板。这个思路

关阴月飞 发表于 2013-09-27 14:12

本帖最后由 关阴月飞 于 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'                                             
                                              ),
       }

anran_008 发表于 2013-09-28 10:30

回复 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]
查看完整版本: puppet能否判断服务端模版文件是否存在