我看到一个关于此的错误,一年前被接受然后关闭: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 '^( |{|})'
作品
所以我的问题基本上是:
- 有没有比这更好的方法来应用人偶节点而不使用人偶大师?我真的无法在网上找到任何关于在没有 puppetmaster 的情况下使用 puppet 的好的参考资料,尽管对于一个小项目来说这似乎是一件非常合理的事情。
- 是否有我缺少的设置或标志,它将
puppet master
不再是一个混蛋并将其错误发送到 stderr 而不是 stdout? - 或者我真的必须关闭颜色记录,然后 grep 排除警告:和通知:行?
要在无主 Puppet 模式下运行,您只需使用
puppet apply
即可,无需单独的puppet master
编译步骤。这是完成它的正常方法,并且会避免您在目录中的日志消息中遇到的问题(尽管这确实应该被修复,票证仍然开放)。您需要两个填充路径才能使用
puppet apply
: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"
。