chef-client 16 不报告更新了多少资源
chef-client 16 does not report how many resources got updated
我在 Ubuntu Focal 上使用 chef-client 16.8,
刚刚发现它的输出和之前的有很大的不同,
# chef-client -o some_cookbook -l info
...
[2021-01-14T09:45:49+00:00] INFO: Skipping removal of unused files from the cache
[2021-01-14T09:45:49+00:00] INFO: Running report handlers
[2021-01-14T09:45:49+00:00] INFO: Report handlers complete
[2021-01-14T09:45:49+00:00] INFO: Chef::Compliance::Runner#enabled?: Chef InSpec profiles? false
[2021-01-14T09:45:49+00:00] INFO: Chef::Compliance::Runner#enabled?: audit cookbook? false
[2021-01-14T09:45:49+00:00] INFO: Sending resource update report (run-id: 27e9fbeb-118d-4fc3-8de3-8f5f32eae15d)
上一个(chef-client 13.12.3)是这样的:
...
* execute[echo] action run (skipped due to only_if)
* file[/tmp/etc/apache2/certs/.changed] action nothing (skipped due to action :nothing)
Running handlers:
Running handlers complete
Chef Client finished, 0/13 resources updated in 06 seconds
显然,chef-client 16 不显示颜色报告,也不显示更新了多少资源的统计数据。
有谁知道如何设置 chef-client 16 以显示更改了哪些资源?
我是 运行宁大厨 16.9.20,我没有那个问题。在 chef-client 运行 之后我得到
Chef Infra Client finished, 15/126 resources updated in 36 seconds
Chef 16.0 更改了记录器和格式化程序的工作方式:
https://github.com/chef/chef/pull/9751
这样做是为了解决一个极其常见的问题,即当通过 grep 之类的管道传输时,输出从格式化程序神奇地变为记录器:
chef-client | grep "resources updated"
(在没有任何其他配置的情况下,管道通常会打印“资源已更新”行,而管道到 grep 会丢失 tty,而 chef-client 中的魔法会自动将输出切换到不再记录的记录器线)
无法修复此问题并保持向后兼容性。为了确保 config.rb 设置得到遵守,cli 设置可以覆盖它们,并且命令行 运行 chef-client 也会登录到 /var/log/messages.[=14,所以进行了大量工作=]
格式化程序输出中的 tty 输出和记录器输出同时进入日志文件仍然是不可能的。
对于在 client.rb 中配置了日志记录的用户,现在可能需要 --force-formatter
选项:
chef-client --force-formatter
这通常也会记录到日志文件,但会将输出切换到格式化程序,如果用户设置了以日志格式记录到日志文件,则会导致格式混合,这并不是任何人真正想要的想要,但解决这个问题是上面那个 pull request 末尾讨论的主题。由于 Chef 17 很可能由 Ruby 3.0 修复主导,因此 bug 不太可能在 Chef 18 之前得到修复。
我在 Ubuntu Focal 上使用 chef-client 16.8, 刚刚发现它的输出和之前的有很大的不同,
# chef-client -o some_cookbook -l info
...
[2021-01-14T09:45:49+00:00] INFO: Skipping removal of unused files from the cache
[2021-01-14T09:45:49+00:00] INFO: Running report handlers
[2021-01-14T09:45:49+00:00] INFO: Report handlers complete
[2021-01-14T09:45:49+00:00] INFO: Chef::Compliance::Runner#enabled?: Chef InSpec profiles? false
[2021-01-14T09:45:49+00:00] INFO: Chef::Compliance::Runner#enabled?: audit cookbook? false
[2021-01-14T09:45:49+00:00] INFO: Sending resource update report (run-id: 27e9fbeb-118d-4fc3-8de3-8f5f32eae15d)
上一个(chef-client 13.12.3)是这样的:
...
* execute[echo] action run (skipped due to only_if)
* file[/tmp/etc/apache2/certs/.changed] action nothing (skipped due to action :nothing)
Running handlers:
Running handlers complete
Chef Client finished, 0/13 resources updated in 06 seconds
显然,chef-client 16 不显示颜色报告,也不显示更新了多少资源的统计数据。
有谁知道如何设置 chef-client 16 以显示更改了哪些资源?
我是 运行宁大厨 16.9.20,我没有那个问题。在 chef-client 运行 之后我得到
Chef Infra Client finished, 15/126 resources updated in 36 seconds
Chef 16.0 更改了记录器和格式化程序的工作方式:
https://github.com/chef/chef/pull/9751
这样做是为了解决一个极其常见的问题,即当通过 grep 之类的管道传输时,输出从格式化程序神奇地变为记录器:
chef-client | grep "resources updated"
(在没有任何其他配置的情况下,管道通常会打印“资源已更新”行,而管道到 grep 会丢失 tty,而 chef-client 中的魔法会自动将输出切换到不再记录的记录器线)
无法修复此问题并保持向后兼容性。为了确保 config.rb 设置得到遵守,cli 设置可以覆盖它们,并且命令行 运行 chef-client 也会登录到 /var/log/messages.[=14,所以进行了大量工作=]
格式化程序输出中的 tty 输出和记录器输出同时进入日志文件仍然是不可能的。
对于在 client.rb 中配置了日志记录的用户,现在可能需要 --force-formatter
选项:
chef-client --force-formatter
这通常也会记录到日志文件,但会将输出切换到格式化程序,如果用户设置了以日志格式记录到日志文件,则会导致格式混合,这并不是任何人真正想要的想要,但解决这个问题是上面那个 pull request 末尾讨论的主题。由于 Chef 17 很可能由 Ruby 3.0 修复主导,因此 bug 不太可能在 Chef 18 之前得到修复。