【发布时间】:2015-10-19 14:48:27
【问题描述】:
我正在为我编写的食谱编写 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,浏览 code 没有帮助。 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"
}
}
【问题讨论】:
-
添加你的测试食谱的属性文件,我们无法猜测你设置它们的级别......
-
属性来自包括环境在内的几个地方。我的测试食谱中没有任何属性。
-
无论如何,如果没有提取,我们无法猜测您的属性定义在哪个级别(默认、正常、覆盖,否则?)
-
您使用的是哪个版本的厨师? (只是为了确定我必须检查哪些代码以获取属性级别访问器)
-
在测试 VM 上是 11.14.6。我正在通过厨房使用厨师独奏。
标签: chef-infra serverspec