如何识别由厨师食谱修改/触摸的文件

时间:2013-12-07 07:26:33

标签: chef chef-recipe

我想找到由chef sever触摸/修改/创建的厨师客户端上的文件。

chef-client -l debug命令提供了大量输出。

5 个答案:

答案 0 :(得分:1)

尝试knife-lastrun

它为您提供了所有已修改资源的列表。

答案 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 -Wchef-client时减少输出,但仅限于一组限制字符,具体取决于每个资源的状态,在实际/可能更改的资源结束时有一个很好的摘要。

根据几年前的博客文章,您应该可以修改client.rb并添加verbose_logging falselog_level :info以减少混乱,但我没有太多好运。 https://www.frankmitchell.org/2013/04/shush-chef/