ruby - 如何在 InSpec 中访问 Chef data_bags

标签 ruby chef-infra test-kitchen chef-zero inspec

我正在为我正在处理的一些新 Chef Recipe 编写 InSpec 测试。我想利用 Recipe 使用的 data_bags 遍历数据包项。我不知道如何在我的 InSpec 测试中访问它们!这些 Recipe 使用了 search、data_bag 和 data_bag_item 方法。但是这些方法在我的 InSpec 测试中似乎不可用。我怀疑这些是 Chef DSL 特定的方法? data_bags 的源代码受源代码控制,因此我可以在我的本地文件系统上访问它们的 json。

如何使用 InSpec 语法访问 Chef_zero 中的这些数据包?

我在网上找到了几个示例,但我没有看到 data_bags 实际上是如何由 chef_zero 加载的,以便它们可以用于测试,例如https://github.com/charlesjohnson/fundamentals-with-tests/blob/master/chef-repo/cookbooks/users/test/integration/default/serverspec/default_spec.rbhttps://github.com/chef/chef/blob/master/kitchen-tests/test/integration/webapp/default_spec.rb

我在 Vagrant 测试厨房上使用 Windows Server 2012R2 机器。这是来自其中一个数据包的数据包项目示例:

{
  "User": "mcummins",
  "FullName": "Martin Cummins",
  "id": "mcummins"
}

这个特定的数据包列出了添加到管理员组的 Windows Active Directory 用户。

我已经在我的 .kitchen.yml 中设置了 data_bag_path(我在 suites 和 provisioner 中设置了它)但是我还没有看到哪个是正确的:

---
driver:
  name: vagrant
  customize:
   natdnshostresolver1: "on"

provisioner:
  name: chef_zero
  data_bags_path: ../../../data_bags
#  client_rb:
#    audit_mode: :audit_only

verifier:
  name: inspec

platforms:
   - name: mwrock/Windows2012R2
     transport:
      name: winrm

suites:
  - name: default
    data_bags_path: ../../../data_bags
    run_list:
      - recipe[SPMWindowsBuilder::default]
    verifier:
      inspec_tests:
        - test/integration
    attributes:

最佳答案

这是不可能的。 InSpec 完全独立于 Chef 运行,在内部与 Chef 无关。您必须从 Chef 端将袋子项目写成文件,然后通过您的 InSpec 代码将它们读入,这会很棘手,可能像这样(未经测试):

item = JSON.parse(command('cat /tmp/item.json').stdout)

关于ruby - 如何在 InSpec 中访问 Chef data_bags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376456/

相关文章:

ruby - 为什么 YAML::Load 工作,但使用 require 的相对路径不工作

windows - 以编程方式附加到 Windows 中所有用户的路径。

java - 如何使用 chef 使用 execute 更新 java 的替代品?

hadoop - 如何在Test Kitchen Chef中使用群集节点我需要与 Chef 一起在测试厨房中安装hadoop群集进行测试

ruby-on-rails - Rails 5 迁移数据类型问题

ruby-on-rails - 由 moneris 本身处理的 Ruby 在线支付

ruby-on-rails - 运行 RSpec 测试时出现 NoMethodError

ubuntu - 如何使用 Chef 设置/更改主机名?

chef-infra - ChefSpec 和测试厨房

chef-infra - 如何在 .kitchen.yml 文件中为 chef_solo provisioner 指定 Recipe 路径?