2016-10-11 23 views
1

我遇到了.kitchen.yml文件的问题。我希望我的属性能够加载我的平台的所有全部,但相反,它只能加载我的平台的一个。这就是我的.kitchen.yml文件内容是这样的:厨房属性只能在一个平台上工作

.kitchen.yml
--- 
driver: 
    name: vagrant 
    gui: true 

provisioner: 
    name: chef_zero 

transport: 
    name: winrm 
    elevated: true 

platforms: 
    - name: win2012r2-standard 
    driver: 
     box: eltuko/win2012r2-chef-pester 
     customize: 
     memory: 2048 
    - name: win2008r2-standard 
    driver: 
     box: charris/windows-2008-r2-x64 
     customize: 
     memory: 2048 

suites: 
    - name: default 
    run_list: 
     - recipe[xxx] 
     - recipe[yyy] 
    attributes: 
     web: 
     app: 
      name: "MyApp" 
      zip: "MyApp.zip" 
     chef_client: 
     config: 
      log_level: ":debug" 

需要更多的环境?

我的食谱需要设置2个属性才能使其工作。默认情况下,这些属性值设置为nil

属性/ default.rb
default['web']['app']['name'] = nil 
default['web']['app']['zip'] = nil 

我的默认配方检查,一开始,这个属性是继续脚本之前设置,我这样做是使用以下:

食谱/默认。 RB
ruby_block 'Check if node is configured correctly' do 
    block do 
    raise 'app name is not set.' if node['web']['app']['name'].nil? 
    raise 'app zip is not set.' if node['web']['app']['zip'].nil? 
    end 
end 

当我运行kitchen converge,厨房推出我的Windows Server 2012 R2 VM,并成功地部署我的应用程序(属性工作)。一旦该平台完成,厨房然后再次启动整个程序为我的Windows Server 2008 R2虚拟机。虽然在这一点上它抛出了我在我的recipes/default.rb文件中创建的异常。

我收到以下错误Windows Server 2008 R2 VM:

控制台日志
================================================================================ 
Error executing action `run` on resource 'ruby_block[Check if node is configured correctly]' 
================================================================================ 

    RuntimeError 
    ------------ 
    app name is not set. 
+4

如果您在创建虚拟机后添加了属性数据,请确保您运行完整的破坏和重新创建循环(即“厨房测试”)。否则你看起来是正确的。 – coderanger

+1

@coderanger哇!谢谢,运行'厨房测试'工作!我还用“厨房摧毁2008”和“厨房融合2008”对它进行了测试,就像一种魅力!我只是这么抛弃为什么'Windows Server 2012 R2'工作,但不是'Windows Server 2008 R2'。谢谢! +1 – Pwnzo

回答

2

复制下来,因为这是答案:当你添加,删除或更改的属性数据您需要销毁并重新创建该实例的测试实例。属性数据在创建阶段被收集和缓存,因此只需重新运行converge将不会执行任何操作。