Ruby cookbook如何根据是否安装了包来分配Chef属性?

Ruby cookbook如何根据是否安装了包来分配Chef属性?,ruby,attributes,package,chef-infra,Ruby,Attributes,Package,Chef Infra,我有一个特定的Chef属性,我想根据是否安装了包来改变它。例如: if package X is installed default['attr1']['attr2'] = 'value1' else default['attr1']['attr2'] = 'value2' end 然后,该属性将用于在放置的模板文件中设置某些值 在网上寻找最好的方法后,我发现这绝对不是常见的做法。这让我怀疑我是否也采取了错误的方法来解决我的问题 所以我这里的全部问题是,确定包是否安装在Chef属性文件

我有一个特定的Chef属性,我想根据是否安装了包来改变它。例如:

if package X is installed
  default['attr1']['attr2'] = 'value1'
else
  default['attr1']['attr2'] = 'value2'
end
然后,该属性将用于在放置的模板文件中设置某些值

在网上寻找最好的方法后,我发现这绝对不是常见的做法。这让我怀疑我是否也采取了错误的方法来解决我的问题


所以我这里的全部问题是,确定包是否安装在Chef属性文件中的最佳方法是什么。不建议您根据系统的当前配置更改属性吗?如果没有,那么原因是什么?

Ohai已经在运行开始时通过
节点['packages']
为您这样做了。一般来说,Chef代码应该描述系统的期望状态,而不是对当前状态做出反应。在Chef自己的代码深处,它必须执行测试和修复循环,但您的代码通常不需要这样做。有关更多详细信息,请参阅