【问题标题】:Chef - ServerSpec - Accessing Node attributesChef - ServerSpec - 访问节点属性
【发布时间】: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


【解决方案1】:

根据the code,没有 override_attrs 方法。

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

博文比较老了,你最好用attrs = node.merged_attributes写json文件,从cookbook、角色和环境中获取结果属性,使用merged_attributes应该避免ohai属性,保留json尺寸小。

【讨论】:

  • 我使用了一个 test_helper 配方,它将节点属性存储在一个文件中,以便 ServerSpec 可以针对它们进行测试,并发现环境变量根本没有被合并。使用node.env_override 为我解决了这个问题。谢谢。
猜你喜欢
  • 2014-03-31
  • 1970-01-01
  • 2016-02-29
  • 2019-08-14
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多