问了一个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:
答案 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那样自动化,因为这被认为是用于开发的,因此不能依赖于单个工件仓库。