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
- }
如何配置? 在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
-
---
-
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:
---
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,本来其值也是可选的。