今天把 puppet 从2.7 升级到了 3.0。同时放弃了之前通过 ENC 定义所有 top scope variable 的做法,改成只定义一个 role 变量,然后在各个 module 里根据 $role 加载不同的module::role ,把变量都写在 module::role 里。
经历过上次事故后,我对全局变量已经大大的有不安全感,包括 puppet 3.0 新进内核的 hiera (官网介绍文档中也说是”like a lightweight ENC”)。虽然 module::role 看起来很多是重复内容,还是让人工的操作多经过一些检测才放心。
从 2.7 升级到 3.0 没有太多的不适应。官网上列了很多不同。不过实际上基本没改动什么。
puppet command
的形式,2.7的时候还保留的一堆命令都没有了。--apply
改成 --catalog
了。不过这个其实我没用过。pluginsync
默认开启了。这个是替代 factsync
的。2.7 的时候默认还是关闭。给 facter 写插件应该是很容易而且很必要的事情。--servertype=mongrel
没用了。但是 3.0 变成了标准 Rack 应用。直接在 /etc/puppet/rack
下运行 rackup -s thin -p 18140 -D -P /tmp/puppetmaster.pid
就可以了。config.ru
改了,看 example 就好。include
可以传递数组以上是官网列举的主要内容。以下还有我__实际测试中发现的问题__:
preferred_serialization_format = yaml
,否则默认使用 pson 会直接报错。今天重温了一下 github 在 puppetconf 上的讲演《chatops》。当然对其中的 hubot 不是重点关注。主要是其中提到的 rodjek 的几个 puppet 相关的项目觉得蛮有用的。
地址:https://github.com/rodjek/puppet-lint.git
这是一个语法格式检查器,如果 ERROR 会 exit 1
。之前两天我还刚在 CPAN 上发现过一个 Puppet::Tidy 模块。不过目前为止,这两个都不是很满意:
当然比 puppet-tidy 稍微好一些的 puppet-lint 也不是很精准,比如他会对所有用双引号定义的变量报 “WARNING: double quoted string containing no variables”;而 puppet-tidy 更奇怪的给我 ip 地址的最后一段再加上了一个单引号变成了下面这个样子:
$iplist = ["192.168.1.'2'","192.168.1.'3'"]
只能说规范化任重道远。
地址:https://github.com/rodjek/puppet-profiler.git
这是一个 agent 执行的调试器,不过至今为止功能也还很简单:就是执行一次
puppet agent --test --evaltrace --nocolor
排序各个 Resource 的执行耗时,并打印前十名。
地址:https://github.com/rodjek/rspec-puppet
这是一个 puppet 的 rspec 测试工具扩展。注意他依赖于 puppetlabs_spec_helper
但是 gem 里却没写。。。
使用方法看 github 上的说明比较详细了,稍后我再单写一篇介绍。