如何在依赖于标签的测试厨房中测试食谱?

How do I test cookbooks in test kitchen that depend on tags?

我有一本依赖标签的食谱。它搜索具有给定标签的节点,并使用 search(:node, 'tag:MyTag') 获取它们的名称和 IP。我如何在测试厨房中对此进行模拟?

有我可以使用的模拟节点对象吗?它不必与其他节点通信我只是想测试 search() 是否成功提取了正确的信息。

使用 serverspec 时,chef-zero 将使用目录 test/integration/ 作为默认存储库位置。在这里您可以放置​​一些节点文件来模拟连接到同一 Chef 服务器的其他节点。

├── Berksfile
├── chefignore
├── metadata.rb
├── README.md
├── recipes
│   └── default.rb
└── test
    └── integration
        ├── default
        │   └── serverspec
        │       └── default_spec.rb
        ├── helpers
        │   └── serverspec
        │       └── spec_helper.rb
        └── nodes
            ├── demo1.json
            └── demo2.json

demo1.json

{
  "name": "demo1",
  "normal": {
    "tags": [
      "DEMO=1"
    ]
  }
}

demo2.json

{
  "name": "demo2",
  "normal": {
    "tags": [
      "DEMO=1"
    ]
  }
}

更新

我有一本使用这种技术测试 Jenkins master 和 slaves 的食谱

或者,您可以为您的节点编辑测试 kitchen.yml 文件的套件部分。属性部分管理您的普通属性,这是存储标签的地方:

- name: sand01
provisioner:
  name: chef_zero
attributes:
  tags:
    - MyTag