可以在Inspec中使用Chef变量吗?

时间:2017-08-04 14:42:49

标签: chef inspec

我正在学习为我的厨师烹饪书编写集成测试。是否可以在我的测试中引用attributes文件夹中的变量?

我的测试是为了确保正确安装httpdphp。但是,我还有其他要检查的软件包。

测试/烟/默认/ install.rb

%w(httpd php).each do |rpm_package|
  describe package(rpm_package) do
    it { should be_installed }
  end
end

属性/ default.rb

default['ic_apachephp']['php_packages'] = [
                              'php-mysqlnd',
                              'php-mbstring',
                              'php-gd',
                              'php-xml',
                              'php'
                            ]

1 个答案:

答案 0 :(得分:3)

是的,这是可能的,但不是"直接"。 Matt Wrock在blog entry中描述了它。

必要的步骤是:

  • 添加包含具有以下内容的配方(将节点属性转储到指定的JSON文件中)的食谱(例如,在export-node下面称为test/fixtures/cookbooks/):

    ruby_block "Save node attributes" do
      block do
        IO.write("/tmp/kitchen_chef_node.json", node.to_json)
      end
    end
    
  • 将此食谱添加到.kitchen.yml

  • 中的运行列表中
  • 使用

    在inspec测试中加载node对象
    node = json('/tmp/kitchen_chef_node.json').params
    

请注意,您必须手动选择正确的属性优先级(自动/默认/正常/覆盖),因为它们未合并。

您可以在本食谱中找到我的一个例子:TYPO3-cookbooks/t3-pdns

编辑:我忘记了向Berkshelf讲述该食谱的步骤。添加到您的Berksfile

group :integration do
  cookbook 'export-node', path: 'test/fixtures/cookbooks/export-node'
end