Chinaunix首页 | 论坛 | 博客
  • 博客访问: 790852
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类: 系统运维

2016-08-27 11:57:43

   最近体验了一把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来指定,比如:

  1. #ste.pp
  2. node 'web01.xxx.com' {
  3.  include web
  4. }
    当然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.xx.com , www.xxx, 和www来匹配(strict_hostname_checking=true 则只让site.pp接受FQDN)。当然你可以用ldap/和mysql等,把信息存到db,然后脚本查询,这样可以跟cmdb结合起来了。

  1. #!/usr/bin/env ruby

  2. require 'yaml'
  3. node = ARGV[0]

  4. # agent's FQDN : ${app}.${env}.${Location || IDC}.xxx.com, e.g web01.prod.bjcnc.xxx.com

  5. if node =~ /(^[a-zA-Z]+)(\d+)\.(\S+)\.(\S+)\.(\S+)\.(\S+)$/

  6.     hostname = $1
  7.     env = $3
  8.     config = YAML.load_file('/etc/puppetlabs/defaults.yaml')[env]
  9.     print YAML.dump(config.fetch(hostname))
  10.     exit 0

  11. else

  12.     config = YAML.load_file('defaults.yaml')
  13.     print YAML.dump(config.fetch('base'))
  14.     exit 0

  15. end
# defaults.yaml, 定义了environment/classes, 其中classes可以带参数,用于parameterized class, 不知道这个是啥,得自己看看资料了。

  1. ---
  2. base:
  3.   classes:
  4.     vim:
  5.     telnet:
  6.   environment: production
  7.   parameters:


  8. production:
  9.   web:
  10.     classes:
  11.       nginx:
  12.       puppetdb::master::config:
  13.         password: fake
  14.         users:
  15.           alex:
  16.             home: /home/alex
  17.             uid: 502
  18.           jane:
  19.             home: /home/jane
  20.             uid: 201
  21.     environment: production
  22.     parameters:
  23.       location: beijing
  24.   
  25.   
  26.   db:
  27.     classes:
  28.       puppetdb:
  29.       puppetdb::master::config:
  30.     environment: production
  31.     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,本来其值也是可选的。

阅读(1017) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~