最近体验了一把puppet 4.6,变化蛮大,也更加的合理了,初略看了下,
1. 除了最早被deprecate的import, 现在node的inherits也没了。 2. auth.conf也要换位置,可以从/var/log/puppetlabs/ 的日志看到。
3. 新目录结构为:etc/puppetlabs/puppet/ puppet 和/etc/puppetlabs/code,
4. 而且environment设置从puppet.conf去掉了,当然你不在puppet.conf配置的话。现在在/etc/puppetlabs/code/environments/production/environment.conf,
5. puppet.conf只有4个section,main/master/agent/user。6,现在用的是jruby,所以优化的话JVM的HEAP的设置就比较重要了。
以上都是题外话,现在来说ENC, 一般来说,某个node需要安装那些module, 都在site.pp来指定,比如:
-
#ste.pp
-
node 'web01.xxx.com' {
-
include web
-
}
当然node还可以用正则表达式regexp来匹配,比如 /^web\d+\.xxx.com/ 匹配web01, web02...等。看起来也蛮合理,ENC也没存在的必要啊。当然你机器不多,而且FQDN命名很规则的确可以。 但机器多了,一个个在site.pp写,的确费时费力,而且机器下线了或者另作他用,site.pp维护起来就很麻烦了。ENC就是取代site.pp而生。
如何配置? 在puppet.conf上添加
[master]
node_terminus = exec
external_nodes = /etc/puppetlabs/enc.rb #enc.rb是我的脚本名字
脚本可以任选,只要返回标准的yaml含有classes/environment/parameters3个即可,注意传入参数是agent的FQDN, 而site.pp可以分别从 , 和www来匹配(strict_hostname_checking=true 则只让site.pp接受FQDN)。当然你可以用ldap/和mysql等,把信息存到db,然后脚本查询,这样可以跟cmdb结合起来了。
-
#!/usr/bin/env ruby
-
-
require 'yaml'
-
node = ARGV[0]
-
-
# agent's FQDN : ${app}.${env}.${Location || IDC}.xxx.com, e.g web01.prod.bjcnc.xxx.com
-
-
if node =~ /(^[a-zA-Z]+)(\d+)\.(\S+)\.(\S+)\.(\S+)\.(\S+)$/
-
-
hostname = $1
-
env = $3
-
config = YAML.load_file('/etc/puppetlabs/defaults.yaml')[env]
-
print YAML.dump(config.fetch(hostname))
-
exit 0
-
-
else
-
-
config = YAML.load_file('defaults.yaml')
-
print YAML.dump(config.fetch('base'))
-
exit 0
-
-
end
# defaults.yaml, 定义了environment/classes, 其中classes可以带参数,用于parameterized class, 不知道这个是啥,得自己看看资料了。
-
---
-
base:
-
classes:
-
vim:
-
telnet:
-
environment: production
-
parameters:
-
-
-
production:
-
web:
-
classes:
-
nginx:
-
puppetdb::master::config:
-
password: fake
-
users:
-
alex:
-
home: /home/alex
-
uid: 502
-
jane:
-
home: /home/jane
-
uid: 201
-
environment: production
-
parameters:
-
location: beijing
-
-
-
db:
-
classes:
-
puppetdb:
-
puppetdb::master::config:
-
environment: production
-
parameters:
./enc.rb web01.production.bjcnc
---
classes:
nginx:
puppetdb::master::config:
password: fake
users:
alex:
home: /home/alex
uid: 502
jane:
home: /home/jane
uid: 201
environment: production
parameters:
location: beijing
注意,classes下参数的是node scope, 而parameter是top scope, 跟facter一样,所以建议少用parameter,本来其值也是可选的。
阅读(1784) | 评论(0) | 转发(0) |