【问题标题】:Possible to use Chef variables within Inspec?可以在 Inspec 中使用 Chef 变量吗?
【发布时间】:2018-01-12 13:26:17
【问题描述】:

我正在学习为我的 Chef 食谱编写集成测试。是否可以在我的测试中引用 attributes 文件夹中的变量?

这是我的测试,以确保正确安装 httpdphp。但是,我还有其他要检查的包。

test/smoke/default/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'
                            ]

【问题讨论】:

    标签: chef-infra inspec


    【解决方案1】:

    是的,这是可能的,但不是“直接”。 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
    

    【讨论】:

    • 好吧,所以...为了将食谱添加到.kitchen.yml 中的run_list,我必须在我正在测试的食谱中添加depends export-node。那正确吗?如果没有depends 子句,它会一直告诉我找不到export-node 食谱。一旦我过去了,我就会收到No such file or directory @ rb_sysopen - /tmp/kitchen/chef_node.json 的欢迎...除了文件在docker 容器上。
    • 无需添加依赖项(您不希望该说明书出现在您的生产节点上,不是吗?)。在test/fixtures/cookbooks 中时会自动找到。请看一下我参考的食谱。
    • 抱歉,忘记了berkshelf部分。我已经更新了答案。
    • 在我的 5 本食谱中添加了这样的代码后,我觉得自己很愚蠢 ^^
    • 该死,你去node-exporter mwrock。我误解了博客文章。
    猜你喜欢
    • 2017-01-27
    • 2021-05-27
    • 1970-01-01
    • 2016-12-09
    • 2016-11-02
    • 2021-09-29
    • 1970-01-01
    • 2021-04-11
    • 2016-12-15
    相关资源
    最近更新 更多