我想找到由chef sever触摸/修改/创建的厨师客户端上的文件。
chef-client -l
debug命令提供了大量输出。
答案 0 :(得分:1)
它为您提供了所有已修改资源的列表。
答案 1 :(得分:1)
实际上在Chef 11.8.2 info (不是调试)日志中非常清楚地说明了没有触及的资源。除了他们之外,他们还有(最新)。此外,如果您将日志输出发送到控制台而不是文件,则更改的资源将为绿色。
答案 2 :(得分:1)
如果您在厨师 - 客户端运行中配置并安装report handler,则可以获取更新资源的列表(即更改的内容)以及您可能觉得有用的其他好东西。
报告处理程序中调用的report()
函数会传递一个run_status
对象,其中包含以下内容:
node
,主厨客户端运行的节点。all_resources
,当前chef-client运行的resource_collection属性中包含的所有资源的列表。updated_resources
,由于厨师 - 客户端运行而被标记为已更新的资源列表。答案 3 :(得分:1)
如果要在chef的上下文中列出修改后的资源,可以安装chef-handler-updated-resources:
$ gem install chef-handler-updated-resources
然后将以下代码添加到您的/etc/chef/client.rb
中:
require 'chef/handler/updated_resources'
updated_resources_handler = SimpleReport::UpdatedResources.new
report_handlers << updated_resources_handler
但是,如果您确实要在Chef资源下列出已打开的文件描述符,则由于ruby垃圾回收,需要在chef-client
进程之外提供低级别信息。假设chef-client在linux OS上运行,您可以使用目录/proc/$pid/fd
通过给定进程使用pid列出所有打开的文件描述符。因此,您可以使用此报告方法编写自定义主厨处理程序:
def report
Chef::Log.info "File opened by this chef client run:"
%x( ls /proc/#{Process.pid}/fd -lh | awk '{print $11}').split("\n").uniq!.each {|fd| Chef::Log.info " #{fd.to_s}"}
end
答案 4 :(得分:0)
2018年,执行此操作的“最简单”方法是使用-F min
运行,这会在运行chef-client -W
或chef-client
时减少输出,但仅限于一组限制字符,具体取决于每个资源的状态,在实际/可能更改的资源结束时有一个很好的摘要。
根据几年前的博客文章,您应该可以修改client.rb
并添加verbose_logging false
和log_level :info
以减少混乱,但我没有太多好运。 https://www.frankmitchell.org/2013/04/shush-chef/