如何在 Chef 食谱中声明 state_attrs

How to declare state_attrs in Chef recipe

我需要跟踪 运行 一组食谱的历史记录。

Chef 报告提供了一个很好的基础,它可以捕获食谱 运行 历史以及更新的资源。但是我仍然需要捕获更新的资源的初始状态和最终状态。

对于某些食谱,它使用一些默认资源,例如文件,然后在

Chef Reporting -> Run History -> Details -> Parameters

它可以显示初始状态和最终状态,例如它们是文件的校验和、模式、组、所有者属性。这是相当不错的。

但对于其他食谱,它使用的是我自己开发的新资源,没有初始和最终状态。正如 chef reporting document 中指定的,“state_attrs” 用于定义要报告给 chef 报告服务器的属性。

问题是我做了一个快速测试,使用 state_attrs 声明了 2 个属性,但它们仍然没有显示在 运行 历史初始和最终状态中...

你能告诉我如何添加state_attrs吗?

或者如果有其他方法可以跟踪更改资源的初始和最终状态,也非常感谢!我尝试使用报告处理程序,但在报告处理程序中,我无法获取初始状态,有一个 'before' 字段,但它是空的...

非常感谢!

算出来了,要达到目的有3个步骤:

  1. 在资源
  2. 中声明state_attrs
  3. 有new_resource和current_resource对象,需要 通过在 资源提供者,例如:
  def load_current_resource
   @current_resource = Chef::Resource::MyResource.new(@new_resource.name)
  end
  1. 在更新的地方给current_resource赋值。为了 示例:
@current_resource.maxage(smaxdays.to_s)

这是一个检查用户密码最长使用期限的例子。它将将从影子文件中检索到的 smaxdays 设置为 current_resource.

然后将maxage发送给chef reporting,数据如下:

res_initial_state: {"maxage":"7777"}   
res_final_state:  {"maxage":"90"}

这正是我想要捕捉的初始状态和最终状态。