6

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

如何使用 InSpec 语法访问 Chef_zero 中的这些 data_bags?

我在网上找到了几个例子,但我没有看到 chef_zero 是如何实际加载 data_bags 的,以便它们可以在测试中使用,例如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 (我在套件和配置器中设置了它),但我还没有到可以看到哪个是正确的地步:

---
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:
4

2 回答 2

0

执行inspec的方式有很多种——本地、SSH、WinRM 或 Dockerit——从你如何执行的问题中并不清楚inspec

假如说:

  1. inspec在连接到厨师服务器的节点上本地执行(在节点本身上安装 inspec 然后调用它)
  2. 节点持有客户端配置(假设它位于/etc/chef/client.rb,客户端密钥和加密数据包密钥
  3. inspec 嵌入式 ruby​​ 已chef安装 ruby​​gem。这是一个提示:

    $ /opt/inspec/embedded/bin/gem install chef

然后你可以使用inspec通过ruby读取数据包内容。

require 'chef'
Chef::Config.from_file '/etc/chef/client.rb'
data_bag = Chef::DataBagItem.load 'data_bag_name'
item = data_bag['item']
于 2019-01-17T09:05:25.177 回答
0

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

item = JSON.parse(command('cat /tmp/item.json').stdout)
于 2016-11-18T16:19:07.513 回答