如何在测试厨房中运行角色而不将所有内容放入berks文件中?

时间:2016-08-01 11:39:17

标签: chef chef-recipe knife test-kitchen

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

我读了很多文章,但我仍然非常困惑。

以下是我现在正在做的事情:

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

现在,我有其他的烹饪书,可以安装应用程序并针对特定目的进行特定的配置更改。虽然这些烹饪书通常应该工作" (意味着不会抛出错误)而不需要先运行基本角色,他们仍然可能依赖于基本角色来执行一些初始服务器配置,如果没有首先应用,可能无法正常工作。

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

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

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

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

我应该说我也尝试在kitchen.yml中定义cookbook路径(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:

1 个答案:

答案 0 :(得分:2)

答案仍然与上次相同,你必须向Kitchen展示如何获得所有的食谱。您可以通过Berkshelf,Librarian,Policyfiles或静态路径执行此操作。如果您想要查看100%支持的内容,相关代码位于https://github.com/test-kitchen/test-kitchen/blob/master/lib/kitchen/provisioner/chef/common_sandbox.rb。没有像Chef Service那样自动化,因为这被认为是用于开发的,因此不能依赖于单个工件仓库。