lklkxcxc 发表于 2014-12-05 10:34

puppet使用erb统一修改配置文件的功能疑问

本帖最后由 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有没有类似的功能   

rdcwayx 发表于 2014-12-05 10:34

本帖最后由 rdcwayx 于 2014-12-05 17:06 编辑




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

$ cat templates/user.erb
<% @users.each do |user| -%>
<%= user%>:
      admin = false
      histsize = 5
      histexpire = 13
      minlen = 8
      minalpha = 1
      minother = 1
      maxrepeats = 8
      mindiff = 1

<% end -%>

$ cat test/init.pp
node 'server1' {
$users = ['user1','user2','user3']
include users::params
}
node 'server2' {
$users = ['user1']
include users::params
}
node default {
$users = ['user1','user2']
include users::params
}你可以用下面的命令直接测试:cd /etc/puppet
puppet apply --modulepath modules modules/users/test/init.pp你会看到有个/tmp/user.conf 的文件,里面就有你需要的内容。

rdcwayx 发表于 2014-12-05 17:00

如果你要修改参数,直接改 user.erb 文件即可。

rdcwayx 发表于 2014-12-05 17:09

本帖最后由 rdcwayx 于 2014-12-05 17:09 编辑

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

其文件代码是:663913

lklkxcxc 发表于 2014-12-08 09:55

本帖最后由 lklkxcxc 于 2014-12-08 10:00 编辑

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

rdcwayx 发表于 2014-12-08 16:25

回复 7# lklkxcxc

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

lklkxcxc 发表于 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

rdcwayx 发表于 2014-12-13 17:13

回复 9# lklkxcxc

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

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

lklkxcxc 发表于 2014-12-16 11:06

回复 10# rdcwayx
我可不可以理解puppet当中要插入ruby代码就用<% %>引用起来执行就可以了

   

rdcwayx 发表于 2014-12-17 15:25

回复 11# lklkxcxc


    差不多, puppet 有个inline_template() 的功能就可以实现这个。 但是通常我喜欢指向一个单独的erb文件
页: [1]
查看完整版本: puppet使用erb统一修改配置文件的功能疑问