免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6911 | 回复: 3
打印 上一主题 下一主题

[puppet] puppet能否判断服务端模版文件是否存在 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-26 14:34 |只看该作者 |倒序浏览
客户端使用主机名区分,比如主机名为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,请问各位有没有做过类似这样的设置

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
2 [报告]
发表于 2013-09-26 20:44 |只看该作者
的在外面加个判断吧?比如:先把模板下的文件做个list,然后判断hostname是否存在。存在则赋予hostname为mark如果没有则使用默认模板。这个思路

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2013-09-27 14:12 |只看该作者
本帖最后由 关阴月飞 于 2013-09-27 14:12 编辑

回复 1# anran_008

试试这样行不行:
https://github.com/deanwilson/puppet-multitemplate
  1. $mark = $hostname
  2.         file {
  3.                 "test":
  4.                 mode => 644, owner => root, group => root,
  5.                 ensure => present,
  6.                 name    => "/tmp/test.txt",
  7.                 content => template("test/${mark}.erb",
  8.                                  'test/standard.erb'                                             
  9.                                               ),
  10.        }  
复制代码

论坛徽章:
0
4 [报告]
发表于 2013-09-28 10:30 |只看该作者
回复 3# 关阴月飞

试了不行,存在的文件去找standard.erb,不存在的文件直接报错提示模版文件不存在

问题已经解决了,我自己定义了一个函数去判断文件是否存在,然后返回不同值,然后配置文件里再去做判断就可以了

自定义exist函数,文件存在返回0,不存在返回1
  1. Puppet::Parser::Functions::newfunction(:exist, :type => :rvalue) do |vals|
  2.     key = vals[0]
  3.     result = []
  4.     key.each do |file|
  5.         if File.exists?(file)
  6.           result << 0
  7.         else
  8.           result << 1
  9.         end
  10.     end
  11.     return result.join(" ")
  12. end
复制代码
配置文件里的设置
  1.         $myvar = exist("/puppet/modules/test/templates/${hostname}.erb")
  2.         if $myvar == 0 {
  3.           $mark = $hostname
  4.         }
  5.         else {
  6.           $mark = Standard
  7.         }


  8.         file {
  9.                 "test":
  10.                 mode => 644, owner => root, group => root,
  11.                 ensure => present,
  12.                 name    => "/tmp/test.txt",
  13.                 content => template("test/${mark}.erb");
  14.        }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP