puppet master --compile 将错误记录到 stdout

puppet master --compile 将错误记录到 stdout

我看到一个与此相关的错误,该错误在一年前被接受并关闭: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

  1. 清单路径:Puppet 将读取的第一个清单,通常称为 site.pp
  2. 模块路径:包含一组模块的目录标准布局

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"

相关内容