如何在不将所有内容放入 berksfile 的情况下在测试厨房中 运行 角色?

How do I run roles in test kitchen without putting everything in the berksfile?

问了一个 ,但意识到我的问题更多的是概念化它是如何工作的。

看了很多文章,还是一头雾水

这是我现在正在做的事情:

我将一组基本角色应用于我的所有节点(windows_base、linux_base 等)。这些角色应用配方来执行诸如设置时区、加入 AD 以及执行所有服务器所需的其他配置,无论其目的如何。

现在我有我的其他食谱,可以安装应用程序并为特定目的进行特定的配置更改。虽然这些食谱通常应该 "work" (意思是不会抛出错误)而不需要基本角色 运行 首先他们仍然可能依赖于基本角色来做一些初始服务器配置并且没有它可能无法正常工作先申请。

因此,当我在测试厨房中测试我的一本食谱时,我有时会想在 运行 列表中包含一个基本角色(在我正在测试的食谱食谱之前)。

我使用 knife download 从我的服务器下载了我的角色,并通过 roles_path 在 kitchen.yml 中指定了它们,但显然我仍然需要告诉测试厨房从哪里获取我的食谱到角色中?

现在你可以看到我问的上一个问题是建议我使用 berkshelf,但如果我这样做,我需要在我正在测试的食谱的 berksfile 中指定基本角色的所有食谱,对吗?这对我来说没有意义,因为在通过 Chef 服务器将角色应用到节点时我不需要这样做。我也不希望我的 berksfile 中有所有这些依赖关系,因为就像我说的那样,它们在某种程度上取决于角色,但不一定。

我如何在测试 Kitchen 中使用角色,就像在 Chef 服务器上使用角色一样 - 这意味着我只是将角色应用于节点 运行 列表。

我应该说我也尝试在 kitchen.yml 中定义食谱路径 (cookbooks_path:) 但这并没有奏效。

这是我的.kitchen.yml

---
driver:
  name: hyperv
  parent_vhd_folder: c:\HyperV\VHDs\
  parent_vhd_name: 2012R2.vhdx
  vm_switch: NAT
  memory_startup_bytes: 2GB

provisioner:
  name: chef_zero
  roles_path: c:\.chef\roles
  cookbooks_path: ..\

transport:
  password: myPass123$

platforms:
  - name: windows-2012r2

suites:
  - name: default
    run_list:
      - role[linux_base]
    attributes:

答案还是和上次一样,你得给Kitchen看如何得到你所有的食谱。您可以通过 Berkshelf、Librarian、Policyfiles 或静态路径执行此操作。如果您想查看 100% 支持的内容,相关代码在 https://github.com/test-kitchen/test-kitchen/blob/master/lib/kitchen/provisioner/chef/common_sandbox.rb 中。没有像 Chef 服务器那样自动的东西,因为这被假定为用于开发,因此不能依赖单个工件存储库。