我看到一个与此相关的错误,该错误在一年前被接受并关闭:http://projects.puppetlabs.com/issues/3670 但我正在使用 puppet 2.7.14 并且遇到了同样的问题。
我正在尝试使用“puppet solo”(即在要配置的每台服务器上运行 puppet apply),因为这个项目中只有 2 或 3 台服务器,而添加另一台服务器作为 puppetmaster 则完全是小菜一碟。除非我弄错了,否则将节点手动应用到服务器的最佳方法是执行以下操作:
puppet master --compile=mynode > catalog.json
puppet apply --catalog catalog.json
但该puppet master
命令会将一些警告和通知输出到 stdout,与所需的 json 内容混合在一起。而且它使用彩色输出,所以我不能直接通过管道传输egrep -v '^warning:'
编辑:我想使用 grep 并不是什么大问题 - 因为 puppet 2.7 可以漂亮地打印实际内容,并且警告不会以空格开头,因此可以通过管道传输egrep '^( |{|})'
输出
所以我的问题基本上是:
- 有没有比这更好的方法来应用木偶节点而不使用木偶大师?我在网上找不到任何关于不使用木偶大师使用木偶的好参考资料,尽管对于一个小项目来说,这似乎是一件非常合理的事情。
- 我是否遗漏了某个设置或标志,让它
puppet master
不再像个混蛋,而是将其错误发送到 stderr 而不是 stdout? - 或者我真的必须关闭颜色日志记录,然后使用 grep 排除警告:和注意:行?
答案1
要在无主 Puppet 模式下运行,您可以直接使用,puppet apply
而无需单独的puppet master
编译步骤。这是正常的做法,可以避免您在目录中遇到日志消息的问题(尽管这确实应该修复,但问题仍在解决中)。
您需要使用两个填充路径puppet apply
:
- 清单路径:Puppet 将读取的第一个清单,通常称为 site.pp
- 模块路径:包含一组模块的目录标准布局
site.pp 清单通常位于/etc/puppet/manifests/site.pp
并且可能只是包含以下类的列表:
include module1::class, module2::class
然后您可以运行puppet apply --modulepath=/foo/modules site.pp
,或者甚至只是puppet apply --modulepath=/foo/modules -e "include module1::class"
。