首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在InSpec中访问厨师data_bags

如何在InSpec中访问厨师data_bags
EN

Stack Overflow用户
提问于 2016-11-02 17:30:00
回答 2查看 1.5K关注 0票数 6

我正在为我正在开发的一些新的厨师食谱编写InSpec测试。我想利用食谱使用的data_bags来迭代数据包项。我不知道如何在我的InSpec测试中访问它们!食谱使用了search、data_bag和data_bag_item方法。但是这些方法在我的InSpec测试中似乎不可用。我怀疑这些是厨师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机器。这是一个来自其中一个数据包的数据包项的示例:

代码语言:javascript
复制
{
  "User": "mcummins",
  "FullName": "Martin Cummins",
  "id": "mcummins"
}

此特定数据包列出了添加到administrators组的Windows Active Directory用户。

我已经在我的.kitchen.yml中设置了data_bag_path (我在suites和provisioner中设置了它),但我还不能确定哪一个是正确的:

代码语言:javascript
复制
---
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:
EN

回答 2

Stack Overflow用户

发布于 2016-11-19 00:19:08

这是不可能的。InSpec与厨师完全分开运行,在内部与厨师没有任何关系。您必须将袋子项目作为文件从厨师端编写,然后通过您的InSpec代码读取它们,这将是棘手的,可能如下所示(未经测试):

代码语言:javascript
复制
item = JSON.parse(command('cat /tmp/item.json').stdout)
票数 0
EN

Stack Overflow用户

发布于 2019-01-17 17:05:25

有许多方法可以执行execute inspec --本地的、SSH的、WinRM的或Dockerit的--在如何执行inspec的问题中并不清楚。

假设:

  1. 您可以在连接到chef服务器的节点上本地执行inspec (在节点上安装inspec,然后调用它)
  2. 节点保存客户端配置(假设它位于/etc/chef/client.rb中,客户端密钥和加密的数据包秘密密钥
  3. inspec embedded ruby安装了chef rubygem。这里有一个提示:

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

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

代码语言:javascript
复制
require 'chef'
Chef::Config.from_file '/etc/chef/client.rb'
data_bag = Chef::DataBagItem.load 'data_bag_name'
item = data_bag['item']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40376456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档