2

我正在为我写的一本食谱编写 ServerSpec 测试。测试需要节点属性来通过厨房断言各种事物。

幸运的是,这里有一个指南解释了如何实现这一点:http: //jakshi.com/blog/2014/05/12/accessing-chef-attributes-in-serverspec-tests/

我遇到的问题是,这不起作用:

attrs = attrs.deep_merge(node.override_attrs) unless node.override_attrs.empty?

但这有效:

attrs = attrs.deep_merge(node.attributes.combined_override) unless node.attributes.combined_override.empty?

我的设置与博客中描述的完全相同。由于缺少 ruby​​-fu,浏览代码没有帮助。chef-client 版本为 11.14.6,Test-Kitchen 版本为 1.3.1

有人可以帮忙吗?有没有其他人有这个问题?谢谢。

更新:这是我为模拟这一点而创建的虚拟食谱中的所有属性。

cb-under-test/recipes/default.rb
<Nothing>


cb-under-test/test/fixtures/cookbooks/fake/attributes/default.rb
force_override['important_dir'] = 'test_recipe_force_override'


../env/dummy-env.json
{
  "name": "dummy-env",
  "description": "Dummy Env",
  "cookbook_versions": {
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "override_attributes": {
    "important_dir": "env_override"
  }
}
4

1 回答 1

3

根据代码,没有 override_attrs 方法。

在这里,您将拥有食谱的属性node.override和环境的属性node.env_override,它们node.combined_override为您提供深度合并后的结果属性。

这篇博文很老了,你最好用attrs = node.merged_attributes写 json 文件并从食谱、角色和环境中获取结果属性,使用merged_attributes应该避免ohai属性,保持 json 大小低。

于 2015-10-20T07:50:48.027 回答