免费注册 查看新帖 |

Chinaunix

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

[puppet] puppet使用erb统一修改配置文件的功能疑问 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-05 10:34 |只看该作者 |倒序浏览
20可用积分
本帖最后由 lklkxcxc 于 2014-12-05 10:36 编辑

node1 puppet客户端的user配置文件如下:
test1:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 8
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1

test2:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 8
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1
node2 puppet客户端的user配置文件如下:
test1:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 8
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1

造成user文件内容不一样,是因为node1系统上比node2上多建了一个test2用户,所以node1主机user配置文件多了一项test2用户的配置。这边有很多node puppet客户端节点而且每个节点上的用户不尽一样导致每个puppet客户端系统上的user配置文件内容也有差别。如果单独去为每个puppet客户端做个erb不现实也达不到自动配置的效率。现在想通过一个erb修改所有node节点主机的user配置文件。但是由于erb是统一模板,会导致所有主机的user配置文件一样,不知道我现在说明白没?

比如将user配置文件中所有用户的 minlen = 8修改为 minlen = 6,该怎么做,其它的参数不变,要求最终node1节点的user配置文件如下:


test1:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 6
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1

test2:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 6
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1

node2的user配置文件如下:
test1:
        admin = false
        histsize = 5
        histexpire = 13
        minlen = 6
        minalpha = 1
        minother = 1
        maxrepeats = 8
        mindiff = 1
其实这个用shell可以进行全文替换,不知道puppet有没有类似的功能   

最佳答案

查看完整内容

/etc/puppet/modules/users 模块格式:三个文件的内容:你可以用下面的命令直接测试:你会看到有个/tmp/user.conf 的文件,里面就有你需要的内容。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2014-12-05 10:34 |只看该作者
本帖最后由 rdcwayx 于 2014-12-05 17:06 编辑




/etc/puppet/modules/users 模块格式:
  1. $ tree
  2. .
  3. ├── manifests
  4. │   └── params.pp
  5. ├── templates
  6. │   └── user.erb
  7. └── test
  8.     └── init.pp
复制代码
三个文件的内容:
  1. $ cat manifests/params.pp
  2. class users::params {
  3.     file { '/tmp/user.conf':
  4.         ensure => file,
  5.         content => template('users/user.erb')
  6.     }
  7. }

  8. $ cat templates/user.erb
  9. <% @users.each do |user| -%>
  10.   <%= user%>:
  11.         admin = false
  12.         histsize = 5
  13.         histexpire = 13
  14.         minlen = 8
  15.         minalpha = 1
  16.         minother = 1
  17.         maxrepeats = 8
  18.         mindiff = 1

  19. <% end -%>

  20. $ cat test/init.pp
  21. node 'server1' {
  22.   $users = ['user1','user2','user3']
  23.   include users::params
  24. }
  25. node 'server2' {
  26.   $users = ['user1']
  27.   include users::params
  28. }
  29. node default {
  30.   $users = ['user1','user2']
  31.   include users::params
  32. }
复制代码
你可以用下面的命令直接测试:
  1. cd /etc/puppet
  2. puppet apply --modulepath modules modules/users/test/init.pp
复制代码
你会看到有个/tmp/user.conf 的文件,里面就有你需要的内容。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2014-12-05 17:00 |只看该作者
如果你要修改参数,直接改 user.erb 文件即可。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2014-12-05 17:09 |只看该作者
本帖最后由 rdcwayx 于 2014-12-05 17:09 编辑

模块文件已经上传,但是为啥看不见呢?

其文件代码是:
  1. 663913
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
5 [报告]
发表于 2014-12-08 09:55 |只看该作者
本帖最后由 lklkxcxc 于 2014-12-08 10:00 编辑

rdcwayx看到了谢谢!想了解的是puppet有没有内部函数可以直接获取user列表

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
6 [报告]
发表于 2014-12-08 16:25 |只看该作者
回复 7# lklkxcxc

用puppet 就不要偷懒了,毕竟自动化上已经省很多时间了。 写代码还是要会写一些的。
   

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
7 [报告]
发表于 2014-12-12 13:01 |只看该作者
本帖最后由 lklkxcxc 于 2014-12-12 13:19 编辑

回复 8# rdcwayx

node 'mon.test.cn'{
          $users = exec { "cat /etc/passwd|awk -F : 'BEGIN{ORS=","}{print $1}'":
           path => ["/usr/bin", "/usr/sbin"],
           logoutput => true }

     include security::params

}


打算通过上述命令获取users列表,语法上一直报错:
puppet parser validate site.pp
Error: Could not parse for environment production: Syntax error at '}{print '; expected '}' at /etc/puppet/manifests/site.pp:4

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2014-12-13 17:13 |只看该作者
回复 9# lklkxcxc

明白你的意思了。将 erb改成:
  1. <% File.open("/etc/passwd","r").each_line do |line| -%>
  2.   <% vars=line.split(":")%>
  3.   <%= "#{vars[0]}" %>:
  4.         admin = false
  5.         histsize = 5
  6.         histexpire = 13
  7.         minlen = 8
  8.         minalpha = 1
  9.         minother = 1
  10.         maxrepeats = 8
  11.         mindiff = 1

  12. <% end -%>
复制代码
node 的 manifest文件改成 (也就是不需要手工给user賦值了,erb文件会自动去/etc/password里找的。
  1. node 'mon.test.cn'{
  2.      include security::params
  3. }
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
9 [报告]
发表于 2014-12-16 11:06 |只看该作者
回复 10# rdcwayx
我可不可以理解puppet当中要插入ruby代码就用<% %>引用起来执行就可以了

   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
10 [报告]
发表于 2014-12-17 15:25 |只看该作者
回复 11# lklkxcxc


    差不多, puppet 有个inline_template() 的功能就可以实现这个。 但是通常我喜欢指向一个单独的erb文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP